使用 Python 读取 PDF: 提取文本和图片

在日常工作和学习中,我们经常会遇到需要从 PDF 文件中批量提取文本或图片的情况。比如,整理一份扫描版合同中的条款,或者收集一份产品手册里所有的配图。

之前处理 PDF 可能会让人感到头疼,但有了合适的库,这一切都变得简单。今天,我们将介绍如何使用 Spire.PDF for Python 这个强大的库,仅需几行代码,就能轻松搞定 PDF 中的文本和图片提取)。

在开始之前,请确保你已经安装了 Spire.PDF 库:

复制代码
pip install Spire.PDF

1. 加载 PDF 文档

在进行任何操作之前,首先需要将 PDF 文件加载到我们的代码中。Spire.PDF 非常灵活,支持 从文件路径加载 ,也支持 从数据流(Stream)加载

  • 方式一:从文件加载

这是最直接的方式,适用于本地磁盘上的固定文件。

复制代码
from spire.pdf import PdfDocument

# 创建一个 PdfDocument 实例
pdf = PdfDocument()
# 加载本地的 PDF 文档
pdf.LoadFromFile("sample.pdf")
  • 方式二:从数据流加载

如果你的 PDF 数据是从网络接口接收到的,或者是通过其他方式在内存中生成的字节数据,这种方式就非常实用。

复制代码
from spire.pdf import PdfDocument, Stream

# 将文件读取为字节数组(这里演示从文件读,实际也可以来自网络)
with open("sample.pdf", "rb") as f:
    byte_data = f.read()

# 创建数据流对象
pdfStream = Stream(byte_data)
# 从流中加载 PDF
pdf = PdfDocument(pdfStream)

2. 提取文本

文本提取是处理文档最常用的功能之一。下面的代码演示了如何遍历 PDF 的所有页面,并将每一页的文本拼接起来。

主要用到 PdfTextExtractor 和 PdfTextExtractOptions 这两个辅助类。设置 IsExtractAllText = True 可以确保提取出页面上的大部分可见文本。

复制代码
# 假设 pdf 对象已经通过上面的方式加载完成
all_text = ""

# 循环遍历每一页
for pageIndex in range(pdf.Pages.Count):
    # 根据索引获取当前页
    page = pdf.Pages.get_Item(pageIndex)

    # 创建文本提取器
    text_extractor = PdfTextExtractor(page)

    # 配置提取选项
    options = PdfTextExtractOptions()
    options.IsExtractAllText = True
    options.IsSimpleExtraction = True

    # 执行提取并累加
    all_text += text_extractor.ExtractText(options)

# 打印结果
print(all_text)

3. 提取图片

很多时候,PDF 里的关键信息其实藏在插图或图表里。Spire.PDF 同样为我们准备了非常便捷的图片提取方案。

通过 PdfImageHelper 帮助类,我们可以直接获取页面上的图片信息,然后一键保存为图片文件(如 .png 格式)。

复制代码
# 获取第一页(索引为0)
page = pdf.Pages.get_Item(0)

# 创建图片辅助对象
image_helper = PdfImageHelper()
# 获取该页面上的所有图片信息
images_info = image_helper.GetImagesInfo(page)

# 遍历并保存每一张图片
for i in range(len(images_info)):
    # 保存为 PNG 格式
    images_info[i].Image.Save(f"output/Images/image_{i}.png")

print(f"成功提取 {len(images_info)} 张图片")

注意 :如果是扫描件(图片型 PDF),提取出来的其实是一整张扫描图;如果是电子文档生成的 PDF,则能精准提取出嵌入的独立图标或照片。

4. 进阶提示

虽然上述代码已经覆盖了基础需求,但在实际应用中还有几点值得注意:

  1. 分页处理 :示例中为了演示,提取了所有文本。如果你想按页处理,只需在循环中控制 pageIndex 即可。
  2. 中文支持 :该库对中文支持良好,提取中文 PDF 时只要保持编码环境为 UTF-8 即可。
  3. 免费版限制 :如果你使用的是免费版的 Spire.PDF,请注意它通常对处理的页数有限制(例如仅支持前 10 页)。如果需要处理页数较多的文档,可能需要评估商业版。

总结

通过 Spire.PDF for Python,你会发现处理 PDF 文件变得如此简单。无论是读取文件、逐页分析文字,还是把珍贵的插图保存下来,只需要短短的十几行代码就能搞定。这大大提升了文档处理的效率,让你能专注于下一步的数据分析或业务逻辑。

现在就去试试吧,用代码解放你的双手!

相关推荐
weelinking1 天前
【2026】08_Claude与版本控制:Git协作技巧
数据库·人工智能·git·python·数据挖掘·交互·cloudera
踩着两条虫1 天前
「AI + 低代码」的可视化设计器
开发语言·前端·低代码·设计模式·架构
JoneBB1 天前
ABAP Webservice连接
运维·开发语言·数据库·学习
scan7241 天前
智能体多个工具调用
python
2401_867623981 天前
CSS Flex布局中如何设置子元素间距_掌握gap属性的现代用法
jvm·数据库·python
即使再小的船也能远航1 天前
【Python】安装
开发语言·python
weixin_421725261 天前
Linux 编程语言全解析:C、C++、Python、Go、Rust 谁更强?
linux·python·go·c·编程语言
Irissgwe1 天前
类与对象(三)
开发语言·c++·类和对象·友元
没有梦想的咸鱼185-1037-16631 天前
AI-Python机器学习、深度学习核心技术与前沿应用及OpenClaw、Hermes自动化编程
人工智能·python·深度学习·机器学习·chatgpt·数据挖掘·数据分析
雪度娃娃1 天前
转向现代C++——优先选用nullptr而不是0和NULL
开发语言·c++