如何使用FPDF插入PDF文件?替代图片插入的技术问询
在FPDF中插入外部PDF的两种实现方案
1. 将PDF页面作为图片式元素插入(类似image()方法的效果)
FPDF本身不支持直接把PDF当图片插入,但可以先把目标PDF的页面转成图片格式,再用image()方法插入。这种方式能让你把PDF内容放在当前页面的任意位置,和插入图片的逻辑完全一致。
实现步骤:
- 先安装依赖工具:
pip install pdf2image pillow fpdf2 - 代码示例:
from fpdf import FPDF from pdf2image import convert_from_path # 初始化主文档 main_pdf = FPDF() main_pdf.add_page() # 把目标PDF的第1页转成PNG图片(可指定页码范围) chart_pdf_pages = convert_from_path("chart.pdf", first_page=1, last_page=1) temp_img = "chart_temp.png" chart_pdf_pages[0].save(temp_img) # 像插入普通图片一样插入转换后的PDF页面 main_pdf.image(temp_img, x=15, y=20, w=170) # 自定义位置和宽度 # 保存合并后的文档 main_pdf.output("merged_with_pdf_as_image.pdf")
2. 将PDF作为新页面插入
如果不需要把PDF内容嵌入现有页面,直接添加为新页面的话,用fpdf2(FPDF的活跃维护分支)可以直接实现,无需转格式,还能保留PDF的矢量清晰度。
代码示例:
from fpdf import FPDF main_pdf = FPDF() # 先添加原文档的内容页面 main_pdf.add_page() main_pdf.set_font("Arial", size=14) main_pdf.cell(200, 10, txt="这是原文档的内容页", ln=True, align="C") # 插入外部PDF的所有页面作为新页面 main_pdf.add_page_from_pdf("chart.pdf") # 也可以指定插入特定页码,比如只插第2、3页: # main_pdf.add_page_from_pdf("chart.pdf", pages=(2, 3)) main_pdf.output("merged_with_new_pages.pdf")
注意事项:
- 转图片的方式会损失矢量清晰度,适合对精度要求不高的场景;
- 直接插入PDF页面的方式保留原文件的矢量属性,清晰度更高,是优先推荐的方案;
- 旧版原生FPDF没有直接插入PDF的API,建议升级到
fpdf2以获得更好的支持。
内容的提问来源于stack exchange,提问作者WinterGrim
相关产品推荐
相关产品推荐

