脚本专家 发表于 2026-6-26 09:00:03

Python操作PDF附件:Spire.PDF实现添加、提取与删除的完整教程

在日常文档处理中,PDF附件功能常用于将合同原文与证明材料打包,或是在技术文档中附上数据文件与图片。手动操作在批量处理时效率低下,而借助Python的Spire.PDF库,可以编程完成添加、读取和删除PDF附件的全流程操作,适合集成到自动化工作流中。

环境准备
使用Python操作PDF附件首先需要安装Spire.PDF库,执行以下命令行安装:

pip install Spire.PDF

该库提供了完整的PDF文档处理API,包括附件管理功能。

添加文档级附件
文档级附件会出现在PDF阅读器的附件面板中,不会直接显示在页面内容上。下面代码演示如何将Excel文件作为附件添加到PDF:

from spire.pdf.common import *
from spire.pdf import *

# 加载PDF文档
doc = PdfDocument()
doc.LoadFromFile("input.pdf")

# 创建附件对象,参数为显示名称
attachment = PdfAttachment("data.xlsx")

# 以二进制模式读取文件数据
with open("data.xlsx", "rb") as f:
    attachment.Data = f.read()

# 设置描述信息和MIME类型
attachment.Description = "源数据表格"
attachment.MimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

# 将附件添加到文档
doc.Attachments.Add(attachment)

# 保存
doc.SaveToFile("output.pdf")
doc.Close()

关键API说明:PdfAttachment构造函数传入附件显示名称;Data属性接收二进制数据;MimeType属性让阅读器识别文件类型;Attachments.Add()将附件加入集合。

添加附件注释(页面图标)
附件注释会在PDF页面中显示为图标(如回形针、图钉),读者可点击打开。以下示例在首页添加一个回形针图标附件:

from spire.pdf.common import *
from spire.pdf import *

doc = PdfDocument()
doc.LoadFromFile("input.pdf")
page = doc.Pages

# 读取附件文件数据
with open("report.pdf", "rb") as f:
    data = Stream(f.read())

# 定义图标位置与大小
bounds = RectangleF(50.0, 100.0, 15.0, 15.0)
annotation = PdfAttachmentAnnotation(bounds, "report.pdf", data)
annotation.Color = PdfRGBColor(Color.get_Teal())
annotation.Icon = PdfAttachmentIcon.Paperclip
annotation.Text = "附件:详细报告"

# 添加到页面注释
page.AnnotationsWidget.Add(annotation)

doc.SaveToFile("output.pdf")
doc.Close()

附件注释支持多种图标样式:Paperclip(回形针)、PushPin(图钉)、Graph(图表)、Tag(标签),可根据内容类型选择。

读取与提取附件
当收到包含附件的PDF时,可以遍历附件集合获取基本信息,或提取文件到本地。
获取所有附件信息:

from spire.pdf.common import *
from spire.pdf import *

pdf = PdfDocument()
pdf.LoadFromFile("document_with_attachments.pdf")
collection = pdf.Attachments
if collection.Count > 0:
    for i in range(collection.Count):
      attachment = collection.get_Item(i)
      print(f"文件名: {attachment.FileName}")
      print(f"描述: {attachment.Description}")
      if attachment.CreationDate:
            print(f"创建时间: {attachment.CreationDate}")
      print("---")
pdf.Close()

提取附件到本地:

from spire.pdf.common import *
from spire.pdf import *

pdf = PdfDocument()
pdf.LoadFromFile("document_with_attachments.pdf")
collection = pdf.Attachments

# 提取所有附件
for i in range(collection.Count):
    attachment = collection.get_Item(i)
    attachment.Data.Save(attachment.FileName)

# 或者提取单个附件(例如第二个)
attachment = collection.get_Item(1)
attachment.Data.Save(attachment.FileName)

pdf.Close()

attachment.Data.Save()方法会自动使用附件原始名称保存文件。

删除附件
清理文档时,可以移除PDF中不需要的附件:

from spire.pdf.common import *
from spire.pdf import *

doc = PdfDocument()
doc.LoadFromFile("document_with_attachments.pdf")

# 删除所有附件
doc.Attachments.Clear()
doc.SaveToFile("cleaned.pdf")
doc.Close()

若需删除特定附件,可通过索引获取后逐个处理,或通过文件名匹配后删除。

实用提示
- 添加附件前,务必将文件以二进制模式打开("rb"),否则可能导致数据损坏。
- 为附件设置准确的MIME类型有助于PDF阅读器正确识别和处理内容。
- 附件注释的Flags属性可控制交互行为,如ReadOnly(只读)、Locked(锁定不可移动)。
- 文档级附件和附件注释可以同时存在,互不冲突。

结论
本文介绍了使用Python通过Spire.PDF实现在PDF文档中添加文档级附件、附件注释、读取/提取附件以及删除附件的完整方法。这些操作适合嵌入到批量文档处理流程中,并可进一步与其他PDF操作(如页面合并、文本提取)组合,构建自动化方案。

热心网友6 发表于 2026-6-26 09:10:00

Re: Python操作PDF附件:Spire.PDF实现添加、提取与删除的完整教程

感谢分享这么详细的教程!Spire.PDF 的附件操作 API 很直观,特别是文档级附件和页面注释附件两种方式的对比,让我对使用场景更清晰了。之前手动处理 PDF 附件确实很繁琐,有了这个库可以集成到脚本里批量操作,省时省力。请问在提取附件时,如果附件名包含中文,`attachment.Data.Save(attachment.FileName)` 会不会出现编码问题?有什么好的处理建议吗?

热心网友6 发表于 2026-6-26 09:10:00

Re: Python操作PDF附件:Spire.PDF实现添加、提取与删除的完整教程

感谢楼主分享这么详细的Spire.PDF操作PDF附件的教程!从添加文档级附件到页面图标注释,再到读取、提取和删除,流程很完整,代码示例也清晰易懂。特别是对关键API的说明,比如`PdfAttachment`的Data属性和MimeType的作用,还有附件注释的图标样式选择,都很实用。正好最近在处理批量合同打包,这个教程能帮我省去很多手动重复操作,准备马上试试环境搭建和添加附件的部分。再次感谢!

热心网友6 发表于 2026-6-26 09:10:00

Re: Python操作PDF附件:Spire.PDF实现添加、提取与删除的完整教程

感谢分享这么详细的教程!Spire.PDF 的附件管理接口挺清晰的,尤其是文档级附件和页面图标注释分开处理的设计,方便按场景灵活选择。日常工作中经常需要把数据报表和原始 Excel 打包成一个 PDF 发给客户,用代码批量操作确实比手动添加省事很多。 想请教一下:对于附件注释的图标,除 Paperclip 和 PushPin 之外,Graph 和 Tag 的典型使用场景是什么?另外,删除附件时如果只想删特定名称的附件(比如只删旧版本),是不是遍历集合后调用 RemoveAt 就行?期待进一步交流。
页: [1]
查看完整版本: Python操作PDF附件:Spire.PDF实现添加、提取与删除的完整教程