首页 文章

当解析的PDF被破坏时,我可以优雅地使PyPDF2失败吗?

提问于
浏览
1

我有一个Python应用程序从公共网站上抓取数百个PDF文件并使用这个python库解析它们PyPDF2

在成功解析的数百个此类文件中,有一个文件让我心痛 . 这是18页长 . 文件名是'bad.pdf' . 你可以看到here .

这是我将解析文档的代码:

$ virtualenv my_env
$ source my_env/bin/activate
(my_env) $ pip install PyPDF2==1.26.0
(my_env) $ python
>>> import PyPDF2
>>> def parse_pdf_doc():
>>>     pdfFileObj = open('bad.pdf', 'rb')
>>>     pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
>>>     for curr_page_num in range(pdfReader.numPages):
>>>         print 'curr_page_num = {}'.format(curr_page_num)
>>>         pageObj = pdfReader.getPage(curr_page_num)
>>>         print '\tPage Retrieved successfully'
>>>         page_text = pageObj.extractText()
>>>         print '\tText extracted successfully'

当我运行此代码时,它成功解析前九页 . 但是在第十页,它只是挂起 . 永远:

>>> parse_pdf_doc()
curr_page_num = 0
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 1
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 2
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 3
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 4
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 5
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 6
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 7
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 8
    Page Retrieved successfully
    Text extracted successfully
curr_page_num = 9
    Page Retrieved successfully
<... hung here forever ...>

第10页有什么问题?让我们在 Spectator 中打开它 . 哦哇:即使是Google Documents也无法解析第10页 . 因此该页面肯定存在损坏:

但是,我仍然需要PyPDF抛出异常或以其他方式失败,而不仅仅是进入无限循环 . 它会杀死我的工作流程 . 我该怎么做才能解决PDF文件中这个损坏的页面?

1 回答

  • 0

    下面的模板将让您了解如何实现这一目标 .

    from multiprocessing import Process
    pdfFileObj = open('bad.pdf', 'rb')
    for page in PDFPage.get_pages(pdfFileObj):
                        processTimeout = 20
                        extractTextProcess = Process(target=Function_to_extract_text, args=(pdfObject,page)
    

    open 你的文件来自 with 关键字(以节省内存泄漏)

相关问题