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

如何使用Python向PDF文档的指定字段中添加签名

Python向PDF指定位置插入图片的实现方案

你当前出现整张图片覆盖PDF的问题,本质是没有限定图片的插入区域和坐标,以下是两种可直接落地的实现方案:

方案1:PyMuPDF(fitz)库实现(推荐,定位精度高、兼容性好)

  • 安装依赖:pip install pymupdf
  • 核心逻辑:直接操作PDF页面对象,通过矩形坐标限定图片的插入位置和尺寸,支持直接读取表单字段的坐标自动匹配插入位置。
    示例代码:
import fitz

# 加载原PDF文件
pdf_doc = fitz.open("原始文件.pdf")
# 定位到要插入图片的目标页,页码从0开始计数
target_page = pdf_doc[0]

# 方法1:手动指定插入位置,坐标格式为(左下角x, 左下角y, 右上角x, 右上角y),单位为磅
# insert_rect = fitz.Rect(120, 350, 280, 470)

# 方法2:匹配指定表单字段的位置插入,无需手动计算坐标
insert_rect = None
for field in pdf_doc.acro_form().fields.values():
    if field.field_name == "你要插入的目标字段名":
        insert_rect = field.rect
        break

if insert_rect:
    # 插入图片,支持传入本地路径或二进制图片流
    target_page.insert_image(insert_rect, filename="待插入的图片.png")

# 保存修改后的文件
pdf_doc.save("插入图片后的文件.pdf")
pdf_doc.close()

方案2:PyPDF2 + ReportLab 组合实现

  • 安装依赖:pip install pypdf2 reportlab
  • 核心逻辑:先生成一个仅包含目标尺寸图片的透明PDF单页,再将该单页作为图层合并到原PDF的指定位置,不会覆盖页面其他内容。
    示例代码:
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from io import BytesIO

# 生成带指定位置图片的临时PDF层
temp_buffer = BytesIO()
# 可根据原PDF页面尺寸调整pagesize参数
can = canvas.Canvas(temp_buffer, pagesize=(595, 842)) # A4纸尺寸,单位磅
# 指定图片插入的左下角坐标、宽度、高度
can.drawImage("待插入的图片.png", x=120, y=350, width=160, height=120)
can.save()
temp_buffer.seek(0)
img_layer = PdfReader(temp_buffer)

# 合并图层到原PDF
reader = PdfReader("原始文件.pdf")
writer = PdfWriter()
target_page = reader.pages[0]
target_page.merge_page(img_layer.pages[0])
writer.add_page(target_page)

# 输出结果文件
with open("插入图片后的文件.pdf", "wb") as f:
    writer.write(f)
  • 注意:PDF的坐标原点默认在页面左下角,和日常使用的屏幕坐标(原点在左上角)规则不同,手动计算坐标时要注意换算。如果插入的图片带透明背景,优先选择PyMuPDF方案,对透明通道的支持更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 21:06:04