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

如何用Python脚本在PDF指定页码、位置插入指定尺寸的图片?

Python 向PDF指定位置插入图片(支持JPG/PNG)

下面提供两种实用方案,满足指定页码、坐标、宽高插入JPG/PNG图片的需求:

方案一:使用PyMuPDF(fitz)

PyMuPDF是处理PDF的高效库,插入图片的操作灵活且易上手。

安装依赖

pip install pymupdf

代码示例

import fitz  # 导入PyMuPDF

def insert_image_to_pdf(input_pdf, output_pdf, image_path, page_num, x, y, width, height):
    # 打开PDF文件
    doc = fitz.open(input_pdf)
    # 获取目标页面(注意:PyMuPDF页码从0开始,若要插第3页,page_num传2)
    page = doc[page_num]
    # 插入图片:参数依次为图片路径、左下角坐标(x,y)、宽高
    page.insert_image(fitz.Rect(x, y, x + width, y + height), filename=image_path)
    # 保存修改后的PDF
    doc.save(output_pdf)
    doc.close()

# 调用示例
if __name__ == "__main__":
    insert_image_to_pdf(
        input_pdf="原文件.pdf",
        output_pdf="插入图片后的文件.pdf",
        image_path="test.png",  # 支持jpg/png
        page_num=0,  # 插入第1页
        x=100,  # 左下角x坐标(单位:点,1点=1/72英寸)
        y=200,  # 左下角y坐标
        width=150,  # 图片宽度
        height=100  # 图片高度
    )

关键说明

  • 坐标系统:PDF默认以页面左下角为原点,x轴向右,y轴向上,单位为点(1点≈0.35mm)
  • 透明PNG:PyMuPDF会保留图片的透明通道,无需额外处理
  • 页码转换:若你习惯从1开始计数,调用时可以把page_num传参改为目标页码-1

方案二:使用fpdf2

fpdf2是轻量的PDF生成/修改库,适合简单场景下的图片插入。

安装依赖

pip install fpdf2

代码示例

from fpdf import FPDF
from PyPDF2 import PdfReader, PdfWriter

def insert_image_with_fpdf(input_pdf, output_pdf, image_path, page_num, x, y, width, height):
    # 读取原PDF内容
    reader = PdfReader(input_pdf)
    writer = PdfWriter()

    # 遍历每一页,复制到新PDF
    for idx, page in enumerate(reader.pages):
        writer.add_page(page)
        # 当遍历到目标页码时插入图片(页码从0开始)
        if idx == page_num:
            # 创建临时PDF用于生成图片层
            temp_pdf = FPDF(unit="pt")
            temp_pdf.add_page()
            temp_pdf.image(image_path, x=x, y=y, w=width, h=height)
            # 保存临时PDF到内存
            from io import BytesIO
            temp_buffer = BytesIO()
            temp_pdf.output(temp_buffer)
            temp_buffer.seek(0)
            # 合并图片层到目标页面
            temp_reader = PdfReader(temp_buffer)
            writer.pages[idx].merge_page(temp_reader.pages[0])

    # 保存最终PDF
    with open(output_pdf, "wb") as out_file:
        writer.write(out_file)

# 调用示例
if __name__ == "__main__":
    insert_image_with_fpdf(
        input_pdf="原文件.pdf",
        output_pdf="插入图片后的文件.pdf",
        image_path="test.jpg",
        page_num=1,  # 插入第2页
        x=150,
        y=250,
        width=200,
        height=150
    )

关键说明

  • 单位设置:示例中用unit="pt"(点)和PyMuPDF保持一致,方便坐标统一
  • 图片格式:支持JPG/PNG,透明PNG同样兼容
  • 合并逻辑:通过临时PDF生成图片层,再合并到原页面,确保图片不会覆盖原有内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:30