当前位置: 首页 > news >正文

Python操作PDF附件添加查看与管理指南

在日常文档处理工作中,PDF 附件功能有着广泛的应用场景。例如,将合同原文与相关证明材料打包在同一个 PDF 文件中,或在技术文档中附上对应的数据文件和图片。手动操作虽然可行,但当需要批量处理大量文档时,效率就会成为瓶颈。
使用 Python 可以通过编程方式高效地完成 PDF 附件的添加、读取和删除操作,适合集成到自动化工作流中。
环境准备
使用 Python 操作 PDF 文档需要安装 Spire.PDF 库:
bash 代码解读复制代码pip install Spire.PDF

这个库提供了完整的 PDF 文档处理 API,包括附件管理功能。
添加附件到 PDF 文档
向 PDF 中添加附件有两种常见方式:一种是作为文档级附件(类似邮件中的附件),另一种是作为页面上的附件注释(显示为可点击的图标)。
添加文档级附件
文档级附件会出现在 PDF 阅读器的附件面板中,不会直接显示在页面内容上:
python 代码解读复制代码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 属性:指定附件的 MIME 类型,便于阅读器识别文件类型
Attachments.Add():www.ycsjb.com将附件添加到文档的附件集合中

添加附件注释
附件注释会在 PDF 页面中显示为图标(如回形针、图钉),读者可以直接点击打开:
python 代码解读复制代码from spire.pdf.common import *
from spire.pdf import *

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

# 读取要附加的文件数据
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 文档时,你可能需要查看附件信息或将附件提取出来。
获取所有附件信息
python 代码解读复制代码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()

提取附件到本地
python 代码解读复制代码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 中不再需要的附件:
python 代码解读复制代码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 在 PDF 文档中添加、提取和删除附件的基本方法。这些操作可以通过 Spire.PDF 的 API 轻松完成,适合嵌入到批量文档处理流程中。在此基础上,还可以进一步结合其他 PDF 操作(如页面合并、文本提取等)构建更复杂的文档自动化方案。

http://www.jsqmd.com/news/1084175/

相关文章:

  • 040、CCA 上下文坐标注意力的 YOLOv11 实现:扩大坐标信息感受野的改进
  • Three.js 赛博朋克风格 UI:3D 渲染管线与着色器艺术的工程实战
  • OpenAI 联合博通推出 Jalapeño 芯片,2026 年底前投入使用或减少对英伟达依赖
  • 8大网盘下载限速终结者:本地化直链获取工具深度解析
  • pytorch17->一张实际图片的识别实战
  • 为什么AI只引用2-7个网站?内容结构优化才是GEO的隐藏密码!
  • volatile 这个坑,很多 STM32 新手都踩过
  • 03_Agent智能体与LangGraph
  • 出版商联盟指控 OpenAI 与微软:未经授权用作品训练 AI,版权诉讼再升级!
  • DESIGN.md:为编码代理提供设计系统持久结构化理解,支持多格式转换
  • AI 辅助智能合约安全审计:从静态分析到 LLM 漏洞检测的工程实战
  • 抖音音频下载终极指南:5分钟学会免费提取抖音热门背景音乐
  • 如何校准LED显示屏色彩均匀性以消除视觉马赛克
  • 华强北内存降价,资本市场却疯涨!内存缺货真相究竟几何?
  • Navicat Mac版无限试用期终极指南:3种方法实现永久免费使用
  • 【2026】超详细GraphPad Prism 10安装保姆级教程,永久免费使用,科研绘图和数据分析指南,看完这一篇就够了
  • 3分钟轻松搞定!为Royal TSX添加完美中文汉化包,告别英文界面困扰
  • 高通近 40 亿美元收购 Modular,拓展业务进军 AI 与数据中心市场
  • 科技企业如何通过智能化工具快速识别行业技术趋势并优化研发方向?
  • AWVS实战:构建自动化扫描与手动验证的Web漏洞评估闭环
  • +1毛也是首选!申通这家五星网点的底气
  • JMeter性能测试从入门到实战:核心组件、脚本编写与结果分析
  • Anuttacon研究模拟多智能体社会系统Agentopia:让AI更有人味儿,但仍面临挑战
  • Kill-Doc:浏览器脚本实现一站式文档下载解决方案
  • 工信局如何利用数智工具判断技术改造项目的可行性?
  • StarRailAssistant:解放双手的崩坏星穹铁道智能助手完全指南
  • ComfyUI ControlNet Aux完全指南:解锁40+图像预处理节点的终极AI绘画控制方案
  • JMeter压测实战:秒杀场景下401与200异常问题的深度排查与优化
  • 如何彻底解决游戏按键冲突:Hitboxer智能按键重映射完全指南
  • Deep3D深度解析:实时端到端2D转3D视频转换技术架构与实现原理