PDFMiner - 将页面导出为字符串列表
PDFMiner - export pages as List of Strings
我希望将 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
请帮助。
您当前脚本的问题是StringIO.getvalue
总是returns一个字符串,并且该字符串包含到目前为止读取的所有数据。此外,对于每一页,您都会覆盖存储它的变量 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
视为文本文档。您需要在添加文本时管理光标位置,并一次存储一页新添加的文本。在这里,我们将文本存储在列表中。
我希望将 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
请帮助。
您当前脚本的问题是StringIO.getvalue
总是returns一个字符串,并且该字符串包含到目前为止读取的所有数据。此外,对于每一页,您都会覆盖存储它的变量 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
视为文本文档。您需要在添加文本时管理光标位置,并一次存储一页新添加的文本。在这里,我们将文本存储在列表中。