1

我希望将 pdf 中的文本导出为字符串列表,其中列表是整个文档,字符串是 PDF 的页面。我正在使用 PDFMiner 来完成这项任务,但它非常复杂,而且我的期限很紧。

到目前为止,我已经获得了将完整的 pdf 提取为字符串的代码,但我需要以字符串列表的形式。

我的代码如下

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

f = file('./PDF/' + file_name, 'rb')
data = []
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
# Create a PDF interpreter object.
interpreter = PDFPageInterpreter(rsrcmgr, device)
# Process each page contained in the document.

for page in PDFPage.get_pages(pdf):
    interpreter.process_page(page)
    data = retstr.getvalue()

print data

请帮忙。

4

1 回答 1

4

当前脚本的问题StringIO.getvalue始终是返回一个字符串,该字符串包含到目前为止读取的所有数据。此外,对于每一页,您都在覆盖data存储它的变量。

一种解决方法是StringIO在写入之前存储 的位置,然后从该位置读取到字符串流的末尾:

# A list for all each page's text
pages_text = []

for page in PDFPage.get_pages(pdf):
    # Get (and store) the "cursor" position of stream before reading from PDF
    # On the first page, this will be zero
    read_position = retstr.tell()

    # Read PDF page, write text into stream
    interpreter.process_page(page)

    # Move the "cursor" to the position stored
    retstr.seek(read_position, 0)

    # Read the text (from the "cursor" to the end)
    page_text = retstr.read()

    # Add this page's text to a convenient list
    pages_text.append(page_text)

StringIO其视为文本文档。您需要在添加文本时管理光标位置,并一次将新添加的文本存储一页。在这里,我们将文本存储在列表中。

于 2015-01-31T01:15:12.467 回答