PDFMiner不能解析超过1页

时间:2018-09-30 07:46:20

标签: python pypdf2 pdfminer

我正在将PDFMiner6与Python 3.5配合使用。它比PyPDF2更好(速度较慢,但​​更准确,不会吐出一堆没有空格的字母)。我试图解析此文档:

https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2963791/ (您可以从NIH网站免费下载PDF。)

我使用了这段代码(它是一个更大的蜘蛛的一部分,但是其余的代码与此问题无关):

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

class PDFMiner6(object):
    def __init__(self):
        pass

    def PdfFileReader(self, fp):
        text = []
        rsrcmgr = PDFResourceManager()
        retstr = io.StringIO()
        codec = 'utf-8'
        laparams = LAParams()
        device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
        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)
            output = retstr.getvalue()
            text.append(output)

        fp.close()
        device.close()
        retstr.close()
        return text

它完美地解析第一页,然后停止。该文档的其余部分未解析。

我使用PyPDF2测试了相同的文档,它解析了整个文档,但输出的垃圾中没有任何空格(因此我切换到PDFMiner6)。因此,我确定不是不是整个文档都没有被读取,而是解析它的代码有问题。怎么了?

编辑:我继续在不同的PDF文件上进行了测试,并得出了不同的结果-它可以完全解析某些文件,而其他文件则可以在第一页停止。令人沮丧的是,与PyPDF2相比,PDFMiner6是更好的解析器。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

确保由pdf查看器而不是网络浏览器打开pdf。我遇到了同样的问题,这就是我解决的方法。

看起来pdfminer可以将Web浏览器正在打开的pdf视为一页。因此,您需要确保它是由pdf查看器打开的,以便pdfminer识别pdf上有超过一页。