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

如何批量自动修改PDF背景色?(PyMuPDF/ReportLab代码求助)

批量修改PDF背景色的自动化方案

方案一:纯PyMuPDF(fitz)实现(推荐)

无需额外依赖,直接用PyMuPDF给每一页添加底层背景色,逻辑简洁,适合批量处理。

完整代码:

import fitz
import os

# 配置参数
background_color = (185/255, 231/255, 186/255)  # RGB值归一化到0-1范围
input_folder = "你的PDF文件夹路径"
output_folder = "处理后输出文件夹"

# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)

# 遍历文件夹内所有PDF文件
for filename in os.listdir(input_folder):
    if filename.lower().endswith(".pdf"):
        input_path = os.path.join(input_folder, filename)
        output_path = os.path.join(output_folder, f"带背景_{filename}")
        
        # 打开输入PDF
        doc = fitz.open(input_path)
        
        # 给每一页添加背景色
        for page in doc:
            rect = page.rect  # 获取页面大小矩形
            # 绘制背景(overlay=False确保在内容底层)
            page.draw_rect(rect, color=background_color, fill=background_color, overlay=False)
        
        # 保存处理后的PDF
        doc.save(output_path)
        doc.close()
        print(f"已处理:{filename} -> {output_path}")

print("所有PDF处理完成")

关键说明:

  • overlay=False 保证背景绘制在原内容下方,不会遮挡文字或图像
  • 颜色值需转换为0-1的浮点数,直接将RGB值除以255即可
  • 批量处理逻辑通过遍历文件夹实现,可按需调整路径和命名规则

方案二:修正你的ReportLab+PyMuPDF代码

原代码错误地用ReportLab覆盖了输入PDF,正确逻辑是先生成单页背景PDF,再将原PDF的每一页与背景页合并:

import fitz
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
import os

input_pdf_path = "input_pdf_path.pdf"
output_pdf_path = "output.pdf"
background_color = (185, 231, 186)
temp_bg_pdf = "temp_background.pdf"

# 生成单页背景PDF
c = canvas.Canvas(temp_bg_pdf, pagesize=A4)
c.setFillColorRGB(*[x / 255 for x in background_color])
c.rect(0, 0, A4[0], A4[1], fill=True)
c.showPage()
c.save()

# 打开原PDF和背景PDF
input_doc = fitz.open(input_pdf_path)
bg_doc = fitz.open(temp_bg_pdf)
output_doc = fitz.open()

# 逐页合并背景与原内容
for page_num in range(input_doc.page_count):
    # 插入背景页到输出文档
    output_doc.insert_pdf(bg_doc, from_page=0, to_page=0)
    # 将原PDF页的内容叠加到背景页上
    output_page = output_doc[page_num]
    output_page.show_pdf_page(output_page.rect, input_doc, page_num)

# 保存结果并清理临时文件
output_doc.save(output_pdf_path)
output_doc.close()
input_doc.close()
bg_doc.close()
os.remove(temp_bg_pdf)

print(f"背景色修改完成,保存至:{output_pdf_path}")

批量扩展提示

若要批量处理,只需将上述合并逻辑嵌入方案一的文件夹遍历循环中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:40:35