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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:06:08