使用二进制读写操作在Python中合并两个PDF未得到预期结果怎么办
问题排查与解决方案
核心问题原因
你当前的实现逻辑本质是直接拼接两个PDF的二进制内容,这不符合PDF文件的格式规范,是无法生成合法可用的PDF文件的:
- PDF是结构化的二进制文件,每个独立PDF都包含固定的文件头、页面对象、交叉引用表、文件尾元数据结构
- 直接拼接两份PDF二进制内容后,新文件会存在两套互不兼容的元数据,PDF阅读器无法识别这种非法结构,自然无法正常打开、显示合并后的内容
现有代码的其他小问题
- 打开
new.pdf时使用了ab追加模式,如果之前已经存在同名的new.pdf文件,会在原有内容后追加新内容,大概率会生成更混乱的文件,应该改成wb覆盖写入模式 - 没有做文件异常处理,如果读取文件过程中报错,会出现文件句柄没有正常关闭的问题,推荐使用
with上下文管理器自动管理文件开关
正确实现方案
推荐使用第三方PDF处理库PyPDF2完成合并,首先先安装依赖:pip install pypdf2
合并代码示例:
from PyPDF2 import PdfMerger # 初始化合并器 merger = PdfMerger() # 依次添加要合并的PDF文件 merger.append("1.pdf") merger.append("2.pdf") # 导出合并后的文件 merger.write("new.pdf") # 关闭合并器释放资源 merger.close()
更安全的上下文管理器写法:
from PyPDF2 import PdfMerger with PdfMerger() as merger: for pdf_path in ["1.pdf", "2.pdf"]: merger.append(pdf_path) merger.write("new.pdf")
内容的提问来源于stack exchange,提问作者Haldhar Dwivedi
相关产品推荐
相关产品推荐

