You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pypdf处理PDF时遇'endstream'标记缺失错误求助

解决pypdf处理PDF时的PdfReadError问题

执行以下代码时触发PdfReadError,错误提示无法找到对应对象的endstream标记:

from pypdf import PdfReader,PdfWriter
import traceback

try:
    input_pdf = PdfReader(dwnld_filepath)
    output_pdf = PdfWriter()
    image = input_pdf.pages[0]
    output_pdf.add_page(image)
    output_pdf.write(file_path)
except Exception as e:
    traceback.print_exc()

完整回溯信息:

Traceback (most recent call last):
File "/Users/shafeerali/Documents/Nanonets/avanto/API/test.py", line 58, in
output_pdf.add_page(image)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/_writer.py", line 418, in add_page
return self._add_page(page, list.append, excluded_keys)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/_writer.py", line 331, in _add_page
page = cast("PageObject", page_org.clone(self, False, excluded_keys))
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 199, in clone
d.._clone(self, pdf_dest, force_duplicate, ignore_fields, visited)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 310, in _clone
v.clone(pdf_dest, force_duplicate, ignore_fields)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 199, in clone
d.
._clone(self, pdf_dest, force_duplicate, ignore_fields, visited)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 310, in _clone
v.clone(pdf_dest, force_duplicate, ignore_fields)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 199, in clone
d.__._clone(self, pdf_dest, force_duplicate, ignore_fields, visited)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 310, in _clone
v.clone(pdf_dest, force_duplicate, ignore_fields)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_base.py", line 300, in clone
obj.clone(pdf_dest, force_duplicate, ignore_fields)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 116, in clone
arr.append(data.clone(pdf_dest, force_duplicate, ignore_fields))
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_base.py", line 292, in clone
obj = self.get_object()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_base.py", line 312, in get_object
obj = self.pdf.get_object(self)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/_reader.py", line 1401, in get_object
retval = read_object(self.stream, self) # type: ignore
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 1280, in read_object
return DictionaryObject.read_from_stream(stream, pdf, forced_encoding)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 538, in read_from_stream
data["streamdata"] = read_unsized_from_steam(stream, pdf)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pypdf/generic/_data_structures.py", line 432, in read_unsized_from_steam
raise PdfReadError(
pypdf.errors.PdfReadError: Unable to find 'endstream' marker for obj starting at 13367.


解决方案

该错误源于目标PDF文件本身存在结构损坏(缺失endstream标记),可尝试以下方法解决:

  • 更新pypdf到最新版本
    新版本pypdf可能修复了此类兼容性问题,执行命令升级:

    pip install --upgrade pypdf
    
  • 用第三方工具修复PDF结构
    使用qpdf或pdftk先修复损坏的PDF,再用pypdf处理。以qpdf为例:

    1. 安装qpdf(根据系统用brew install qpdf、apt install qpdf等命令)
    2. 执行修复命令:
      qpdf --repair-input EveBest.pdf repaired_EveBest.pdf
      
    3. 使用修复后的repaired_EveBest.pdf作为输入文件运行代码。
  • 替换为其他PDF处理库
    若上述方法无效,可尝试使用PyMuPDF(fitz)替代pypdf,代码示例:

    import fitz
    
    input_pdf = fitz.open("EveBest.pdf")
    output_pdf = fitz.open()
    output_pdf.insert_pdf(input_pdf, from_page=0, to_page=0)
    output_pdf.save("output.pdf")
    output_pdf.close()
    input_pdf.close()
    

内容的提问来源于stack exchange,提问作者MUHAMMED SHAFEERALI P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 23:27:18