You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python继承FPDF类生成多页PDF时调用join方法后第二页全空白

FPDF自定义类生成多页PDF第二页空白问题解决方案

问题原因梳理

  • 基础语法错误:Python类的构造方法需为双下划线包裹的__init__,原代码写为单下划线的_init_,不会被自动调用,配置的字体、页面尺寸等参数均未生效
  • 实例调用逻辑错误:多处错误使用全局实例pdf调用方法,应该用实例自身self完成调用;super父类初始化语法错误,横线误写为减号
  • 变量作用域错误:WIDTH、HEIGHT定义为构造方法局部变量,其他实例方法无法访问,需绑定到self变为实例属性
  • 颜色继承问题:front方法中将文字颜色设置为白色,第二页渲染时未重置文字颜色,白色文字和PDF白色背景重叠导致内容不可见
  • 自动分页触发:page_two方法中ln(250)的偏移量过大,部分版本FPDF会触发自动分页,导致内容输出到第三页空白处

修正后完整代码

from fpdf import FPDF

class MY_PDF(FPDF):
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        
        self.add_font('Arial', '', r"c:\WINDOWS\Fonts\ARIAL.ttf", uni=True)
        self.add_font('Arial_Bold', '', r"c:\WINDOWS\Fonts\ARIALBD.ttf", uni=True)
        self.add_font('Georgia', '', r"c:\WINDOWS\Fonts\GEORGIA.ttf", uni=True)
        self.add_font('Calibri', '', r"c:\WINDOWS\Fonts\CALIBRI.ttf", uni=True)
        
        # A4尺寸绑定为实例属性
        self.WIDTH = 210
        self.HEIGHT = 297
        # 禁用自动分页,避免内容偏移触发意外分页
        self.set_auto_page_break(False)
    
    
    def front(self, title, second_title):
        self.set_fill_color(0,0,90) 
        self.rect(0.5, 50, self.WIDTH-1, 75, 'F')
        self.set_fill_color(149,194,61) 
        self.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.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_text_color(0, 0, 0)
        self.set_font('Arial', '', 9)
        # 调整行偏移量避免超出页面
        self.ln(240)
        self.cell(20)
        self.cell(0, 0, txt="©", align='L', ln=0)
        self.cell(-160)
        self.cell(0, 0, txt='Company name', align='L', ln=2)
        self.ln(4)
        self.cell(30)
        self.cell(0, 0, txt=f'Author: {name}', align='L',  ln=2)
        self.ln(4)
        self.cell(30)
        self.cell(0, 0, txt=f'Date: {date}', align='L', ln=2)
        self.ln(4)
        self.cell(30)
        self.cell(0, 0, txt=f'Number: {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)
        
pdf= MY_PDF()
pdf.join('TITLE!', 'some other title', 'Name Name', '2021-11-30', '21262')
pdf.output('output.pdf')

内容的提问来源于stack exchange,提问作者Henri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:57:01