Python中如何给文件流添加EOF标记解决pypdf读取无EOF的PDF报错问题
pypdf读取缺失EOF标记PDF的解决方案
核心思路
给PDF字节流末尾追加b'\n%%EOF'标记即可,额外追加的标记不会影响正常PDF的解析,pypdf会自动识别最后一个%%EOF作为文件结束位。
适用场景及代码示例
场景1:原IO流是只读的本地文件流/不可写的字节流
先读取完整内容,补加EOF标记后转成BytesIO对象再传入PdfReader:
from io import BytesIO from pypdf import PdfReader # 读取原流的全部内容 pdf_raw = f.read() # 追加带换行的EOF标记,避免和原有末尾内容粘连识别失败 pdf_raw += b"\n%%EOF" # 生成新的可读IO流 fixed_pdf_stream = BytesIO(pdf_raw) reader = PdfReader(fixed_pdf_stream)
场景2:原IO流是可写的BytesIO对象
直接在原流上操作即可:
from pypdf import PdfReader # 将流指针移到末尾 f.seek(0, 2) # 追加EOF标记 f.write(b"\n%%EOF") # 将流指针移回开头,才能正常读取完整内容 f.seek(0) reader = PdfReader(f)
注意事项
- 追加标记前加换行符是为了避免和PDF原有末尾的二进制内容连在一起,导致识别失效
- 即使原PDF本身已经存在EOF标记,额外追加一次也不会影响解析结果
内容的提问来源于stack exchange,提问作者A.Sim
相关产品推荐
相关产品推荐

