PDF 文件作为一种通用且广泛使用的文档格式,常见于合同、发票、报告、电子书等多种场景。虽然 PDF 文件在排版和展示效果上表现出色,但由于其底层结构采用图层、对象和坐标的存储方式,导致从 PDF 中直接提取文本变得复杂且具有挑战性。
尤其面对包含大量页码、嵌套表格或图文混排的 PDF 文件时,传统的复制粘贴方法效率低下且难以保持文本的原始格式和结构。为了实现高效、精准的 PDF 文本提取,开发者通常借助专业的 Python PDF 解析库,通过编程方式自动读取并提取所需内容。
本教程将详细介绍如何使用 Spire.PDF for Python 库在 Python 中轻松 实现 PDF 文本的全面提取,包括全文提取、按页提取、按区域提取、过滤隐藏文本,以及获取文本在页面中的坐标和尺寸信息。通过本教程,您将掌握实用的 PDF 文本提取技巧,快速构建自动化处理和数据分析的解决方案。
目录
为什么要提取PDF文件内容
读取PDF文件内容在诸多应用场景中具有重要意义,例如:
- 将数据提取出来用于统计和业务分析
- 将不可编辑的PDF内容转换为可编辑格式
- 提取文本以便进行多语言转换
安装PDF 解析库 – Spire.PDF for Python
Spire.PDF for Python 是一款功能全面且易于使用的 PDF 处理库,主要用于帮助开发者简化PDF文档创建和操作等任务。它提供了强大的文本提取功能,适用于解析各种结构的 PDF 文档。
安装方式
您可以通过在终端中运行以下命令轻松安装该库:
pip install spire.pdf
如需了解详细安装步骤,请参考此教程:如何在 Windows 上安装 Spire.PDF for Python
提取 PDF 文本(基础示例)
以下示例展示了如何快速提取 PDF 文档中的全部文本。该方法逐页遍历文档,提取每页文本,并将包含空格和换行的完整内容保存到文本文件,便于后续查看和处理。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile('C:/Users/Administrator/Desktop/in.pdf')
# 用于保存提取结果的变量
all_text = ""
# 创建 PdfTextExtractOptions 对象
extractOptions = PdfTextExtractOptions()
# 启用提取全部文本(包含空格)
extractOptions.IsExtractAllText = True
# 遍历每一页并提取文本
for i in range(doc.Pages.Count):
page = doc.Pages[i]
textExtractor = PdfTextExtractor(page)
text = textExtractor.ExtractText(extractOptions)
all_text += text + "\n"
# 将提取的文本写入文件
with open('output/Extracted.txt', 'w', encoding='utf-8') as file:
file.write(all_text)
doc.Close()
自定义文本提取设置
Spire.PDF for Python 提供了多种灵活的文本提取选项,适用于不同场景下的 PDF 内容处理需求。例如,开发者可按页提取文本、限定区域提取内容、提取时过滤隐藏文字,还能获取文本在页面中的坐标位置与尺寸信息,便于精确定位与结构分析。
提取指定页面的文本
通过指定页面索引,开发者可以直接提取目标页的文本,而无需循环遍历整个文档。这种方式可以提高处理效率,适用于仅需要处理多页文档中的特定部分的场景。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile('C:/Users/Administrator/Desktop/in.pdf')
# 启用完整文本提取
extractOptions = PdfTextExtractOptions()
extractOptions.IsExtractAllText = True
# 获取第 1 页
page = doc.Pages[0]
# 创建 PdfTextExtractor 对象
textExtractor = PdfTextExtractor(page)
# 提取文本
text = textExtractor.ExtractText(extractOptions)
# 写入文件
with open('output/Extracted.txt', 'w', encoding='utf-8') as file:
file.write(text)
doc.Close()
获取指定区域的文本
获取指定区域的文本可以帮助用户精准提取所需内容,避免处理无关信息。您可以定义一个矩形区域,只提取该区域内的文本。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile('C:/Users/Administrator/Desktop/in.pdf')
# 获取第 1 页
page = doc.Pages[0]
# 创建 PdfTextExtractor 对象
textExtractor = PdfTextExtractor(page)
# 创建提取选项并设置提取区域
extractOptions = PdfTextExtractOptions()
extractOptions.ExtractArea = RectangleF(90.0, 220.0, 770.0, 130.0)
# 提取文本
text = textExtractor.ExtractText(extractOptions)
# 写入文件
with open('output/ExtractedArea.txt', 'w', encoding='utf-8') as file:
file.write(text)
doc.Close()
提取时忽略隐藏文本
某些 PDF 包含隐藏或不可见的文本,例如为辅助功能或 OCR 层添加的内容。如果您只想提取对用户可见的内容,可以选择忽略这些隐藏文本。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile('C:/Users/Administrator/Desktop/in.pdf')
# 设置提取选项以忽略隐藏文本
extractOptions = PdfTextExtractOptions()
extractOptions.IsShowHiddenText = False
# 获取第 1 页
page = doc.Pages[0]
# 创建 PdfTextExtractor 对象
textExtractor = PdfTextExtractor(page)
# 提取文本
text = textExtractor.ExtractText(extractOptions)
# 写入文件
with open('output/ExcludeHiddenText.txt', 'w', encoding='utf-8') as file:
file.write(text)
doc.Close()
提取文本及其位置(坐标)和尺寸信息
除了获取文本内容外,Spire.PDF还支持提取其在页面中的位置坐标和尺寸信息,以便进行精确批注、内容定位或页面结构分析。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 加载 PDF 文件
doc.LoadFromFile('C:/Users/Administrator/Desktop/in.pdf')
# 遍历所有页面
for i in range(doc.Pages.Count):
page = doc.Pages[i]
# 为当前页面创建 PdfTextFinder 对象
finder = PdfTextFinder(page)
# 查找所有文本片段
fragments = finder.FindAllText()
print(f"第 {i + 1} 页:")
# 遍历文本片段并获取其在页面的位置和尺寸
for fragment in fragments:
text = fragment.Text
rects = fragment.Bounds
print(f'文本:"{text}"')
for rect in rects:
print(f"位置:({rect.X}, {rect.Y}),尺寸:({rect.Width} x {rect.Height})")
print()
doc.Close()
总结
借助 Spire.PDF for Python,开发者可以高效、灵活地从 PDF 文件中提取文本。无论是解析整个文档,还是提取特定页面或区域的内容,该库都提供了强大且简便的解决方案。通过自动化文本提取,您可以显著提升工作效率,优化信息管理流程,并为后续的数据分析与业务决策提供有力支持。
想掌握更多 PDF 处理技巧?欢迎查看 【Python PDF 处理全系列教程】。
常见问题解答(FAQs)
Q1:能否从加密的PDF文件中提取文本?
A1:可以。Spire.PDF for Python 支持在加载PDF时输入正确密码,从而打开受保护的PDF文件并提取其中的文本内容。
Q2:是否支持批量处理多个PDF文件并提取文本?
A2:支持。您可以通过循环遍历指定文件夹中的多个PDF文件,然后利用 Spire.PDF for Python 从每个文件中提取文本。
Q3:Spire.PDF for Python 是否支持从PDF中提取图片和表格?
A3:虽然本教程主要讲解文本提取,Spire.PDF for Python 同样支持从 PDF 中 提取图片和 表格,满足多样化的内容处理需求。
Q4:能否从扫描(基于图片)的PDF中提取文本?
A4:扫描版PDF文本提取需要借助OCR(光学字符识别)技术。Spire.PDF for Python 本身不内置OCR功能,但可以结合 Spire.OCR 库实现 图片转文本的精准识别。
获取免费许可证
如需完整体验 Spire.PDF for Python 的全部功能,可 该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。(30 天无功能限制)。