使用 Python 读取 PDF: 提取文本和图片
在日常工作和学习中,我们经常会遇到需要从 PDF 文件中批量提取文本或图片的情况。比如,整理一份扫描版合同中的条款,或者收集一份产品手册里所有的配图。 之前处理 PDF 可能会让人感到头疼,但有了合适的库,这一切都变得简单。今天,我们将介绍如何使用 Spire.PDF for Python 这个强大的库,仅需几行代码,就能轻松搞定 PDF 中的文本和图片提取)。 在开始之前,请确保你已经安装了 Spire.PDF 库: 在进行任何操作之前,首先需要将 PDF 文件加载到我们的代码中。 这是最直接的方式,适用于本地磁盘上的固定文件。 如果你的 PDF 数据是从网络接口接收到的,或者是通过其他方式在内存中生成的字节数据,这种方式就非常实用。 文本提取是处理文档最常用的功能之一。下面的代码演示了如何遍历 PDF 的所有页面,并将每一页的文本拼接起来。 主要用到 PdfTextExtractor 和 PdfTextExtractOptions 这两个辅助类。设置 IsExtractAllText = True 可以确保提取出页面上的大部分可见文本。 很多时候,PDF 里的关键信息其实藏在插图或图表里。Spire.PDF 同样为我们准备了非常便捷的图片提取方案。 通过 PdfImageHelper 帮助类,我们可以直接获取页面上的图片信息,然后一键保存为图片文件(如 .png 格式)。 注意 :如果是扫描件(图片型 PDF),提取出来的其实是一整张扫描图;如果是电子文档生成的 PDF,则能精准提取出嵌入的独立图标或照片。 虽然上述代码已经覆盖了基础需求,但在实际应用中还有几点值得注意: 通过 Spire.PDF for Python,你会发现处理 PDF 文件变得如此简单。无论是读取文件、逐页分析文字,还是把珍贵的插图保存下来,只需要短短的十几行代码就能搞定。这大大提升了文档处理的效率,让你能专注于下一步的数据分析或业务逻辑。 现在就去试试吧,用代码解放你的双手!pip install Spire.PDF1. 加载 PDF 文档
Spire.PDF 非常灵活,支持 从文件路径加载 ,也支持 从数据流(Stream)加载 。from spire.pdf import PdfDocument
# 创建一个 PdfDocument 实例
pdf = PdfDocument()
# 加载本地的 PDF 文档
pdf.LoadFromFile("sample.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 对象已经通过上面的方式加载完成
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. 提取图片
# 获取第一页(索引为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)} 张图片")4. 进阶提示
pageIndex 即可。总结