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

Python中图片下方添加标注文本并批量导出PDF的最优方案咨询

实现方案与推荐依赖库

核心思路

你需要的是不修改原图、仅在PDF排版环节给每张图片追加下方文本标注的方案,全程不需要接触图片内部像素,也不需要用Matplotlib这类绘图库的坐标轴、图例组件,直接通过PDF排版工具完成「图片插入+下方文本拼接」即可,Python生态是实现这个需求的最优选择。

推荐方案(按优先级排序)

方案1:轻量原生PDF生成(无中间文件)

依赖库

  • Pillow:用于读取图片、统一计算适配PDF页面的缩放尺寸
  • ReportLab:用于直接生成PDF,支持自定义坐标插入图片、绘制文本

核心逻辑示例

from reportlab.pdfgen import canvas
from PIL import Image

# 配置A4页面参数(单位:点,1点=1/72英寸)
A4_WIDTH = 595.27
A4_HEIGHT = 841.89
LEFT_MARGIN = 50
TOP_MARGIN = 50
IMAGE_MAX_HEIGHT = 400
IMG_TO_TEXT_GAP = 20
LINE_GAP = 15

def generate_pdf(img_label_pairs: list[tuple[str, list[str]]], output_path: str):
    c = canvas.Canvas(output_path, pagesize=(A4_WIDTH, A4_HEIGHT))
    # 初始Y坐标从页面顶部往下算
    current_y = A4_HEIGHT - TOP_MARGIN

    for img_path, labels in img_label_pairs:
        # 计算图片适配页面的缩放后尺寸
        with Image.open(img_path) as img:
            w, h = img.size
            # 先按宽度适配左右边距
            scale = (A4_WIDTH - LEFT_MARGIN * 2) / w
            scaled_w, scaled_h = w * scale, h * scale
            # 超过最大高度就按高度适配
            if scaled_h > IMAGE_MAX_HEIGHT:
                scale = IMAGE_MAX_HEIGHT / h
                scaled_w, scaled_h = w * scale, h * scale
        
        # 剩余空间不够放当前图片就换页
        if current_y - scaled_h < TOP_MARGIN:
            c.showPage()
            current_y = A4_HEIGHT - TOP_MARGIN
        
        # 插入图片
        c.drawImage(
            img_path,
            x=LEFT_MARGIN,
            y=current_y - scaled_h,
            width=scaled_w,
            height=scaled_h
        )
        current_y = current_y - scaled_h - IMG_TO_TEXT_GAP

        # 逐行插入标注
        for label in labels:
            # 剩余空间不够放当前行就换页
            if current_y < TOP_MARGIN:
                c.showPage()
                current_y = A4_HEIGHT - TOP_MARGIN
            c.drawString(x=LEFT_MARGIN, y=current_y, text=f"- {label}")
            current_y -= LINE_GAP
        
        # 两张图片的内容块之间留间隔
        current_y -= 30

    c.save()

优势

  • 全程无中间文件,生成速度快
  • 支持自定义标注的字体、颜色、排版格式,文本可选可复制
  • 千张级图片处理耗时不超过1分钟

方案2:低代码排版(适合复杂格式需求)

依赖库

  • python-docx:生成Word文档,自动处理排版,不需要手动计算坐标
  • docx2pdf:直接把生成的Word转成PDF

核心逻辑

  1. 新建空白Word文档,遍历所有图片和对应标签
  2. 先插入调整好尺寸的图片,设置图片居中
  3. 图片后插入无序列表,把所有目标标签作为列表项添加
  4. 全部内容插入完成后保存Word,调用转换接口直接导出PDF

优势

  • 不需要手动计算坐标、分页逻辑,所有排版由Word自动处理
  • 支持多列展示标注、自定义段落样式,适合单张图片标注量超过半页的场景

其他语言可选方案

如果你使用Node.js技术栈,可选用pdf-lib库实现和ReportLab一致的原生PDF生成逻辑,性能和Python方案基本持平。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:57:01