Python实战:使用pdfplumber高效提取PDF文本与表格

纸上星河
纸上星河
发布时间:2026-10-15| 6人浏览过
原创

本文详解Python中利用pdfplumber库进行PDF文件处理的全流程。重点介绍如何安装配置该库,掌握open()、extract_text()及extract_tables()等核心API的使用。通过代码示例展示文本与表格的精准提取方法,并解析Page对象的属性与参数配置,帮助开发者高效解决PDF内容解析需求。

实战场景

Python工程师在日常开发工作中,经常需要解析和处理PDF文件。实际业务需求主要涵盖以下几个方面:

  • 提取PDF文档中的文字内容
  • 将PDF文档的每一页转换为图片格式
  • Word文档转换为PDF格式
  • PDF文件的生成、编辑、导入与导出操作
  • PDF文件的在线渲染展示

除最后一项在线渲染需前端配合外,其余功能均可在Python后端直接实现。

本次实战选用pdfplumber库进行深入学习。建议提前安装该库,但需注意,该库主要专注于读取PDF并进行操作,暂不支持写入和编辑功能,即本文聚焦于一款专用于PDF内容提取的工具库。

> pip install pdfplumber -i https://pypi.tuna.tsinghua.edu.cn/simple

pdfplumber库具备以下核心特点:

  • 能够访问PDF对象中的任意元素详细信息;
  • 支持提取文本和表格,且使用方式简单直观;
  • 集成了可视化调试功能。

Python PDF实战编码

接下来编写PDF操作的基础代码。

import pdfplumber

with pdfplumber.open('./dddd.pdf') as pdf:
    for page in pdf.pages:
        print(page.extract_text())

        # 每页打印一分页分隔
        print('---------- 分页分隔 ----------')

导入pdfplumber模块后,使用pdfplumber.open('./dddd.pdf')打开本地PDF文件,随后通过pdf.pages遍历所有页面,再利用页对象的.extract_text()方法提取文本信息。

pdfplumber.open()方法的签名如下所示:

pdfplumber.open("文件名", password = "密码", laparams = { "line_overlap": 0.7 })

其中各参数描述如下:

  • file_name:文件名,必选参数;
  • password:PDF文件的密码;
  • laparams:布局参数。

此外,若希望读取PDF,还可以使用load()方法,该方法同样返回pdfplumber.PDF类的实例。

pdfplumber.PDF对象实例主要包含两个重要属性:

  • .metadata:从PDF的Info中获取元数据键/值对字典,通常包括“CreationDate”、“ModDate”、“Producer”等;
  • .pages:包含pdfplumber.Page实例的列表,每个实例代表PDF中每一页的信息。

上文提及的pdfplumber.Page实例是pdfplumber的核心,后续对PDF的大量操作均围绕该类的属性和方法展开,其重要属性如下所示:

  • page_number:页码顺序,第一页的序号为1;
  • witdh:页面宽度;
  • height:页面高度;
  • .objects/.chars/.lines/.rects/.curves/.figures/.images:获取PDF页中的重要数据。

核心方法如下所示:

  • extract_text():提取页面中的文本;
  • extract_words():提取所有单词及其相关信息;
  • extract_tables():提取页面中的表格。

extract_text()呈现结果

extract_words()呈现结果

extract_tables()呈现效果,由于示例PDF中无表格,因此每页得到的结果均为空。

补充

当然,Python除了读取PDF文件外,还有一些其他功能,例如加密PDF、旋转和叠加页面等,下面是实现的示例代码。

旋转和叠加页面

import PyPDF2

from PyPDF2.pdf import PageObject

# 创建一个读PDF文件的Reader对象

reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')

# 创建一个写PDF文件的Writer对象

writer = PyPDF2.PdfFileWriter()

# 对PDF文件所有页进行循环遍历

for page_num in range(reader.numPages):

      # 获取指定页码的Page对象

      current_page = reader.getPage(page_num) # type: PageObject

      if page_num % 2 == 0:

         # 奇数页顺时针旋转90度

         current_page.rotateClockwise(90)

      else:

# 偶数页反时针旋转90度

             current_page.rotateCounterClockwise(90)

      writer.addPage(current_page)

# 最后添加一个空白页并旋转90度

page = writer.addBlankPage() # type: PageObject

page.rotateClockwise(90)

# 通过Writer对象的write方法将PDF写入文件

with open('resources/XGBoost-modified.pdf', 'wb') as file:

    writer.write(file)

加密PDF文件

import PyPDF2

reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
writer = PyPDF2.PdfFileWriter()

for page_num in range(reader.numPages):
     writer.addPage(reader.getPage(page_num))

# 通过encrypt方法加密PDF文件,方法的参数就是rre

#设置的密码
writer.encrypt('foobared')

with open('resources/XGBoost-encrypted.pdf', 'wb') as file:

       writer.write(file)

批量添加水印

import PyPDF2

from PyPDF2.pdf import PageObject

reader1 = PyPDF2.PdfFileReader('resources/XGBoost.pdf') reader2 = PyPDF2.PdfFileReader('resources/watermark.pdf')
writer = PyPDF2.PdfFileWriter()

# 获取水印页
watermark_page = reader2.getPage(0)

for page_num in range(reader1.numPages):

     current_page = reader1.getPage(page_num) # type: PageObject                                           current_page.mergePage(watermark_page)

     # 将原始页和水印页进行合并
     writer.addPage(current_page) 

# 将PDF写入文件
with open('resources/XGBoost-watermarked.pdf', 'wb') as file:

       writer.write(file)

到此这篇关于Python读取PDF文件的文章就介绍到这了,更多相关Python读取PDF文件内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。