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.pdfPyPDF2底层资源复用(不推荐)
若坚持使用PyPDF2,可尝试手动复用页面资源,但需要深入操作PyPDF2的底层API,实现复杂且性能提升有限,不如直接换库高效。
效果参考
用PyMuPDF合并1000个相同的99KB单页PDF,写入时间通常能控制在5秒内,输出文件体积也会从20MB左右大幅降低(比如到5MB以内)。
内容的提问来源于stack exchange,提问作者seneill
相关产品推荐
相关产品推荐

