PDF 文档中的批注在协作交流、重点标注和提供额外信息方面起着重要作用。为了更高效地分析 PDF 内容,提取批注是必不可少的,但手动操作往往既繁琐又低效。本文将介绍如何使用 Spire.PDF for Python 在 Python 中提取 PDF 文档的批注,帮助您更快捷、灵活地获取重要信息。
安装 Spire.PDF for Python
本教程需要用到 Spire.PDF for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF
如果您不确定如何安装,请参考:如何在 Windows 中安装 Spire.PDF for Python
从 PDF 文档中提取指定注释
尽管 Adobe Acrobat 提供了一键提取批注的功能,但在处理特定批注时缺乏灵活性。如果您只需提取某一条或几条批注,必须手动查找并复制,操作起来既繁琐又低效,尤其是在处理包含大量批注的 PDF 时。而 Spire.PDF 提供了 PdfAnnotationCollection.get_item() 方法,可精准提取指定批注,使 PDF 批注管理更加高效和灵活。
从 PDF 文档中提取指定注释的具体步骤:
- 创建 PdfDocument 类的对象。
- 使用 PdfDocument.LoadFromFile() 方法从本地存储加载 PDF 文档。
- 通过 PdfDocument.Pages[] 属性获取页面,并使用 PdfPageBase.AnnotationsWidget 属性访问批注集合。
- 创建一个列表来存储批注信息。
- 使用 PdfAnnotationCollection.get_Item() 方法访问指定的批注。
- 将批注的详细信息添加到列表中。
- 将列表保存为文本文件。
下面的代码展示了怎样获取 PDF 文档第二页的第一个注释:
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文件
pdf.LoadFromFile( "/示例文档.pdf")
# 创建一个列表来保存批注信息
sb = []
# 获取 PDF 文档的第二页
page = pdf.Pages[1]
# 访问该页上的批注集合
annotations = page.AnnotationsWidget
# 获取该页面上的第一个批注
annotation = annotations.get_Item(0)
# 将批注的详细信息保存到列表中
sb.append("批注信息:")
sb.append("内容:" + annotation.Text)
modifiedDate = annotation.ModifiedDate.ToString()
sb.append("修改时间:" + modifiedDate)
# 将批注信息保存为文本文件
with open("/获取指定批注.txt", "w", encoding="utf-8") as file:
file.write("\n".join(sb))
pdf.Close()
提取 PDF 文档某页面的所有注释
要从指定的 PDF 页面导出所有批注,可以使用 PdfPageBase.AnnotationsWidget 属性结合 PdfAnnotationCollection.get_Item() 方法。不过,为了确保不遗漏任何批注,需要遍历页面上的所有批注。下面将介绍具体的操作步骤,并提供代码示例供参考。
使用 Python 提取 PDF 页面上所有批注的步骤:
- 创建一个 PdfDocument 实例。
- 使用 PdfDocument.LoadFromFile() 方法从本地读取 PDF 文档。
- 通过 PdfDocument.Pages.AnnotationsWidget 属性访问指定页面的批注集合。
- 创建一个列表用于存储批注信息。
- 遍历指定页面上的所有批注。
- 使用 PdfAnnotationCollection.get_Item() 方法获取每个批注。
- 将批注详情添加到列表中。
- 将列表保存为文本文件。
下方代码展示了如何提取 PDF 文档中第二页的所有批注:
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文件
pdf.LoadFromFile( "/示例文档.pdf")
# 创建一个列表来保存批注信息
sb = []
# 获取第二页的批注集合
annotations = pdf.Pages[1].AnnotationsWidget
# 遍历第二页的批注集合
if annotations.Count > 0:
for i in range(annotations.Count):
# 获取当前的批注
annotation = annotations.get_Item(i)
# 获取批注的详细信息
if isinstance(annotation, PdfPopupAnnotationWidget):
continue
sb.append("批注信息:")
sb.append("内容:" + annotation.Text)
modifiedDate = annotation.ModifiedDate.ToString()
sb.append("修改时间:" + modifiedDate)
# 将批注信息保存为文本文件
with open("/获取页面上的所有批注.txt", "w", encoding="utf-8") as file:
file.write("\n".join(sb))
pdf.Close()
提取 PDF 文档中的所有注释
本指南的最后一部分将演示如何使用 Python 提取 PDF 文档中的所有批注。这个过程与从单个页面导出批注类似,但需要额外遍历每一页,以确保获取所有批注并访问其详细信息。最后,提取的批注信息将被保存到文本文件中,以便进一步使用。
提取 PDF 文档所有批注的步骤:
- 创建 PdfDocument 类的实例。
- 使用 PdfDocument.LoadFromFile() 方法从本地读取 PDF 文档。
- 初始化一个列表来存储批注信息。
- 遍历所有页面,并使用 PdfDocument.Pages.AnnotationsWidget 属性获取批注集合。
- 遍历批注集合,并使用 PdfAnnotationCollection.get_item() 方法提取批注。
- 将批注的详细信息添加到列表中。
- 将列表内容输出为文本文件。
以下是导出 PDF 文件所有批注的示例代码:
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建一个 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文件
pdf.LoadFromFile( "/示例文档.pdf")
# 创建一个列表来保存批注信息
sb = []
# 遍历 PDF 文档中的所有页面
for pageIndex in range(pdf.Pages.Count):
sb.append(f"第 {pageIndex + 1} 页:")
# 访问当前页面的批注集合
annotations = pdf.Pages[pageIndex].AnnotationsWidget
# 遍历批注集合中的所有批注
if annotations.Count > 0:
for i in range(annotations.Count):
# 获取当前页面的批注
annotation = annotations.get_Item(i)
# 跳过无效的批注(空文本和默认日期)
if not annotation.Text.strip() and annotation.ModifiedDate.ToString() == "0001/1/1 0:00:00":
continue
# 提取批注信息
sb.append("批注信息:")
sb.append("内容:" + (annotation.Text.strip() or "N/A"))
modifiedDate = annotation.ModifiedDate.ToString()
sb.append("修改时间:" + modifiedDate)
else:
sb.append("本页没有批注。")
# 在每页之后添加一个空白行
sb.append("")
# 将所有批注保存到文件中
with open("/获取所有批注信息1.txt", "w", encoding="utf-8") as file:
file.write("\n".join(sb))
pdf.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。