查看: 132|回复: 3

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

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
在日常文档处理中,PDF附件功能常用于将合同原文与证明材料打包,或是在技术文档中附上数据文件与图片。手动操作在批量处理时效率低下,而借助Python的Spire.PDF库,可以编程完成添加、读取和删除PDF附件的全流程操作,适合集成到自动化工作流中。

环境准备
使用Python操作PDF附件首先需要安装Spire.PDF库,执行以下命令行安装:
  1. pip install Spire.PDF
复制代码
该库提供了完整的PDF文档处理API,包括附件管理功能。

添加文档级附件
文档级附件会出现在PDF阅读器的附件面板中,不会直接显示在页面内容上。下面代码演示如何将Excel文件作为附件添加到PDF:
  1. from spire.pdf.common import *
  2. from spire.pdf import *
  3. # 加载PDF文档
  4. doc = PdfDocument()
  5. doc.LoadFromFile("input.pdf")
  6. # 创建附件对象,参数为显示名称
  7. attachment = PdfAttachment("data.xlsx")
  8. # 以二进制模式读取文件数据
  9. with open("data.xlsx", "rb") as f:
  10.     attachment.Data = f.read()
  11. # 设置描述信息和MIME类型
  12. attachment.Description = "源数据表格"
  13. attachment.MimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
  14. # 将附件添加到文档
  15. doc.Attachments.Add(attachment)
  16. # 保存
  17. doc.SaveToFile("output.pdf")
  18. doc.Close()
复制代码
关键API说明:PdfAttachment构造函数传入附件显示名称;Data属性接收二进制数据;MimeType属性让阅读器识别文件类型;Attachments.Add()将附件加入集合。

添加附件注释(页面图标)
附件注释会在PDF页面中显示为图标(如回形针、图钉),读者可点击打开。以下示例在首页添加一个回形针图标附件:
  1. from spire.pdf.common import *
  2. from spire.pdf import *
  3. doc = PdfDocument()
  4. doc.LoadFromFile("input.pdf")
  5. page = doc.Pages[0]
  6. # 读取附件文件数据
  7. with open("report.pdf", "rb") as f:
  8.     data = Stream(f.read())
  9. # 定义图标位置与大小
  10. bounds = RectangleF(50.0, 100.0, 15.0, 15.0)
  11. annotation = PdfAttachmentAnnotation(bounds, "report.pdf", data)
  12. annotation.Color = PdfRGBColor(Color.get_Teal())
  13. annotation.Icon = PdfAttachmentIcon.Paperclip
  14. annotation.Text = "附件:详细报告"
  15. # 添加到页面注释
  16. page.AnnotationsWidget.Add(annotation)
  17. doc.SaveToFile("output.pdf")
  18. doc.Close()
复制代码
附件注释支持多种图标样式:Paperclip(回形针)、PushPin(图钉)、Graph(图表)、Tag(标签),可根据内容类型选择。

读取与提取附件
当收到包含附件的PDF时,可以遍历附件集合获取基本信息,或提取文件到本地。
获取所有附件信息:
  1. from spire.pdf.common import *
  2. from spire.pdf import *
  3. pdf = PdfDocument()
  4. pdf.LoadFromFile("document_with_attachments.pdf")
  5. collection = pdf.Attachments
  6. if collection.Count > 0:
  7.     for i in range(collection.Count):
  8.         attachment = collection.get_Item(i)
  9.         print(f"文件名: {attachment.FileName}")
  10.         print(f"描述: {attachment.Description}")
  11.         if attachment.CreationDate:
  12.             print(f"创建时间: {attachment.CreationDate}")
  13.         print("---")
  14. pdf.Close()
复制代码
提取附件到本地:
  1. from spire.pdf.common import *
  2. from spire.pdf import *
  3. pdf = PdfDocument()
  4. pdf.LoadFromFile("document_with_attachments.pdf")
  5. collection = pdf.Attachments
  6. # 提取所有附件
  7. for i in range(collection.Count):
  8.     attachment = collection.get_Item(i)
  9.     attachment.Data.Save(attachment.FileName)
  10. # 或者提取单个附件(例如第二个)
  11. attachment = collection.get_Item(1)
  12. attachment.Data.Save(attachment.FileName)
  13. pdf.Close()
复制代码
attachment.Data.Save()方法会自动使用附件原始名称保存文件。

删除附件
清理文档时,可以移除PDF中不需要的附件:
  1. from spire.pdf.common import *
  2. from spire.pdf import *
  3. doc = PdfDocument()
  4. doc.LoadFromFile("document_with_attachments.pdf")
  5. # 删除所有附件
  6. doc.Attachments.Clear()
  7. doc.SaveToFile("cleaned.pdf")
  8. doc.Close()
复制代码
若需删除特定附件,可通过索引获取后逐个处理,或通过文件名匹配后删除。

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

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

使用道具 举报

发表于 1 小时前 | 显示全部楼层

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

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

使用道具 举报

发表于 1 小时前 | 显示全部楼层

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

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

使用道具 举报

发表于 1 小时前 | 显示全部楼层

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-26 10:38 , Processed in 0.032985 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部