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

PyPDF2的PDFMerger写入速度过慢,求优化方案

如何加速大量小PDF文件的合并写入速度

问题背景

你使用PyPDF2 2.11.2的PdfMerger合并1000个99KB的单页PDF时,读取和追加仅用3秒,但写入耗时长达67秒,分两批合并再整合的方式也没改善。这是因为PyPDF2在处理大量文件时,对重复资源(比如字体、页面元数据)的复用优化不足,写入阶段需要处理大量冗余数据,导致速度瓶颈。

可行的提速方案

  • 换用PyMuPDF(fitz)库
    这是最有效的解决办法,PyMuPDF在批量PDF合并场景下的性能远优于PyPDF2,它会自动检测并合并重复的页面资源,不仅写入速度快,生成的文件体积也更小。

    示例代码:

    import fitz
    
    # 初始化输出PDF文档
    output_doc = fitz.open()
    # 遍历目标文件夹内的PDF文件
    for pdf_path in dirs:
        if pdf_path.lower().endswith('.pdf'):  # 兼容大小写后缀
            with fitz.open(pdf_path) as src_doc:
                # 将源PDF的所有页面插入到输出文档
                output_doc.insert_pdf(src_doc)
    # 保存合并后的PDF并关闭文档
    output_doc.save(filename)
    output_doc.close()
    
  • 优化单个PDF的冗余资源(可选)
    如果每个小PDF都包含重复的字体或冗余资源,先对单个PDF做优化再合并,也能减少写入阶段的处理压力。比如用Ghostscript命令行工具压缩优化:

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -sOutputFile=optimized.pdf input.pdf
    
  • PyPDF2底层资源复用(不推荐)
    若坚持使用PyPDF2,可尝试手动复用页面资源,但需要深入操作PyPDF2的底层API,实现复杂且性能提升有限,不如直接换库高效。

效果参考

用PyMuPDF合并1000个相同的99KB单页PDF,写入时间通常能控制在5秒内,输出文件体积也会从20MB左右大幅降低(比如到5MB以内)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:40:42