首页 > 解决方案 > 如何在 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 中获取数据的代码示例。

标签: python-3.xpypdf2pdfminer

解决方案


安装 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)

推荐阅读