from fpdf import FPDF
class DidacticPDF(FPDF):
self.set_font("Arial", 'B', 16)
self.set_text_color(100, 100, 255)
self.cell(0, 10, 'Aprendo las sílabas con P, M y S', ln=True, align='C')
self.ln(5)
def footer(self):
self.set_y(-15)
self.set_font("Arial", 'I', 8)
self.set_text_color(150)
self.cell(0, 10, f'Página {self.page_no()}', align='C')
def add_syllable_section(self, letra, silabas, palabras):
self.add_page()
self.set_font("Arial", 'B', 14)
self.set_text_color(0)
self.cell(0, 10, f'Letra: {letra}', ln=True)
self.set_font("Arial", '', 12)
self.cell(0, 10, 'Sílabas para practicar:', ln=True)
self.ln(5)
self.set_font("Arial", '', 36)
for s in silabas:
self.cell(38, 20, s, border=1, align='C')
self.ln(30)
self.set_font("Arial", '', 12)
self.cell(0, 10, f'Palabras con la letra {letra}:', ln=True)
self.set_font("Arial", '', 24)
for palabra in palabras:
self.cell(0, 12, f'- {palabra}', ln=True)
self.ln(10)
self.set_font("Arial", 'I', 12)
self.set_text_color(100, 100, 100)
self.multi_cell(0, 10, "✍️ Practica escribiendo las sílabas y luego léelas en voz alta. Puedes dibujar junto a cada palabra.")
datos = {
'P': {
'silabas': ['pa', 'pe', 'pi', 'po', 'pu'],
'palabras': ['papá', 'pera', 'pico', 'pollo', 'pulpo']
},
'M': {
'silabas': ['ma', 'me', 'mi', 'mo', 'mu'],
'palabras': ['mamá', 'mesa', 'mimo', 'moto', 'muro']
},
'S': {
'silabas': ['sa', 'se', 'si', 'so', 'su'],
'palabras': ['sol', 'silla', 'sopa', 'sello', 'suma']
}
}
pdf = DidacticPDF()
pdf.set_auto_page_break(auto=True, margin=15)
for letra, contenido in datos.items():
pdf.add_syllable_section(letra, contenido['silabas'], contenido['palabras'])
pdf.output("/mnt/data/guia_didactica_silabas_nina.pdf")
ZnJvbSBmcGRmIGltcG9ydCBGUERGCgpjbGFzcyBEaWRhY3RpY1BERihGUERGKToKICAgIGRlZiBoZWFkZXIoc2VsZik6CiAgICAgICAgc2VsZi5zZXRfZm9udCgiQXJpYWwiLCAnQicsIDE2KQogICAgICAgIHNlbGYuc2V0X3RleHRfY29sb3IoMTAwLCAxMDAsIDI1NSkKICAgICAgICBzZWxmLmNlbGwoMCwgMTAsICdBcHJlbmRvIGxhcyBzw61sYWJhcyBjb24gUCwgTSB5IFMnLCBsbj1UcnVlLCBhbGlnbj0nQycpCiAgICAgICAgc2VsZi5sbig1KQoKICAgIGRlZiBmb290ZXIoc2VsZik6CiAgICAgICAgc2VsZi5zZXRfeSgtMTUpCiAgICAgICAgc2VsZi5zZXRfZm9udCgiQXJpYWwiLCAnSScsIDgpCiAgICAgICAgc2VsZi5zZXRfdGV4dF9jb2xvcigxNTApCiAgICAgICAgc2VsZi5jZWxsKDAsIDEwLCBmJ1DDoWdpbmEge3NlbGYucGFnZV9ubygpfScsIGFsaWduPSdDJykKCiAgICBkZWYgYWRkX3N5bGxhYmxlX3NlY3Rpb24oc2VsZiwgbGV0cmEsIHNpbGFiYXMsIHBhbGFicmFzKToKICAgICAgICBzZWxmLmFkZF9wYWdlKCkKICAgICAgICBzZWxmLnNldF9mb250KCJBcmlhbCIsICdCJywgMTQpCiAgICAgICAgc2VsZi5zZXRfdGV4dF9jb2xvcigwKQogICAgICAgIHNlbGYuY2VsbCgwLCAxMCwgZidMZXRyYToge2xldHJhfScsIGxuPVRydWUpCgogICAgICAgIHNlbGYuc2V0X2ZvbnQoIkFyaWFsIiwgJycsIDEyKQogICAgICAgIHNlbGYuY2VsbCgwLCAxMCwgJ1PDrWxhYmFzIHBhcmEgcHJhY3RpY2FyOicsIGxuPVRydWUpCiAgICAgICAgc2VsZi5sbig1KQoKICAgICAgICBzZWxmLnNldF9mb250KCJBcmlhbCIsICcnLCAzNikKICAgICAgICBmb3IgcyBpbiBzaWxhYmFzOgogICAgICAgICAgICBzZWxmLmNlbGwoMzgsIDIwLCBzLCBib3JkZXI9MSwgYWxpZ249J0MnKQogICAgICAgIHNlbGYubG4oMzApCgogICAgICAgIHNlbGYuc2V0X2ZvbnQoIkFyaWFsIiwgJycsIDEyKQogICAgICAgIHNlbGYuY2VsbCgwLCAxMCwgZidQYWxhYnJhcyBjb24gbGEgbGV0cmEge2xldHJhfTonLCBsbj1UcnVlKQogICAgICAgIHNlbGYuc2V0X2ZvbnQoIkFyaWFsIiwgJycsIDI0KQogICAgICAgIGZvciBwYWxhYnJhIGluIHBhbGFicmFzOgogICAgICAgICAgICBzZWxmLmNlbGwoMCwgMTIsIGYnLSB7cGFsYWJyYX0nLCBsbj1UcnVlKQogICAgICAgIHNlbGYubG4oMTApCgogICAgICAgIHNlbGYuc2V0X2ZvbnQoIkFyaWFsIiwgJ0knLCAxMikKICAgICAgICBzZWxmLnNldF90ZXh0X2NvbG9yKDEwMCwgMTAwLCAxMDApCiAgICAgICAgc2VsZi5tdWx0aV9jZWxsKDAsIDEwLCAi4pyN77iPIFByYWN0aWNhIGVzY3JpYmllbmRvIGxhcyBzw61sYWJhcyB5IGx1ZWdvIGzDqWVsYXMgZW4gdm96IGFsdGEuIFB1ZWRlcyBkaWJ1amFyIGp1bnRvIGEgY2FkYSBwYWxhYnJhLiIpCgpkYXRvcyA9IHsKICAgICdQJzogewogICAgICAgICdzaWxhYmFzJzogWydwYScsICdwZScsICdwaScsICdwbycsICdwdSddLAogICAgICAgICdwYWxhYnJhcyc6IFsncGFww6EnLCAncGVyYScsICdwaWNvJywgJ3BvbGxvJywgJ3B1bHBvJ10KICAgIH0sCiAgICAnTSc6IHsKICAgICAgICAnc2lsYWJhcyc6IFsnbWEnLCAnbWUnLCAnbWknLCAnbW8nLCAnbXUnXSwKICAgICAgICAncGFsYWJyYXMnOiBbJ21hbcOhJywgJ21lc2EnLCAnbWltbycsICdtb3RvJywgJ211cm8nXQogICAgfSwKICAgICdTJzogewogICAgICAgICdzaWxhYmFzJzogWydzYScsICdzZScsICdzaScsICdzbycsICdzdSddLAogICAgICAgICdwYWxhYnJhcyc6IFsnc29sJywgJ3NpbGxhJywgJ3NvcGEnLCAnc2VsbG8nLCAnc3VtYSddCiAgICB9Cn0KCnBkZiA9IERpZGFjdGljUERGKCkKcGRmLnNldF9hdXRvX3BhZ2VfYnJlYWsoYXV0bz1UcnVlLCBtYXJnaW49MTUpCgpmb3IgbGV0cmEsIGNvbnRlbmlkbyBpbiBkYXRvcy5pdGVtcygpOgogICAgcGRmLmFkZF9zeWxsYWJsZV9zZWN0aW9uKGxldHJhLCBjb250ZW5pZG9bJ3NpbGFiYXMnXSwgY29udGVuaWRvWydwYWxhYnJhcyddKQoKcGRmLm91dHB1dCgiL21udC9kYXRhL2d1aWFfZGlkYWN0aWNhX3NpbGFiYXNfbmluYS5wZGYiKQo=
from fpdf import FPDF
class DidacticPDF(FPDF):
def header(self):
self.set_font("Arial", 'B', 16)
self.set_text_color(100, 100, 255)
self.cell(0, 10, 'Aprendo las sílabas con P, M y S', ln=True, align='C')
self.ln(5)
def footer(self):
self.set_y(-15)
self.set_font("Arial", 'I', 8)
self.set_text_color(150)
self.cell(0, 10, f'Página {self.page_no()}', align='C')
def add_syllable_section(self, letra, silabas, palabras):
self.add_page()
self.set_font("Arial", 'B', 14)
self.set_text_color(0)
self.cell(0, 10, f'Letra: {letra}', ln=True)
self.set_font("Arial", '', 12)
self.cell(0, 10, 'Sílabas para practicar:', ln=True)
self.ln(5)
self.set_font("Arial", '', 36)
for s in silabas:
self.cell(38, 20, s, border=1, align='C')
self.ln(30)
self.set_font("Arial", '', 12)
self.cell(0, 10, f'Palabras con la letra {letra}:', ln=True)
self.set_font("Arial", '', 24)
for palabra in palabras:
self.cell(0, 12, f'- {palabra}', ln=True)
self.ln(10)
self.set_font("Arial", 'I', 12)
self.set_text_color(100, 100, 100)
self.multi_cell(0, 10, "✍️ Practica escribiendo las sílabas y luego léelas en voz alta. Puedes dibujar junto a cada palabra.")
datos = {
'P': {
'silabas': ['pa', 'pe', 'pi', 'po', 'pu'],
'palabras': ['papá', 'pera', 'pico', 'pollo', 'pulpo']
},
'M': {
'silabas': ['ma', 'me', 'mi', 'mo', 'mu'],
'palabras': ['mamá', 'mesa', 'mimo', 'moto', 'muro']
},
'S': {
'silabas': ['sa', 'se', 'si', 'so', 'su'],
'palabras': ['sol', 'silla', 'sopa', 'sello', 'suma']
}
}
pdf = DidacticPDF()
pdf.set_auto_page_break(auto=True, margin=15)
for letra, contenido in datos.items():
pdf.add_syllable_section(letra, contenido['silabas'], contenido['palabras'])
pdf.output("/mnt/data/guia_didactica_silabas_nina.pdf")