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

0 阅读3分钟

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

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

ChatGPT Image 2026年4月27日 11_37_34.png

在开始之前,请确保你已经安装了 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 文件变得如此简单。无论是读取文件、逐页分析文字,还是把珍贵的插图保存下来,只需要短短的十几行代码就能搞定。这大大提升了文档处理的效率,让你能专注于下一步的数据分析或业务逻辑。

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