我有一個包含很多子檔案夾的檔案夾,里面有 PDF 檔案。在這些檔案中查找資訊真是一團糟,所以我正在撰寫一個程式來決議這些檔案夾和檔案,在 PDF 檔案中搜索關鍵字,并回傳包含該關鍵字的 PDF 檔案的名稱。
它正在作業。幾乎,實際上。
我有這個錯誤:PyPDF2.errors.PdfReadError: PDF starts with '??', but '%PDF-' expected當我的程式到達一些檔案夾時(很難知道到底是哪一個)。從我的角度來看,我檔案夾中的所有 PDF 檔案都是相同的,所以我不明白為什么我的程式適用于某些檔案而不適用于其他檔案。
預先感謝您的回復。
uj5u.com熱心網友回復:
免責宣告:我是borb這個答案中提到的圖書館的作者
在野外捕獲的 PDF 檔案有時會以非 pdf 位元組(不是 PDF 規范的真正組成部分的標題)開頭。這可能會導致各種問題。
PDF 將(在內部)跟蹤檔案中物件的所有位元組偏移量(例如“物件 10 從位元組 10202 開始”)。此標頭使知道物件從何處開始變得更加困難。
- 我們是否從檔案的開頭開始計數?
- 或者在檔案表現得像 PDF 的開頭?
如果您只想從 PDF 中提取文本(以便能夠檢查其內容和關鍵字),您可以嘗試使用borb.
borb將在檔案的前 1MB 中查找 PDF 的開頭(因此可能會忽略您的錯誤標題)。如果事實證明這破壞了 XREF(交叉參考表,包含物件的所有位元組地址),它將簡單地構建一個新的。
這是如何使用以下方法從 PDF 中提取文本的示例borb:
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()
您可以在示例存盤庫中找到更多示例。
uj5u.com熱心網友回復:
PdfFileReader 有一個strict屬性。用它:
reader = PdfFileReader("example.pdf", strict=False)
如果您仍然遇到問題,請在 Github 上打開一個問題 - 但前提是您可以共享導致問題的 pdf 代碼:https ://github.com/py-pdf/PyPDF2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/480247.html
