使用PyPDF2拆分PDF保存时出现AssertionError报错如何解决?
问题解决方法
错误原因
这个AssertionError: assert "/Length" in data是PyPDF2的严格格式校验触发的,你处理的PDF文件存在元数据缺失、格式不标准或者未完全解密的情况,PyPDF2默认的严格模式不允许这类不符合PDF规范的字段缺失,因此直接抛出断言错误。
解决方法1(优先推荐):替换为官方维护的pypdf库
PyPDF2项目已于2022年合并到全新的pypdf项目中,新版本修复了大量兼容性问题,对非标准PDF的支持更好,修改成本极低:
- 先卸载旧的PyPDF2:
pip uninstall PyPDF2 -y
- 安装pypdf:
pip install pypdf
- 你的代码只需要修改导入语句和少量调用方法即可,核心逻辑完全不变:
from pypdf import PdfReader, PdfWriter pdf = PdfReader("input.pdf") # 源PDF文件 for page in range(len(pdf.pages)): pdf_writer = PdfWriter() pdf_writer.add_page(pdf.pages[page]) output = f'output{page}.pdf' # 待保存的PDF文件名 with open(output, 'wb') as output_pdf: pdf_writer.write(output_pdf)
解决方法2:保留PyPDF2,关闭严格校验模式
如果不想更换依赖,只需要在初始化PdfFileReader时添加strict=False参数,跳过严格的格式校验即可:
from PyPDF2 import PdfFileReader, PdfFileWriter # 新增strict=False参数,关闭严格校验 pdf = PdfFileReader("input.pdf", strict=False) for page in range(pdf.getNumPages()): pdf_writer = PdfFileWriter() pdf_writer.addPage(pdf.getPage(page)) output = f'output{page}.pdf' with open(output, 'wb') as output_pdf: pdf_writer.write(output_pdf)
备选方案:使用PyMuPDF库处理
如果以上两种方法仍有问题,可以改用兼容性更强的PyMuPDF(fitz)库实现拆分:
- 安装依赖:
pip install pymupdf
- 拆分代码示例:
import fitz pdf = fitz.open("input.pdf") for page in range(pdf.page_count): pdf_writer = fitz.open() pdf_writer.insert_pdf(pdf, from_page=page, to_page=page) pdf_writer.save(f"output{page}.pdf") pdf_writer.close() pdf.close()
内容的提问来源于stack exchange,提问作者rabeeh_ta
相关产品推荐
相关产品推荐

