La clase FPDF heredada (en python) solo obtiene la primera página de dos correctamente, la segunda queda completamente en blanco.
Estoy construyendo una clase para producir informes automáticos en PDF. (Usando FPDF) En mi clase he definido hasta ahora dos funciones. Una que renderiza la primera página (front) y otra que renderiza una segunda página (page_two). Estas dos funciones producen cada una lo que quiero. Pero cuando intento combinarlas en la función join la segunda página se vuelve completamente blanca.
No entiendo por qué. Cualquier ayuda sería muy apreciada.
“` from fpdf import FPDF
class MY_PDF(FPDF):
def <strong>init</strong>(self, <strong>kwargs):
super(MY_PDF, self).<strong>init</strong>(</strong>kwargs)
<pre><code> pdf.add_font('Arial', '', r"c:\WINDOWS\Fonts\ARIAL.ttf", uni=True)
pdf.add_font('Arial_Bold', '', r"c:\WINDOWS\Fonts\ARIALBD.ttf", uni=True)
pdf.add_font('Georgia', '', r"c:\WINDOWS\Fonts\GEORGIA.ttf", uni=True)
pdf.add_font('Calibri', '', r"c:\WINDOWS\Fonts\CALIBRI.ttf", uni=True)
WIDTH = 210
HEIGHT = 297
def front(self, title, second_title):
self.set_fill_color(0, 0, 90)
self.rect(0.5, 50, WIDTH-1, 75, 'F')
self.set_fill_color(149, 194, 61)
pdf.rect(14, 12, 5, 280, 'F')
self.set_font('Arial', 'B', 38)
self.set_text_color(255, 255, 255)
self.cell(15)
self.cell(150, 135, txt=f'{title}')
self.ln(10)
self.set_font('Arial', '', 28)
self.set_text_color(255, 255, 255)
self.cell(15)
self.cell(150, 150, txt=f'{second_title}')
#self.image('logga.png', 25, 12, 50)
self.ln()
def page_two(self, name, date, nr):
self.set_font('Arial', '', 9)
self.ln(250)
self.cell(20)
self.cell(0, 0, txt='©', align='L', ln=0)
self.cell(-160)
self.cell(0, 0, txt='Nombre de la compañía', align='L', ln=2)
self.ln(4)
self.cell(30)
self.cell(0, 0, txt=f'Autor: {name}', align='L', ln=2)
self.ln(4)
self.cell(30)
self.cell(0, 0, txt=f'Fecha: {date}', align='L', ln=2)
self.ln(4)
self.cell(30)
self.cell(0, 0, txt=f'Número: {nr}', align='L', ln=2)
self.ln()
def join(self, title, second_title, name, date, nr):
self.add_page()
self.front(title, second_title)
self.add_page()
self.page_two(name, date, nr)
</code></pre>
pdf = MY_PDF()
pdf.join('¡TÍTULO!', 'algún otro título', 'Nombre Nombre', '2021-11-30', '21262') pdf.output('output.pdf')
“`
davy.ai
Parece que hay un error tipográfico en el constructor de la clase MY_PDF. Los dos guiones bajos antes y después de la palabra “init” en la línea
super(MY_PDF, self)-__init__(**kwargs)
deberían ser reemplazados por un solo guión bajo antes y después de la palabra “init”, como esto:super(MY_PDF, self).__init__(**kwargs)
.En cuanto al problema con la segunda página que está toda en blanco, podría deberse al hecho de que el origen del sistema de coordenadas en FPDF se encuentra en la esquina inferior izquierda de la página, por lo que cuando se agrega la segunda página con
self.add_page()
, se agrega justo encima de la primera página, cubriéndola efectivamente. Para solucionar esto, debe mover el contenido de la segunda página hacia abajo aumentando el coordenada y del punto de inicio para dibujarlo. Por ejemplo, podría cambiar la líneaself.ln(250)
en la función page_two aself.ln(200)
para mover el contenido hacia abajo en 50 unidades.Además, debes usar el atributo inicializado
self.WIDTH
en la función front en lugar de la variable no definidaWIDTH
.Aquí está el código corregido:
¡Espero que esto ayude!