Python中使用FPDF调整PDF图片间距及固定行列排版自动分页问题咨询
实现方案
边距计算规则
你使用的是A4横向规格PDF,单位为mm时,页面总宽297mm、总高210mm,边距可按以下逻辑设定:
- 水平方向总占用 = 左右侧边距 + 4张图片宽度 + 3个列间距 = 297mm
- 垂直方向总占用 = 上下侧边距 + 4张图片高度 + 3个行间距 = 210mm
你可以根据自身需求调整参数,只要符合上述公式即可保证内容不超出页面。
修改后代码
from fpdf import FPDF import glob # 请提前定义filePath1为你的图片目录路径 class MyFPDF(FPDF): pass def photos_pdf(): # 可自定义参数 margin = 5 # 页面四周统一边距,单位mm img_w = 63 # 单张图片宽度 img_h = 44 # 单张图片高度 col_gap = 8 # 列与列之间的间距 row_gap = 8 # 行与行之间的间距 per_line = 4 # 每行图片数 per_col = 4 # 每列图片数 per_page = per_line * per_col # 单页总图片数 pdf = MyFPDF("L", format='A4', unit='mm') photos = glob.glob(filePath1 + "/*.img") # 仅匹配img格式文件,避免把生成的PDF也读入 x = margin y = margin line_counter = 0 # 当前行已放图片数 page_counter = 0 # 当前页已放图片数 pdf.add_page() for photo in photos: pdf.image(photo, x=x, y=y, w=img_w, h=img_h) page_counter += 1 line_counter +=1 # 判断是否要换行 if line_counter == per_line: line_counter = 0 x = margin y += img_h + row_gap else: x += img_w + col_gap # 判断是否要换页 if page_counter == per_page: pdf.add_page() page_counter = 0 line_counter = 0 x = margin y = margin pdf.output(filePath1 + "/A4_cards.pdf", 'F') photos_pdf()
核心调整说明
- 修复了原代码换页前后边距不一致的问题,所有页面边距统一
- 实现了每行4张、每列4张的排版要求,满16张自动新建页面
- 所有排版参数均提取为可配置变量,你可以根据实际需求调整图片大小、边距、间距
内容的提问来源于stack exchange,提问作者user17169191
相关产品推荐
相关产品推荐

