PyPDF2.errors.PdfReadError:PDF 以"▬"开头,但"♣%PDF-"预期



我有一个包含很多子文件夹的文件夹,里面有PDF文件。在这些文件中查找信息真是一团糟,所以我编写了一个程序来解析这些文件夹和文件,在PDF文件中搜索关键字,并返回包含该关键字的PDF文件的名称。

它起作用了。实际上,几乎。

我有这个错误:PyPDF2.errors.PdfReadError: PDF starts with '♣▬', but '%PDF-' expected当我的程序到达一些文件夹(很难确切地知道哪一个)。从我的角度来看,我文件夹里所有的PDF文件都是一样的,所以我不明白为什么我的程序对一些文件有效,而对另一些文件不起作用。

提前感谢您的回复。

PdfFileReader已弃用。用PdfReader代替!(源)

PdfFileReader有一个strict属性。使用它:

reader = PdfFileReader("example.pdf", strict=False)

PdfReader与PdfFileReader相同,但默认情况下具有strict=False。大多数人想要strict=False。在下一个主要版本中,我将从PyPDF2中删除PdfFileReader,以支持PdfReader。

如果您仍然遇到问题,请在Github上打开问题-但前提是您可以共享导致问题的pdf+代码:https://github.com/py-pdf/PyPDF2

免责声明:我是borb的作者,这个图书馆在这个答案中提到

在野外捕获的PDF文档有时会以非PDF字节(不是PDF规范的真正一部分的标头)开始。这会导致各种各样的问题。

PDF将(在内部)跟踪文件中对象的所有字节偏移量(例如"object 10从字节10202"开始)。

  • 我们从文件的开头开始计数吗?
  • 或者在文件像PDF一样的地方开始?

如果您只想从PDF中提取文本(以便能够检查内容和关键字),您可以尝试使用borb

borb将在文件的前1MB内查找PDF的开头(因此可能会忽略错误的头文件)。如果这破坏了XREF(交叉引用表,包含对象的所有字节地址),它将简单地构建一个新的。

这是一个如何使用borb:

从PDF中提取文本的示例。
import typing
from borb.pdf.document.document import Document
from borb.pdf.pdf import PDF
from borb.toolkit.text.simple_text_extraction import SimpleTextExtraction

def main():
# read the Document
doc: typing.Optional[Document] = None
l: SimpleTextExtraction = SimpleTextExtraction()
with open("output.pdf", "rb") as in_file_handle:
doc = PDF.loads(in_file_handle, [l])
# check whether we have read a Document
assert doc is not None
# print the text on the first Page
print(l.get_text_for_page(0))

if __name__ == "__main__":
main()

您可以在示例库中找到更多示例。

最新更新