合并两个PDF文件得到空白PDF的问题及相关代码求助
排查合并后PDF空白的问题及解决方案
我来帮你定位这个合并后出现空白PDF的问题,结合你给出的代码,咱们从几个常见的方向排查:
1. 代码未实际执行(最容易忽略的点)
看你给出的代码片段,main()函数已经定义,但没有触发执行的逻辑!如果你的代码最后没有加上:
if __name__ == "__main__": main()
那整个合并逻辑根本没跑起来,生成的combined_example.pdf可能是一个空文件(因为代码没执行写入操作,或者只是创建了空文件)。先补上这段代码,再测试一次。
2. PyPDF2版本兼容性问题
你用的PdfFileMerger是PyPDF2旧版本的API,在2.0.0之后的版本里,官方推荐使用PdfMerger替代它,旧API在处理某些现代PDF(比如采用PDF 1.7+标准、带压缩或特殊结构的文件)时容易出现合并后空白的情况。
解决方法:
- 先升级PyPDF2到最新版:
pip install --upgrade PyPDF2 - 替换代码中的
PdfFileMerger为PdfMerger,同时加上加密PDF处理逻辑,修正后的核心代码:import PyPDF2 from io import BytesIO def PDFmerge(pdfs, output): # 使用新版本的PdfMerger pdfMerger = PyPDF2.PdfMerger() for pdf in pdfs: try: with open(pdf, 'rb') as f: pdf_reader = PyPDF2.PdfReader(f) # 处理加密PDF(无密码的加密文件可直接解密) if pdf_reader.is_encrypted: pdf_reader.decrypt("") # 将解密后的内容写入临时缓冲再合并 temp_buffer = BytesIO() pdf_writer = PyPDF2.PdfWriter() for page in pdf_reader.pages: pdf_writer.add_page(page) pdf_writer.write(temp_buffer) temp_buffer.seek(0) pdfMerger.append(temp_buffer) else: pdfMerger.append(f) except Exception as e: print(f"处理文件 {pdf} 时出错: {e}") with open(output, 'wb') as f: pdfMerger.write(f) def main(): pdfs = ['example.pdf', 'rotated_example.pdf'] output = 'combined_example.pdf' PDFmerge(pdfs, output) if __name__ == "__main__": main()
3. 源PDF文件本身的问题
如果上面的方法都没用,就要检查你的源文件:
- 确认
example.pdf和rotated_example.pdf本身不是空白文件,用PDF阅读器打开看看内容是否正常; - 检查PDF是否加密:有些加密的PDF即使能打开,PyPDF2读取时会失败,导致合并后无内容;
- 检查PDF是否是扫描件(图片型PDF):PyPDF2无法读取图片型PDF的文本,但合并后应该会保留页面(只是还是图片),如果连页面都没有,可能是文件损坏;
- 尝试用其他工具(比如Adobe Acrobat)合并这两个PDF,确认源文件能否正常合并,排除文件本身的问题。
4. 文件路径问题
如果你的PDF文件不在当前脚本的执行目录下,pdfs列表里的相对路径会找不到文件,但PyPDF2通常会抛出FileNotFoundError。如果没报错却生成空白文件,可能是你误写了文件名(比如大小写错误,Linux/macOS下文件名区分大小写),仔细核对文件名和路径。
内容的提问来源于stack exchange,提问作者HolyMonk
相关产品推荐
相关产品推荐

