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

自定义FPDF子类生成PDF时页数不符合预期的问题

问题:自定义fpdf2类生成PDF页数不符合预期

我尝试用Python的fpdf2库自定义类来生成PDF,代码如下:

from fpdf import FPDF   

class MyPdf(FPDF):
    def __init__(self, *args, **kwargs):
            super().__init__()
            self.pdf = FPDF()
            self.pdf.add_page()
            # customize pdf
    def OtherCustomization(self):
            self.pdf.add_page()
            # other customization pdf


pdf1 = FPDF()
pdf1.add_page()

pdf2 = MyPdf()
pdf2.add_page()
pdf2.OtherCustomization()

pdf1.output("1.pdf")
pdf2.output("2.pdf")

预期1.pdf有1页,2.pdf有2页,但实际结果不符:

# pdfinfo 1.pdf | grep Pages
Pages:           1
# pdfinfo 2.pdf | grep Pages
Pages:           1

问题原因

你误用了继承机制:

  • MyPdf已经继承了FPDF,本身就是一个完整的PDF实例,没必要在__init__里额外创建self.pdf = FPDF()对象。
  • 你在__init__和OtherCustomization里都是给内部的self.pdf添加页面,但调用pdf2.output()时,实际输出的是MyPdf自身继承的FPDF实例(这个实例只在pdf2.add_page()时添加了1页),内部的self.pdf完全没被用到,所以最终生成的PDF只有1页。

修正后的代码

直接操作MyPdf自身实例即可,无需额外创建内部PDF对象:

from fpdf import FPDF   

class MyPdf(FPDF):
    def __init__(self, *args, **kwargs):
            # 传递所有参数给父类构造函数
            super().__init__(*args, **kwargs)
            self.add_page()  # 直接给当前实例添加页面
            # customize pdf
    def OtherCustomization(self):
            self.add_page()  # 直接给当前实例添加页面
            # other customization pdf


pdf1 = FPDF()
pdf1.add_page()

pdf2 = MyPdf()
pdf2.OtherCustomization()  # __init__已添加1页,这里再添加1页,总共2页

pdf1.output("1.pdf")
pdf2.output("2.pdf")

验证结果

修正后执行pdfinfo检查:

# pdfinfo 2.pdf | grep Pages
Pages:           2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:06:52