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

如何使用PyMuPDF(fitz)实现两个PDF文件逐页叠加?

使用PyMuPDF(fitz)实现PDF逐页叠加的解决方案

可以使用PyMuPDF实现该需求,相比PyPDF2处理速度提升非常明显,稳定性也更强。
你之前使用的insertPDF方法作用是将第二个PDF的所有页面追加到第一个PDF末尾,属于页面拼接,和叠加需求不匹配。叠加需要逐页将上层PDF的内容绘制到背景PDF的对应页面上,核心调用show_pdf_page方法实现。

完整实现代码

import fitz

def overlay_pdfs(background_path, foreground_path, output_path):
    # 打开背景PDF和上层内容PDF
    doc_bg = fitz.open(background_path)
    doc_fg = fitz.open(foreground_path)
    
    # 校验两个PDF页数一致,也可根据需求修改为取最小页数处理
    if len(doc_bg) != len(doc_fg):
        raise ValueError("两个PDF的页数必须一致")
    
    # 逐页叠加
    for page_num in range(len(doc_bg)):
        page_bg = doc_bg[page_num]
        # 将上层PDF的对应页绘制到背景页上
        page_bg.show_pdf_page(
            rect=page_bg.rect,  # 上层内容填充整个背景页
            src=doc_fg,
            pno=page_num,  # 指定上层PDF的对应页码
            keep_proportion=True  # 保持上层页面比例,可根据需求调整
        )
    
    # 保存合并结果
    doc_bg.save(output_path)
    # 释放文件资源
    doc_bg.close()
    doc_fg.close()

# 调用示例
overlay_pdfs(
    background_path="替换为你的背景PDF路径.pdf",
    foreground_path="替换为要叠加的上层PDF路径.pdf",
    output_path="替换为输出文件路径.pdf"
)

常用参数调整说明

  • 如需设置上层内容透明度,可添加opacity参数,例如opacity=0.8表示上层内容半透明
  • 如需调整上层内容的放置位置、大小,可修改rect参数的值,自定义坐标和尺寸
  • 如需旋转上层内容,可添加rotate参数,传入旋转角度数值即可

方案优势

  • 处理速度远快于PyPDF2,百页级PDF处理通常几秒内即可完成
  • 兼容性更强,支持绝大多数加密、带特殊字体的PDF文件,不会出现PyPDF2常见的合并后字体丢失、内容错位问题
  • 可定制性更高,支持调整叠加位置、缩放比例、透明度、旋转角度等多种参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:09:04