在 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 文件中有两类附件:文档级附件和注释级附件。下面的表格说明了这两类附件之间的差异以及它们在 Spire.PDF 中的表示方式。
附件类型 | 表示方式 | 定义 |
文档附件 | PdfAttachment 类 | 以文档级添加的 PDF 附件不会显示在 PDF 页面上,但可以在 PDF 阅读器的“附件”面板中查看。 |
注释附件 | PdfAnnotationAttachment 类 | 作为注释附加的文件可以在页面上或“附件”面板中找到。注释附件在页面上显示为一个纸夹图标;阅读文档时可以双击该图标打开文件。 |
用 Python 从 PDF 中提取文档附件
使用 PdfDocument.Attachments 属性可以获取 PDF 文档中的文档附件。每个附件都有一个 PdfAttachment.FileName 属性,提供指定附件的文件名(包括文件扩展名)。此外,PdfAttachment.Data 属性能帮助开发者访问附件的数据,PdfAttachment.Data.Save() 方法将附件保存到指定文件夹。
使用 Python 从 PDF 中提取文档附件的操作步骤如下:
- 创建一个 PdfDocument 类的对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument.Attachments 属性获取附件的集合。
- 遍历附件集合。
- 从集合中获取指定附件,并使用 PdfAttachment.FileName 属性和 PdfAttachment.Data 属性获取附件的文件名和文件数据。
- 使用 PdfAttachment.Data.Save() 方法将附件保存到指定的文件夹中。
- Python
from spire.pdf import *
from spire.pdf.common import *
# 创建PdfDocument类的对象
doc = PdfDocument()
# 载入PDF文件
doc.LoadFromFile("示例.pdf")
# 获取文档中的文档附件集合
collection = doc.Attachments
# 遍历附件集合
if collection.Count > 0:
for i in range(collection.Count):
# 获取指定附件
attactment = collection.get_Item(i)
# 获取附件的文件名和文件数据
fileName= attactment.FileName
data = attactment.Data
# 保存附件到指定文件夹
data.Save("output/文档附件/" + fileName)
doc.Close()
用 Python 从 PDF 中提取注释附件
注释附件是基于页面的元素。要从特定页面获取注释附件,可以先通过 PdfPageBase.AnnotationsWidget 属性获取页面注释,然后判断注释是否是附件注释,最后将附件注释中的附件保存到指定的文件夹即可。
以下是使用 Python 从 PDF 中提取注释附件的操作步骤:
- 创建一个 PdfDocument 类的对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 遍历文档中的页面。
- 通过 PdfPageBase.AnnotationsWidget 属性获取指定页面的所有注释。
- 遍历注释,并确定指定注释是否是附件注释。
- 如果是附件注释,则使用 PdfAttachmentAnnotation.FileName 属性和 PdfAttachmentAnnotation.Data 属性获取附件的文件名和文件数据。
- 将注释附件保存到指定的文件夹中。
- Python
from spire.pdf import *
from spire.pdf.common import *
# 创建PdfDocument类的对象
doc = PdfDocument()
# 载入PDF文件
doc.LoadFromFile("示例1.pdf")
# 遍历文档页面
for i in range(doc.Pages.Count):
# 获取指定页面
page = doc.Pages.get_Item(i)
# 获取页面上的所有注释
annotationCollection = page.AnnotationsWidget
# 判断页面是否包含注释
if annotationCollection.Count > 0:
# 遍历页面中的注释
for j in range(annotationCollection.Count):
# 获取指定注释
annotation = annotationCollection.get_Item(j)
# 判断指定注释是否为附件注释
if isinstance(annotation, PdfAttachmentAnnotationWidget):
# 获取附件的文件名和文件数据
fileName = annotation.FileName
byteData = annotation.Data
streamMs = Stream(byteData)
# 将附件保存到指定文件夹
streamMs.Save("output/注释附件/" + fileName)
doc.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。