python - 使用 pdfminer 从 pdf 中提取文本会提供多个副本

标签 python pdf pdfminer

我正在尝试使用 PDFMiner(代码位于 Extracting text from a PDF file using PDFMiner in python?)从 PDF 文件中提取文本。除了 path/to/pdf 之外,我没有更改代码。令人惊讶的是,该代码返回同一文档的多个副本。我用其他 pdf 文件得到了相同的结果。我是否需要传递其他参数或者我遗漏了什么?非常感谢任何帮助。为了以防万一,我提供了代码:

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

def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = file(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos=set()
    fstr = ''
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,    password=password,caching=caching, check_extractable=True):
        interpreter.process_page(page)

        str = retstr.getvalue()
        fstr += str

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

print convert_pdf_to_txt("test.pdf")

最佳答案

我在您引用的主题中的回答有点不正确。我发现了错误并忘记更新我的答案。

因为 pdfminer 的文档非常少,我无法完全解释为什么它会这样工作。希望更了解 pdfminer 库的人可以给我们一些见解。

我所知道的是,您必须在 for 循环之外执行 text = retstr.getvalue()。我只能假设 retstr 正在更新,就像我们在 for 循环中执行 final_text += text 一样,所以一旦完成,我们只需要执行 text = retstr.getvalue() 从所有页面中获取文本。

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

def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = file(path, 'rb')
    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)

    text = retstr.getvalue()

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

print convert_pdf_to_txt("test.pdf")

希望这对您有所帮助!

关于python - 使用 pdfminer 从 pdf 中提取文本会提供多个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26748788/

相关文章:

python - 为什么 localhost :5000 not work in Flask?

python - 如何将 pylab.plot 线放在 pylab.figtext 上?

python - 在文档的页面上查找单词

.net - 在 .NET WebBrowser 控件中显示 PDF 时如何隐藏 Adob​​e Reader 工具栏?

python - 在python中使用PDFMiner从PDF文件中提取文本?

python - 如何修复 'cannot import name ' ' 错误中的 'pdfminer.pdfinterp' process_pdf'

在 Gnome Shell 中带有通知的 Python 程序不起作用

python - 如何使用Sqlalchemy和Flask关闭MySql连接?

javascript - 如何将上传的 pdf 文件传递​​给变量。 (PDF.JS)

iphone - 如何在 iOS 上检索 PDF 中 Outline 目标的页码或页面引用?