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

如何通过For循环结合FPDF自动批量填充PDF中的PNG图片?

问题描述

我跟着一份Python教程生成了类似下图的PDF报告(布局为每页2列3行,共6张图片):
PDF报告布局示例

手动指定每张图片路径可以实现这个布局,代码如下:

pdf.add_page()
pdf.image("/Users/Foo/Graph1.png", 5, 20, WIDTH/2-10)
pdf.image("/Users/Foo/Graph2.png", WIDTH/2, 20, WIDTH/2-10)
pdf.image("/Users/Foo/Graph3.png", 5, 110, WIDTH/2-10)
pdf.image("/Users/Foo/Graph4.png", WIDTH/2, 110, WIDTH/2-10)
pdf.image("/Users/Foo/Graph5.png", 5, 200, WIDTH/2-10)
pdf.image("/Users/Foo/Graph6.png", WIDTH/2, 200, WIDTH/2-10)

但当文件夹中PNG文件数量不固定时,这段代码就不适用了。我写了一个函数框架,需要完善逻辑:

def addtopage(function):
   for f in os.listdir('path'):
      if f.endswith('png') in f:
         #add it to the next position in the pdf

我的问题是:如何编写循环,自动遍历文件夹获取所有PNG文件,并按上述布局依次放置到PDF页面对应位置?


解决方案

要实现自动按2列3行的布局批量插入图片,可按以下思路完善代码:

1. 核心逻辑梳理

  • 先筛选出文件夹内所有PNG文件(兼容大小写)
  • 按每页6张的批次处理,自动新增页面
  • 复用你手动设定的坐标规则,按顺序给图片分配位置

2. 完整代码实现

import os
# 定义PDF页面宽度(以A4纸为例,宽度为210mm)
WIDTH = 210

def add_images_to_pdf(pdf, image_dir):
    # 获取所有PNG文件,按文件名排序保证顺序稳定
    png_files = sorted([f for f in os.listdir(image_dir) if f.lower().endswith('.png')])
    # 预定义每页6个图片的坐标位置,按顺序对应第1-6张图
    page_positions = [
        (5, 20), (WIDTH/2, 20),
        (5, 110), (WIDTH/2, 110),
        (5, 200), (WIDTH/2, 200)
    ]
    
    # 每6张图片为一组,生成一页PDF
    for start_idx in range(0, len(png_files), 6):
        pdf.add_page()
        # 取出当前页要放置的图片(最多6张)
        current_page_images = png_files[start_idx:start_idx+6]
        # 遍历当前页图片,按位置插入
        for img_idx, img_name in enumerate(current_page_images):
            img_path = os.path.join(image_dir, img_name)
            x, y = page_positions[img_idx]
            pdf.image(img_path, x, y, WIDTH/2 - 10)

3. 使用示例

以fpdf2库为例,初始化PDF后调用函数即可:

from fpdf import FPDF
# 初始化PDF对象
pdf = FPDF()
# 调用函数,传入PDF对象和图片文件夹路径
add_images_to_pdf(pdf, "/Users/Foo/")
# 保存生成的PDF
pdf.output("auto_report.pdf")

内容的提问来源于stack exchange,提问作者Derek Fisher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:20:22