python-3.x - 如何在 python 3 中使用 PDFminer.six?
问题描述
我想使用 pdfminer.six 这是一个工具,它可以与 Python3 一起用于从 PDF 文档中提取信息。问题是根本没有好的文档,也没有关于如何使用该工具的源代码示例。
我已经尝试过 StackOverflow 中的一些代码,但没有成功。下面是我的代码。
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io 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 = open(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
我想要一些关于如何使用此工具从 PDF 中获取数据的代码示例。
解决方案
安装 pdfminer.six 或 pdfminer3 ( https://github.com/gwk/pdfminer3/ ) install: pip install pdfminer3 当我从 3.6 升级到 3.7 时切换到 pdfminer3 我在 ubuntu 和 macos 上使用 python 3.7.3
pdfminer3 带有两个方便的工具:pdf2txt.py 和 dumppdf.py 检查源代码。相当小且易于理解。
以下是一个工作示例(添加 pdf 文件的位置后)
from pdfminer3.layout import LAParams, LTTextBox
from pdfminer3.pdfpage import PDFPage
from pdfminer3.pdfinterp import PDFResourceManager
from pdfminer3.pdfinterp import PDFPageInterpreter
from pdfminer3.converter import PDFPageAggregator
from pdfminer3.converter import TextConverter
import io
resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle, laparams=LAParams())
page_interpreter = PDFPageInterpreter(resource_manager, converter)
with open('/path/to/file.pdf', 'rb') as fh:
for page in PDFPage.get_pages(fh,
caching=True,
check_extractable=True):
page_interpreter.process_page(page)
text = fake_file_handle.getvalue()
# close open handles
converter.close()
fake_file_handle.close()
print(text)
推荐阅读
- corda - 在 Corda Enterprise CorDapp 中指定供应商
- python - 如何使用 mysqlconnector 获取 sqlalchemy.create_engine 以使用 mysql_native_password 进行连接?
- cassandra - Cassandra:如果 TRUNCATE 表并只为一个节点恢复备份,我会丢失数据吗?
- eclipse - Eclipse SVN:提交失败后如何重新提交
- reactjs - React - 带有文件和字符串的 Axios POST 表单数据
- java - 执行文件 io 后我的 java 程序不工作
- mysql - 如何使用Mysql连接两个具有不同值的表
- apache-kafka - Kafka:添加批量旧数据
- javascript - 从 React 本机应用程序打开外部应用程序(按钮单击)
- python - 列出Arcpy文件夹内的文件?