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

如何使用Python的Pymupdf模块为PDF添加背景图并移除中间层

PyMuPDF添加PDF背景图中间层问题解决方案

问题原因

你看到的中间层是原PDF页面自带的白色背景填充对象:使用overlay=False参数把背景图插到内容最底层时,原PDF自带的白色填充层刚好在背景图和文字/矢量内容之间,挡住背景图就形成了所谓的中间层。
另外你现有代码存在冗余逻辑:连续两次调用fitz.open()赋值给doc变量,第一次打开的文件会被直接覆盖,属于无效代码。

修复后代码

import fitz

input_file = "3_giberish template.pdf"
output_file_path = "带背景输出.pdf"
background_img_filename = "background.png"

doc = fitz.open(input_file)
page = doc.load_page(0) # 低版本PyMuPDF可替换为page.loadPage(0)

# 先清理页面原有内容的冗余指令,删除自带背景填充/旧背景图
page.clean_contents()
# 可选:如果原PDF背景是嵌入图片,可执行这段删除原有背景图
# for img in page.get_images(full=True):
#     xref = img[0]
#     doc._deleteObject(xref)

# 获取页面实际尺寸作为背景图坐标,避免硬编码导致拉伸
full_img_rect = page.rect
# 插入背景图到最底层
page.insert_image(full_img_rect, filename=background_img_filename, overlay=False)
# 将原页面内容回写到最上层,自动保留透明背景
page.show_pdf_page(page.rect, doc, 0, overlay=True)

# 保存文件
doc.save(output_file_path, garbage=4, deflate=True, clean=True)
doc.close()
print("completed")

注意事项

  • 需保证PyMuPDF版本 >= 1.19.0,旧版本部分API存在兼容性差异
  • 如需处理多页PDF,循环遍历所有页面执行上述操作即可
  • 如果插入背景后存在色差,可检查背景图的色彩模式是否为RGB,CMYK模式图片插入PDF可能出现色差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:24:06