Python使用FPDF库设置页面边距不生效问题求助
问题排查与修改方案
核心错误点
- 边距调用对象错误:你使用类
MyFPDF调用边距设置方法,没有作用到你实际实例化的pdf对象上,且设置的32mm边距和你需求的5mm不符 - 边距设置时机错误:FPDF要求边距设置必须在
add_page()之前执行,才会对新添加的页面生效,你先调用add_page()再设置边距,第一页不会应用配置 - 图片坐标未考虑边距:你硬编码图片起始坐标为
x=0、y=0,即使边距设置正确,手动指定坐标的image()方法也会强制从页面左上角放置内容,直接忽略边距
修改后代码
from fpdf import FPDF import glob import os class MyFPDF(FPDF): pass def photos_pdf(): # 实例化PDF对象,单位统一为mm,你当前用的是A3格式,如果需要A4可修改format参数为'A4' pdf = MyFPDF("P", format='A3', unit='mm') # 提前设置四边边距为5mm,注意用实例pdf调用方法,不是类MyFPDF MARGIN = 5 pdf.set_left_margin(MARGIN) pdf.set_right_margin(MARGIN) pdf.set_top_margin(MARGIN) pdf.set_auto_page_break(auto=True, margin=MARGIN) # 自动分页的底部边距也设为5mm photos = glob.glob(filePath1 + "/*.png") # 初始坐标从边距开始,不要从0开始 x = MARGIN y = MARGIN counter = 0 nbre = 5 # 每行放5张图 nbre_par_page = 15 # 每页放15张图 counter2 = 0 # 边距设置完成后再加页 pdf.add_page() for photo in photos: if counter2 != nbre_par_page: if counter != (nbre): pdf.image(photo, x=x, y=y, w=63, h=88) x += 63 counter += 1 counter2 += 1 else: pdf.image(photo, x=x, y=y, w=63, h=88) y += 88 x = MARGIN # 换行后x重置为边距值,不是0 counter = 0 else: pdf.image(photo, x=x, y=y, w=63, h=88) pdf.add_page() counter = 0 counter2 = 0 # 新页面坐标重置为边距值,不是0 x = MARGIN y = MARGIN pdf.output(path2 + "/A4_cards.pdf", 'F') os.chmod(path2 + "/A4_cards.pdf", 0o777) photos_pdf()
额外说明
如果你的实际需求是生成A4尺寸的PDF,记得将实例化时的format='A3'改为format='A4',避免尺寸不匹配导致打印裁切。
内容的提问来源于stack exchange,提问作者bibiyanki3
相关产品推荐
相关产品推荐

