
解析 PDF 是指从 PDF 文件中提取结构化或非结构化数据。由于 PDF 结构的复杂性,这可能会很具挑战性。与纯文本或 JSON 和 XML 等结构化格式不同,PDF 以一种不总是遵循线性顺序的方式存储内容。提取文本、表格、图像和元数据需要一个可靠、准确且高效的 Python PDF 解析库。在本文中,我们将学习如何使用 Aspose.PDF for Python 在 Python 中解析 PDF。到本指南结束时,您将能够从 PDF 文档中提取文本、表格和图像。
本文涵盖以下主题:
- Aspose.PDF:最佳 Python PDF 解析库
- 解析 PDF 并提取文本的 Python 代码
- 如何在 Python 中解析 PDF 中的表格
- 解析 PDF 元数据:在 Python 中获取 PDF 文件信息
- 在 Python 中从 PDF 解析图像
- 如何在 Python 中解析 PDF 注释
Aspose.PDF:最佳 Python PDF 解析库
Aspose.PDF for Python 是目前可用的最佳 Python PDF 解析库之一。它提供高准确性,支持结构化数据提取,甚至可以通过 OCR 支持处理扫描的 PDF。
Aspose.PDF 在 Python PDF 解析库中脱颖而出,原因有几个:
- 高精度:精确提取文本和表格。
- 对结构化数据的支持:与表格、图像和元数据协作。
- 无外部依赖:一个轻量级的自包含库。
- 多种输出格式:将 PDFs 转换为文本、XLSX、DOCX、HTML 和图像格式。
- 安全性和可靠性:处理复杂的 PDF 结构而不损坏数据。
与开源替代方案相比,Aspose.PDF 提供了更强大和 功能丰富的解决方案,使其成为企业应用和文档自动化系统的理想选择。
安装与设置
安装 Aspose.PDF for Python 很简单。从 releases 下载它或运行以下 pip 命令:
pip install aspose-pdf
要在 Python 应用程序中开始使用 Aspose.PDF,请导入必要的模块:
import aspose.pdf as ap
提取文本:在 Python 中解析 PDF
从 PDF 中解析文本是 Python PDF 解析库的主要功能之一。我们可以从 PDF 文档的所有页面或特定页面或区域提取文本。在接下来的部分中,我们将学习如何:
- 在 Python 中从 PDF 的所有页面中解析文本
- 从 PDF 的特定页面解析文本
- 从 PDF 中特定区域解析文本
- 从多列 PDF 提取文本
- 增强文本解析与 ScaleFactor
- 解析 PDF 文本:替代方法
在 Python 中从 PDF 的所有页面解析文本
Aspose.PDF for Python 提供了一种有效的方式来使用 Document
和 TextAbsorber
类从 PDF 文档中提取文本。Document
类用于加载 PDF 文件,而 TextAbsorber
类负责从所有页面中提取文本内容。accept()
方法处理每个页面并提取文本,然后可以根据需要存储或显示。
从 PDF 所有页面提取文本的步骤,使用 Python
- 使用
Document
类加载 PDF 文档。 - 创建
TextAbsorber
类的实例以处理文本提取。 - 调用
accept()
方法在pages
集合上,允许TextAbsorber
处理所有页面。 - 通过
TextAbsorber
实例的text
属性检索提取的文本。 - Print the extracted text.
以下代码示例演示如何在 Python 中解析 PDF 所有页面的文本。
# 这个代码示例演示了如何在 Python 中从 PDF 文档的所有页面中提取文本。
import aspose.pdf as ap
# 打开 PDF 文档
document = ap.Document("AddText.pdf")
# 创建文本吸收器
text_absorber = ap.text.TextAbsorber()
# 调用 accept 方法处理所有页面
document.pages.accept(text_absorber)
# 提取文本
extracted_text = text_absorber.text
# 定义文件路径
file_path = "extracted-text.txt"
# 打开文件并以写入模式写入提取的文本
with open(file_path, "w", encoding="utf-8") as tw:
tw.write(extracted_text + "\n") # Write the extracted text with a newline
从 PDF 中的特定页面解析文本
我们还可以通过稍微修改早期的方法,从 PDF 文档的特定页面提取文本。您只需在 Document
对象的所需页面上调用 accept()
方法,而不是处理整个文档。只需使用索引指定页码,Aspose.PDF 将仅从该页面提取文本。当处理大型 PDF 时,这种方法很有用,因为您只需要某个特定部分的数据,从而提高效率和性能。
以下代码示例展示了如何在Python中解析PDF特定页面的文本。
# 此代码示例演示了如何在 Python 中从 PDF 文档的特定页面提取文本。
import aspose.pdf as ap
# 打开 PDF 文档
document = ap.Document("AddText.pdf")
# 创建文本吸收器
text_absorber = ap.text.TextAbsorber()
# 调用 accept 方法以处理所有页面
document.pages[1].accept(text_absorber)
# 检索提取的文本
extracted_text = text_absorber.text
# 定义文件路径
file_path = "extracted-text.txt"
# 以写入模式打开文件并写入提取的文本
with open(file_path, "w", encoding="utf-8") as tw:
tw.write(extracted_text + "\n") # Write the extracted text with a newline
从PDF中的特定区域解析文本
有时,我们可能需要从 PDF 页面特定部分提取文本,而不是从整个文档中检索内容。要针对特定区域,请使用 TextSearchOptions
的 Rectangle
属性。该属性接受一个 Rectangle
对象,定义所需区域的坐标。通过指定此边界,我们可以仅从选定区域提取文本,忽略页面内容的其余部分。
从特定页面区域提取文本的步骤
- 使用
Document
类加载 PDF 文档。 - 创建一个
TextAbsorber
类实例以捕获文档中的文本。 - 定义目标区域使用
TextSearchOptions.Rectangle
,它指定要提取文本的区域。 - 将文本提取应用于特定页面,通过在选定页面上调用
accept()
方法。 - 从
TextAbsorber
的Text
属性中提取文本。 - Process the output as needed.
以下代码示例演示了如何在Python中从PDF页面的特定区域解析文本。
# 此代码示例演示如何使用 Python 从 PDF 文档中的特定区域提取文本。
import aspose.pdf as ap
# 打开 PDF 文档
document = ap.Document("sample.pdf")
# 创建 TextAbsorber 对象以提取文本
absorber = ap.text.TextAbsorber()
absorber.text_search_options.limit_to_page_bounds = True
absorber.text_search_options.rectangle = ap.Rectangle(100, 200, 250, 350, True)
# 接受第第一页的吸收器
document.pages[1].accept(absorber)
# 获取提取的文本
extracted_text = absorber.text
# 定义文件路径
file_path = "extracted-text.txt"
# 以写入模式打开文件并写入提取的文本
with open(file_path, "w", encoding="utf-8") as tw:
tw.write(extracted_text + "\n") # Write the extracted text with a newline
这种方法使您可以精确提取表格单元格、表单字段或页面的任何定义部分的文本,非常适合文档自动化和数据分析。
从多列 PDF 中提取文本
PDF 文档通常包含文本、图像、注释、附件和图表等多种元素。在处理多栏 PDF 时,提取文本并保持原始布局可能会很具有挑战性。
Aspose.PDF for Python 简化了这个过程,允许开发者在提取之前操控文本属性。通过调整字体大小,然后提取文本,您可以获得更清晰和更结构化的输出。以下步骤演示了如何应用这种方法,从多列 PDF 文件中准确提取文本。
在 Python 中从多列 PDF 中提取文本的步骤
- 使用
Document
类加载 PDF 文档。 - 创建
TextFragmentAbsorber
的实例,以定位和提取文档中的单个文本片段。 - 检索所有检测到的文本片段并将其字体大小减小 70% 以提高提取准确性。
- 将修改后的文档存储在内存流中,以避免保存中间文件。
- 从内存流加载 PDF 以处理调整后的文本。
- 使用
TextAbsorber
从修改后的文档中检索结构化文本。 - 将提取的文本保存到
.txt
文件以供后续使用。
以下代码示例展示了如何从多列 PDF 中提取文本,同时保持布局。
# 此代码示例演示了如何在 Python 中从多列 PDF 中提取文本。
import io
import aspose.pdf as ap
# 打开 PDF 文档
document = ap.Document("multi-column-sample.pdf")
# 创建 TextFragmentAbsorber 对象以提取文本
text_fragment_absorber = ap.text.TextFragmentAbsorber()
# 接受第一个页面的吸收器
document.pages.accept(text_fragment_absorber)
# 获取提取的文本片段集合
text_fragment_collection = text_fragment_absorber.text_fragments
# 将字体大小至少减少 70% 以改善文本提取
for text_fragment in text_fragment_collection:
text_fragment.text_state.font_size *= 0.7
# 将修改后的文档保存到内存流中
source_stream = io.BytesIO()
document.save(source_stream)
# 从内存流中重新加载文档
source_stream.seek(0)
dest_document = ap.Document(source_stream)
# 初始化 TextAbsorber 以提取更新的文本
text_absorber = ap.text.TextAbsorber()
dest_document.pages.accept(text_absorber)
extracted_text = text_absorber.text
# 将提取的文本保存到文件中
with open("ExtractColumnsText_out.txt", "w", encoding="utf-8") as file:
file.write(extracted_text)
此方法确保从多列PDF中提取的文本尽可能准确地保留其原始布局。
增强文本解析与缩放因子
Aspose.PDF for Python 允许您解析 PDF 并从特定页面提取文本,具有高级文本提取选项,例如文本格式模式和缩放因子。这些选项帮助准确提取复杂 PDF 中的文本,包括多列文档。
通过使用 ScaleFactor 选项,我们可以微调内部文本网格以提高准确性。1 到 0.1 之间的缩放因子起到字体缩减的作用,帮助正确对齐提取的文本。0.1 到 -0.1 之间的值被视为零,允许根据页面上使用最多的字体的平均字形宽度进行自动缩放。如果未设置 ScaleFactor,则应用默认值 1.0,确保没有缩放调整。对于大规模文本提取,建议使用自动缩放(ScaleFactor = 0
),但手动将 ScaleFactor 设置为 0.5 可以增强复杂布局的结果。然而,不必要的缩放不会影响内容完整性,确保提取的文本保持可靠。
从特定页面提取文本的步骤与缩放因子
- 使用
Document
类加载 PDF 文档。 - 创建
TextAbsorber
的实例以提取文本。 - 将
TextExtractionOptions
设置为纯格式模式以便准确提取。 - 调整
scalefactor
以优化多列 PDF 中的文本识别。 - 在
pages
集合上调用accept()
以提取文本。 - 将提取的内容保存到文本文件中。
# 此代码示例演示了如何使用 Python 从 PDF 文档的特定区域提取文本。
import aspose.pdf as ap
# 打开 PDF 文档
document = ap.Document("sample.pdf")
# 初始化 TextAbsorber 以获取文本提取选项
text_absorber = ap.text.TextAbsorber()
# 设置提取选项
extraction_options = ap.text.TextExtractionOptions(ap.text.TextExtractionOptions.TextFormattingMode.PURE)
extraction_options.scale_factor = 0.5 # Adjusts text recognition for better column detection
text_absorber.extraction_options = extraction_options
# 从指定页面提取文本
document.pages.accept(text_absorber)
# 获取提取的文本
extracted_text = text_absorber.text
# 将提取的文本保存到文件
with open("ExtractTextUsingScaleFactor_out.txt", "w", encoding="utf-8") as file:
file.write(extracted_text)
解析 PDF 中的文本:替代方法
Aspose.PDF for Python 还提供了一种使用 TextDevice
类提取文本的替代方法。请阅读更多关于 extracting text from PDF using the TextDevice 的内容。
如何在 Python 中解析 PDF 中的表格
从PDF中解析表格对于数据分析、自动化和报告至关重要。PDF通常以表格形式包含结构化数据,这使得使用标准文本提取方法进行提取变得困难。幸运的是,Aspose.PDF for Python 提供了一种强大的方式来高精度提取表格,保留其结构和内容。
TableAbsorber
类专门用于检测和提取 PDF 页面中的表格。它处理每个页面,识别表格,并检索单独的行和单元格,同时保持它们的结构。以下是使用 Aspose.PDF for Python 从 PDF 文档中提取表格的步骤。
在 Python 中从 PDF 解析表格的步骤
- 使用
Document
类加载包含表格的 PDF 文件。 - 循环遍历文档的
pages
集合,以单独处理每一页。 - 创建
TableAbsorber
类的实例以检测和提取表格。 - 调用
visit()
方法以识别当前页面上的表格。 - 遍历提取的表格列表,获取行和单元格。
- 访问每个单元格的
textfragments
并使用segments
属性提取文本。 - 保存提取的表格数据以便进一步分析或在控制台中显示。
# 这个代码示例展示了如何在 Python 中从 PDF 文档中提取表格
import aspose.pdf as ap
# 加载 PDF 文件
document = pdf.Document("sample.pdf")
# 处理所有页面
for page in document.pages:
# 初始化 TableAbsorber 对象
absorber = ap.text.TableAbsorber()
# 识别当前页面上的表格
absorber.visit(page)
# 遍历提取的表格
for table in absorber.table_list:
# 遍历表中的所有行
for row in table.row_list:
# 遍历该行中的所有列
for cell in row.cell_list:
# Fetch the text fragments
text_fragment_collection = cell.text_fragments
# 遍历文本片段
for fragment in text_fragment_collection:
# Print the text
print(fragment.text)
通过遵循这些步骤,您可以高效地从 PDF 中提取表格,从而更容易处理和分析结构化数据。
解析 PDF 元数据:在 Python 中获取 PDF 文件信息
在处理 PDF 文件时,通常需要检索元数据,例如作者、创建日期、关键字和标题。Aspose.PDF for Python 通过 Document
类的 Info
属性提供对 DocumentInfo 对象的访问,使这变得简单。这使您可以以编程方式提取重要的文档属性。
解析 PDF 元数据的步骤
- 使用
Document
类打开所需的 PDF 文件。 - 使用
info
属性检索 DocumentInfo 对象。 - 访问特定细节,如作者、创建日期、标题、主题和关键词。
- 打印元数据或将其保存以便进一步处理。
以下 Python 脚本演示了如何在 Python 中检索和显示 PDF 文件中的关键细节:
# 这个代码示例展示了如何在Python中提取文件信息。
import aspose.pdf as ap
# 加载 PDF 文档
document = ap.Document("Sample.pdf")
# 检索文档信息
doc_info = document.info
# 显示文档元数据
print(f"Author: {doc_info.author}")
print(f"Creation Date: {doc_info.creation_date}")
print(f"Keywords: {doc_info.keywords}")
print(f"Modify Date: {doc_info.mod_date}")
print(f"Subject: {doc_info.subject}")
print(f"Title: {doc_info.title}")
从 PDF 文件中使用 Python 解析图像
我们可以解析 PDF 文档,并高效地提取嵌入文档中的图像。我们可以从特定页面提取高质量图像,并将其单独保存以供进一步使用。
每个 PDF 页面将其图像存储在资源集合中,特别是在 XImage
集合内部。要提取图像,请访问所需的页面,通过索引从 Images
集合中检索图像,然后保存它。
从PDF中解析图像的步骤在Python中
- 加载包含图像的 PDF 文件,使用
Document
类。 - 获取您想要提取图像的特定页面。
- 访问页面的
resources
的Images
集合,并指定图像索引。 - 使用流保存提取的图像。
以下代码示例演示了如何在 Python 中从 PDF 中解析图像。
# 这个代码示例展示了如何在 Python 中从 PDF 中提取图片。
import aspose.pdf as ap
# 打开文档
document = ap.Document("Sample.pdf")
# 提取特定图像(第一页的第一张图像)
x_image = document.pages[1].resources.images[1]
# 定义输出图像路径
output_image_path = "OutputImage.jpg"
# 保存提取的图像
with open(output_image_path, "wb") as output_image:
output_image.write(x_image.to_stream().read())
这种方法提供了一种简单有效的方式来从PDF中提取图像,同时保持其质量。使用Aspose.PDF for Python,您可以自动化图像提取,用于各种应用,比如 document processing、数据归档和内容分析。
如何在 Python 中解析 PDF 注释
PDF中的注释通过添加高亮、图形和便签来增强文档交互。每种注释类型都有特定的目的,而Aspose.PDF for Python使得提取它们以进行分析或处理变得简单。
在 Python 中解析 PDF 的文本注释
PDF 文档通常包含文本注释,这些注释作为评论或笔记附加到页面的特定位置。当折叠时,这些注释显示为图标,当展开时,它们会在弹出窗口中显示文本。 PDF 中的每一页都有自己的 Annotations 集合,保存该页面特定的所有注释。通过利用 Aspose.PDF for Python,您可以高效地从 PDF 文件中提取文本注释。
从 PDF 中解析文本注释的步骤
- 加载 PDF 文档使用
Document
类。 - 检索特定页面的
annotations
属性以获取该页面上的所有注释。 - 遍历注释,并过滤出
AnnotationType.TEXT
的注释。 - 检索相关信息,例如注释位置 (
rect
),以便进一步处理或显示。
import aspose.pdf as ap
# 加载 PDF 文档
document = ap.Document("annotations.pdf")
# 遍历第一页上的所有注释
for annotation in document.pages[1].annotations:
if annotation.annotation_type == ap.annotations.AnnotationType.TEXT:
# 打印注释详情
print(f"Title: {annotation.full_name}")
print(f"Contents: {annotation.contents}")
print(f"Annotation Rectangle: {annotation.rect}")
通过遵循这些步骤,您可以在 Python 中有效地提取和处理 PDF 文档中的文本注释。
Explore more about working with PDF Text Annotation in Python by visiting the official guide.
在 Python 中解析 PDF 中的突出显示文本
在许多情况下,您可能只需要从 PDF 中提取高亮文本,而不是全部内容。无论您是在分析重要笔记、总结关键点,还是在自动化文档处理,Aspose.PDF for Python 都可以轻松高效地检索高亮文本。
高亮注释标记重要的文本段落,通常用于评论或学习笔记。您可以使用 HighlightAnnotation
类提取高亮文本及其属性,例如颜色和位置。
我们可以通过遵循上述步骤解析 PDF 文档中的高亮文本注释。然而,我们只需在第 3 步中提到 AnnotationType.HIGHLIGHT
。
以下示例演示了如何从 PDF 中过滤和提取高亮文本。
import aspose.pdf as ap
# 加载 PDF 文档
document = ap.Document("annotations.pdf")
# 循环遍历第一页上的所有注释
for annotation in document.pages[1].annotations:
if annotation.annotation_type == ap.annotations.AnnotationType.HIGHLIGHT:
# 打印注释详情
print(f"Title: {annotation.full_name}")
print(f"Annotation Rectangle: {annotation.rect}")
了解更多关于 working with PDF Highlights Annotation in Python 的信息,请访问官方指南。
在 Python 中解析 PDF 图形注释
图形注释包括用于强调或解释的形状、图形或印章等图形元素。提取这些注释涉及识别 InkAnnotation
或 StampAnnotation
对象,并检索它们的绘图路径或图像。
要解析 PDF 文档中的线注释,请按照之前列出的步骤进行。唯一需要修改的是在第 3 步中指定 AnnotationType.LINE
。
以下示例演示了如何使用 Python 解析 PDF 中的行注释。
import aspose.pdf as ap
# 加载 PDF 文档
document = ap.Document("annotations.pdf")
# 遍历第一页上的所有注释
for annotation in document.pages[1].annotations:
if annotation.annotation_type == ap.annotations.AnnotationType.LINE:
# 打印注释详细信息
print(f"Annotation Rectangle: {annotation.rect}")
如何在 Python 中解析 PDF 链接注释
PDF 中的链接注释允许用户在文档内部无缝导航,打开外部文件或直接从 PDF 访问网页。这些超链接增强了互动性,并通过提供快速访问额外信息的方式改善用户体验。
要从 PDF 中提取链接注释,请遵循之前的相同步骤,但在步骤 3 中,请确保指定 AnnotationType.LINK
。这确保仅检索链接注释。
以下代码示例演示了如何使用 Python 解析 PDF 中的链接注释。
import aspose.pdf as ap
# 加载 PDF 文档
document = ap.Document("annotations.pdf")
# 遍历第一页上的所有注释
for annotation in document.pages[1].annotations:
if annotation.annotation_type == ap.annotations.AnnotationType.LINK:
# 打印注释详情
print(f"Annotation Rectangle: {annotation.rect}")
通过利用 Aspose.PDF for Python,您可以高效地提取和处理链接注释,以满足各种用例,如索引文档或增强导航。
阅读有关 handling Link Annotations in PDFs here 的完整细节。
结论
Aspose.PDF for Python 是最适合开发人员的 Python PDF 解析库,提供可靠、高效和功能丰富的解决方案来解析 PDF 文件。无论您需要解析文本、表格、图像、元数据还是注释,Aspose.PDF 都提供了必要的工具。
尝试提供的代码示例,并开始解析 PDF,简化您在 Python 中的 PDF 解析任务!
如有任何问题或需要进一步帮助,请随时通过我们的 free support forum 联系我们。