首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFMiner -导出页面作为字符串列表

PDFMiner -导出页面作为字符串列表
EN

Stack Overflow用户
提问于 2015-01-30 23:11:43
回答 1查看 1.5K关注 0票数 1

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

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

我的代码如下

代码语言:javascript
复制
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

请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-31 01:15:12

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

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

代码语言:javascript
复制
# 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视为文本文档。您需要在添加文本时管理光标位置,并一次存储新添加的文本一页。在这里,我们将文本存储在一个列表中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28246161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档