利用Python获取PDF文件的文本

虽然PDF文件对文本布局非常好,容易打印并阅读,但软件要将它们解析为纯文本并不容易,Python目前解析PDF的扩展包有很多。

通过查询资料,建议使用pdfplumber扩展包来解析PDF文档的文本和表格。本文介绍如何通过pdfplumber获取PDF的文本。

A Step-by-Step Guide to Parsing PDFs using the pdfplumber Library In Python  | by Azhar Sayyad | Medium

准备工作

确保安装了以下库:

  • pdfplumber

若没安装,请在命令行使用以下语句进行安装:

pip install pdfplumber

PDFPLUMBER - PDF Data Extracting Library For Python Gets A Big Update — Hive

pdfplumber

pdfplumber中有两个基础类,PDF和Page。PDF用来处理整个文档,Page用来处理整个页面。

1.1 pdfplumber.PDF类

  • .metadata: 获取pdf基础信息,返回字典
  • pages 一个包含pdfplumber.Page实例的列表,每一个实例代表pdf每一页的信息。

1.2 pdfplumber.Page类

pdfplumber核心功能,对PDF的大部分操作都是基于这个类,包括提取文本、表格、尺寸等。

pdfplumber的使用指南

使用 pdfplumber 库解析 PDF 的分步指南。

步骤 1:安装 pdfplumber 库 首先,您需要安装 pdfplumber 库。这可以通过运行以下命令使用 pip 来完成:

pip install pdfplumber

步骤 2:导入库 安装库后,可以使用以下命令将其导入到 Python 脚本中:

import pdfplumber

步骤 3:打开 PDF 要打开 PDF,需要通过将 PDF 文件的路径传递给 open() 函数来创建 pdfplumber.PDF 对象。例如:

with pdfplumber.open("path/to/pdf") as pdf:

步骤 4:提取文本 pdfplumber 提供了多种从 PDF 中提取文本的方法。最简单的方法是 extract_text() 方法,它返回一个包含 PDF 中所有文本的字符串。例如:

text = pdf.extract_text()
print(text)

步骤 5:提取数据 pdfplumber 还提供了多种从 PDF 中提取数据的方法。其中一种方法是 extract_table() 方法,它返回包含 PDF 表格中数据的列表列表。例如:

tables = pdf.extract_table()
print(tables)

步骤 6:提取图像 pdfplumber 还允许您从 PDF 中提取图像。这可以使用 get_image() 方法来完成,该方法返回包含图像数据和元数据的对象。例如:

images = pdf.get_image()
print(images)

完整代码

import pdfplumber

# 打开 PDF
with pdfplumber.open("path/to/pdf") as pdf:
    # 提取文本
    text = pdf.extract_text()
    print(text)

    # 提取表格
    tables = pdf.extract_table()
    for table in tables:
        print(table)

    # 提取图像
    images = pdf.get_images()
    for image in images:
        print(image["page_number"])
        with open(f"image_{image['page_number']}.jpg", "wb") as f:
            f.write(image["data"])

只提取全部文本的代码

按页进行文本提取。

import pdfplumber
def read_pdf(pdf_path):
    with pdfplumber.open(pdf_path) as pdf:
            content = ''
            for i in range(len(pdf.pages)):
                # 读取PDF文档第i+1页
                page = pdf.pages[i]

                # page.extract_text()函数即读取文本内容,下面这步是去掉文档最下面的页码
                page_content = '\n'.join(page.extract_text().split('\n')[:-1])
                content = content + page_content
    return content

if __name__ == '__main__':
    a = read_pdf(r'2011.pdf')
    print()	
    

小结

在本文中,我们介绍了使用 pdfplumber 库在 Python 中解析 PDF 的基础知识。使用 pdfplumber,可以轻松地从 PDF 中提取文本、数据和图像。