PyPDF2 在解析 pdf 时因未知原因而停止

问题描述 投票:0回答:1

我有一个脚本,可以在其中浏览并解析大量 PDF。我注意到,当我尝试解析特定的 PDF 时,脚本会永远停止。但它不会抛出错误,而且据我所知,PDF 没有损坏。我不知道问题是什么,但我可以看到它发生在第 4 页。有没有办法找出导致此问题的原因,或者如果解析 PDF 的时间超过一分钟,则跳过该 PDF ?

作为参考,这里是 PDF:https://go.boarddocs.com/fl/palmbeach/Board.nsf/files/CTWGW9459021/$file/22C-001R_2ND%20RENEWAL%20CONTRACT_TERRACON.pdf

from PyPDF2 import PdfReader
doc = "somefile.pdf"

doc_text = ""

try:
    print(doc)
    reader = PdfReader(doc) 
    for i in range(len(reader.pages)):
        print(i)
        page = reader.pages[i] 
        text = page.extract_text()
        doc_text += text

except Exception as e:
    print(f"The file failed due to error {e}:")
    doc_text = ""
python pdf pypdf
1个回答
0
投票

读者似乎发现很难检测到所有字符,因为它们无法清晰可读,最好的选择是忽略并继续前进,或者如果无法读取,则完全停止该过程。 您还可以尝试使用其他 pdf 阅读器,例如 pdfplumber 或 fitz(PyMuPDF)。

使用信号库编写一段代码来忽略停顿,允许读者在停顿时前进到下一页。

import signal
from PyPDF2 import PdfReader


def handler(signum, frame):
    raise TimeoutError("Parsing page took too long.")


signal.signal(signal.SIGALRM, handler)

doc = "somefile.pdf"
doc_text = ""

try:
    print(doc)
    reader = PdfReader(doc)
    for i in range(len(reader.pages)):
        try:
            print(f"Parsing page {i}")
            signal.alarm(60)
            page = reader.pages[i]
            text = page.extract_text()
            doc_text += text
            signal.alarm(0)  
        except TimeoutError as e:
            print(f"Page {i} skipped due to timeout: {e}")
            continue 

except Exception as e:
    print(f"The file failed due to error {e}:")
    doc_text = ""

signal.alarm(0)

尝试其中任何一个并告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.