簡體   English   中英

PyPDF2 - PdfFileReader - 無法提取文本

[英]PyPDF2 - PdfFileReader - cannot extract text

我正在循環瀏覽一個目錄並閱讀大量 PDF。 我正在使用循環從每個頁面中提取所有文本信息。

5/13 PDF 在嘗試使用時拋出錯誤。getNumPages(): 發生異常: ValueError 無效的 int() 字面量為 10: b''。 我相信發生此錯誤是因為 object (PyPDF2) 顯示 numPages: 0。

當前代碼

dir = os.listdir(directory)

for f in dir:
object = PyPDF2.PdfFileReader(directory + '\\' + f)

NumPages = object.getNumPages()
text_output = ""  # Initiate Variable

# Loop through all pages and extract/merge text
with open(directory + '\\' + f, mode='rb') as FileName:
    reader = PyPDF2.PdfFileReader(FileName)
    for p_num in range(0, NumPages):
        page = reader.getPage(p_num)
        text_output = text_output + '\n' + 'PAGE: ' + \
            str(p_num + 1) + '\n' + page.extractText()

我添加了一張顯示 object 數據的圖像,其中 numPages: 0

我不明白為什么只有某些 PDF 有這個問題。 任何幫助,將不勝感激!!

我測試了幾個 pdf 庫,我注意到PyMuPDF最適合閱讀 pdf 文件。

這里的代碼示例:

import fitz

doc = fitz.open("file.pdf")

for page in doc:
    text = page.getText()
    print(text)

好吧,我也遇到了PyPDF2相同的問題,所以我使用了另一個名為slate的 python 庫

  • 安裝庫

    pip install slate3k
  • 然后使用下面的代碼

    import slate3k as slate with open(file.pdf, 'rb') as f: extracted_text = slate.PDF(f) print(extracted_text)

我使用 pdfminer 提取 pdf。

您可以參考示例代碼。

#pip install pdfminer.six
import io

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage


def convert_pdf_to_txt(path):
    '''Convert pdf content from a file path to text

    :path the file path
    '''
    rsrcmgr = PDFResourceManager()
    codec = 'utf-8'
    laparams = LAParams()

    with io.StringIO() as retstr:
        with TextConverter(rsrcmgr, retstr, codec=codec,
                           laparams=laparams) as device:
            with open(path, 'rb') as fp:
                interpreter = PDFPageInterpreter(rsrcmgr, device)
                password = ""
                maxpages = 0
                caching = True
                pagenos = set()

                for page in PDFPage.get_pages(fp,
                                              pagenos,
                                              maxpages=maxpages,
                                              password=password,
                                              caching=caching,
                                              check_extractable=True):
                    interpreter.process_page(page)

                return retstr.getvalue()


if __name__ == "__main__":
    print(convert_pdf_to_txt('test.pdf'))

有關此蓋子的更多信息。 你可以參考下面的鏈接

PDFminer

如果有任何問題,請檢查並回復我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM