自定义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
相关产品推荐
相关产品推荐

