Python添加、查看与管理PDF附件的完整指南

 更新时间:2026年06月26日 08:20:10   作者:用户835629078051  
在日常文档处理工作中,PDF 附件功能有着广泛的应用场景,使用 Python 可以通过编程方式高效地完成 PDF 附件的添加、读取和删除操作,有需要的小伙伴可以了解下

在日常文档处理工作中,PDF 附件功能有着广泛的应用场景。例如,将合同原文与相关证明材料打包在同一个 PDF 文件中,或在技术文档中附上对应的数据文件和图片。手动操作虽然可行,但当需要批量处理大量文档时,效率就会成为瓶颈。

使用 Python 可以通过编程方式高效地完成 PDF 附件的添加、读取和删除操作,适合集成到自动化工作流中。

环境准备

使用 Python 操作 PDF 文档需要安装 Spire.PDF 库:

pip install Spire.PDF

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

添加附件到 PDF 文档

向 PDF 中添加附件有两种常见方式:一种是作为文档级附件(类似邮件中的附件),另一种是作为页面上的附件注释(显示为可点击的图标)。

添加文档级附件

文档级附件会出现在 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 属性:指定附件的 MIME 类型,便于阅读器识别文件类型
  • Attachments.Add():将附件添加到文档的附件集合中

添加附件注释

附件注释会在 PDF 页面中显示为图标(如回形针、图钉),读者可以直接点击打开:

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 文档时,你可能需要查看附件信息或将附件提取出来。

获取所有附件信息

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

以上就是Python添加、查看与管理PDF附件的完整指南的详细内容,更多关于Python操作PDF附件的资料请关注脚本之家其它相关文章!

相关文章

  • Python中XML转JSON、XML转字典代码示例

    Python中XML转JSON、XML转字典代码示例

    大家都知道python的字典和json类似,那么可不可以先将xml转换成json再去做其他的事情呢,下面这篇文章主要给大家介绍了关于Python中XML转JSON、XML转字典的相关资料,需要的朋友可以参考下
    2024-02-02
  • python和anaconda区别以及先后安装的问题详解

    python和anaconda区别以及先后安装的问题详解

    Anaconda(开源的Python包管理器)是一个python发行版,包含了conda、Python等180多个科学包及其依赖项,下面这篇文章主要给大家介绍了关于python和anaconda区别以及先后安装问题的相关资料,需要的朋友可以参考下
    2022-05-05
  • Python 支付整合开发包的实现

    Python 支付整合开发包的实现

    这篇文章主要介绍了Python 支付整合开发包的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 浅析Python中的序列化存储的方法

    浅析Python中的序列化存储的方法

    这篇文章主要介绍了Python中的序列化存储的方法,序列化存储主要针对的是内存和硬盘之间的写入操作,需要的朋友可以参考下
    2015-04-04
  • 处理Selenium3+python3定位鼠标悬停才显示的元素

    处理Selenium3+python3定位鼠标悬停才显示的元素

    这篇文章主要介绍了Selenium3+python3--如何定位鼠标悬停才显示的元素 ,文中通过简单代码给大家介绍的非常详细,需要的朋友可以参考下
    2019-07-07
  • 教你用python将数据写入Excel文件中

    教你用python将数据写入Excel文件中

    Python作为一种脚本语言相较于shell具有更强大的文件处理能力,下面这篇文章主要给大家介绍了关于如何用python将数据写入Excel文件中的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Python api构建tensorrt加速模型的步骤详解

    Python api构建tensorrt加速模型的步骤详解

    小编个人认为python比c++更容易读并且已经有很多包装很好的科学运算库(numpy,scikit等),今天通过本文给大家分享Python api构建tensorrt加速模型的步骤,感兴趣的朋友一起看看吧
    2021-09-09
  • Python如何使用paramiko模块连接linux

    Python如何使用paramiko模块连接linux

    这篇文章主要介绍了Python如何使用paramiko模块连接linux,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • PyCharm创建Django项目的简单步骤记录

    PyCharm创建Django项目的简单步骤记录

    PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,下面这篇文章主要给大家介绍了关于利用PyCharm创建Django项目的简单步骤,需要的朋友可以参考下
    2022-07-07
  • 终止python代码运行的3种方式详析

    终止python代码运行的3种方式详析

    这篇文章主要给大家介绍了关于终止python代码运行的3种方式,python是解释运行的程序,程序进入死循环或者其它异常都会导致程序无法正常结束,需要的朋友可以参考下
    2023-07-07

最新评论