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

如何使用Python实现多个PDF文件的无压缩合并?

无压缩合并PDF的Python解决方案

问题原因

你当前使用的PyPDF2库默认开启了内容流压缩优化,合并输出时会自动压缩PDF内容,导致输出文件质量下降。

方案1:调整现有PyPDF2代码关闭压缩

直接修改PyPDF2的压缩参数即可实现无压缩合并,修改后代码如下:

from pathlib import Path
import PyPDF2

merged_object = PyPDF2.PdfFileMerger()
# 关闭全局压缩
merged_object.compress_content_streams = False

for file_item in list_of_pdfs:
    file_path = Path(file_item)
    if file_path.suffix.lower() != '.pdf':
        file_path = file_path.with_suffix('.pdf')
    merged_object.append(PyPDF2.PdfFileReader(str(file_path.resolve()), strict=False))

# 输出路径需要指定完整的PDF文件名,不要仅传入目录
merged_object.write("merged_output.pdf")
merged_object.close()

注意:如果使用的是2023年后发布的新版PyPDF2,库内类名已调整为小写格式,将PdfFileMerger替换为PdfMerger、PdfFileReader替换为PdfReader即可。

方案2:使用PyMuPDF(fitz)库实现更高保真的合并

如果PyPDF2调整参数后仍存在压缩问题,可以换用PDF处理精度更高的PyMuPDF库,该库默认不会对源PDF内容做额外压缩,合并后文件和原文件质量完全一致。
首先安装依赖:
pip install pymupdf
合并代码如下:

from pathlib import Path
import fitz

list_of_pdfs = ["file1", "file2.pdf", "file3"] # 替换为你的文件列表
output_path = "merged_output.pdf"

# 初始化空白PDF
merged_pdf = fitz.open()

for file_item in list_of_pdfs:
    file_path = Path(file_item)
    if file_path.suffix.lower() != '.pdf':
        file_path = file_path.with_suffix('.pdf')
    # 打开单份源PDF
    with fitz.open(str(file_path.resolve())) as src_pdf:
        # 全量插入源PDF内容,无压缩
        merged_pdf.insert_pdf(src_pdf)

# 保存合并结果,关闭压缩开关
merged_pdf.save(output_path, deflate=False)
merged_pdf.close()

注意事项

  • 输出路径需指定完整的PDF文件名,不要仅传入目录路径,避免写入失败
  • 合并前可先校验源PDF可正常打开,避免源文件损坏导致合并异常
  • PyMuPDF对加密PDF的兼容性优于PyPDF2,若源文件存在加密情况优先选择方案2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:39:05