在 PDF 文件中添加附件的作用是为了增强文件的交互性和功能性。通过添加附件,我们可以将其他文件(如文档、图像、音频或视频)与PDF文件关联起来,并允许用户轻松地访问这些附件。
Spire.PDF for Python 允许您以两种方式附加文件:
- 文档附件: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
Python 在 PDF 中添加文档附件
Spire.PDF for Python 提供的 PdfDocument.Attachments.Add() 方法即可轻松地向“附件”面板添加附件。 以下是详细步骤。
- 创建一个 PdfDocument 对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 基于外部文件创建一个 PdfAttachment 对象。
- 使用 PdfDocument.Attachments.Add() 方法将附件添加到 PDF 文档中。
- 使用 PdfDocument.SaveToFile() 方法保存结果文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建一个空的PDF文档对象
doc = PdfDocument()
# 从指定文件加载PDF文档
doc.LoadFromFile("团建活动方案.pdf")
# 创建一个PdfAttachment对象,指定要添加的附件文件为"参与人员名单.xlsx"
attachment = PdfAttachment("参与人员名单.xlsx")
# 将附件添加到PDF文档中
doc.Attachments.Add(attachment)
# 将修改后的PDF文档保存到新的文件中
doc.SaveToFile("添加文档附件.pdf")
doc.Close()
Python 在 PDF 中的添加注释附件
注释附件将以图标的形式显示在特定页面上。Spire.PDF for Python 提供的 PdfPageBase.AnnotationsWidget.Add() 方法就是向 PDF 中添加注释附件,以下是详细步骤。
- 创建 PdfDocument 对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument. Pages[pageIndex] 属性获取需要添加注释的页面。
- 基于外部文件创建一个 PdfAttachmentAnnotation 对象。
- 使用 PdfPageBase.AnnotationsWidget.Add() 方法将注释附件添加该页面。
- 使用 PdfDocument.SaveToFile() 方法保存结果文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建一个PdfDocumet对象
doc = PdfDocument()
# 从指定文件加载一个PDF文档
doc.LoadFromFile("团建活动方案.pdf")
# 获取文档的第一页
page = doc.Pages[0]
# 定义画刷为红色
brush = PdfBrushes.get_Red()
# 创建PdfTrueTypeFont字体对象,字体名称为"宋体",大小为18.0,加粗,启用unicode
font = PdfTrueTypeFont("宋体", 18.0, PdfFontStyle.Bold, True)
# 设置绘制文本的起始点坐标xP和yP
xP = float(40)
yP = float(page.Canvas.ClientSize.Height - 80)
# 创建字符串格式对象,设置文本对齐方式为左对齐
format1 = PdfStringFormat(PdfTextAlignment.Left)
# 要绘制的文本内容
label = "在此附上详细安排的附件:"
# 在页面上绘制文本
page.Canvas.DrawString(label, font, brush, xP, yP, format1)
# 计算绘制文本所占宽度
textWidth = font.MeasureString(label).Width
# 创建矩形对象bounds,指定注释图标的位置和大小
bounds = RectangleF(float(xP + textWidth + 5), yP, float(20), float(15))
# 创建流对象data,读取附件文件"详细安排.pptx"
data = Stream("详细安排.pptx")
# 创建PDF附件注释对象annotation,指定图标位置、附件文件名和数据
annotation = PdfAttachmentAnnotation(bounds, "详细安排.pptx", data)
# 设置注释的颜色为橙色
annotation.Color = PdfRGBColor(Color.get_Orange())
# 设置注释为只读
annotation.Flags = PdfAnnotationFlags.ReadOnly
# 设置注释的图标为图表类型
annotation.Icon = PdfAttachmentIcon.Graph
# 设置注释的文本内容
annotation.Text = "双击以打开附件。"
# 将注释对象添加到页面的注释集合中
page.AnnotationsWidget.Add(annotation)
# 将修改后的PDF文档保存到新的文件中
doc.SaveToFile("添加注释附件.pdf")
doc.Close()
Python 删除 PDF 中的文档附件
PDF 中的文档附件可以通过 PdfDocument.Attachments 来访问,并且可以使用 PdfAttachmentCollection 的 RemoveAt(attachmentIndex) 方法来删除特定的附件或 Clear() 方法来删除全部附件。以下步骤详细介绍了如何从 PDF 中删除文档附件:
- 创建一个 PdfDocument 对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument.Attachments 获取 PDF 文件中的文档附件集合。
- 使用 PdfAttachmentCollection.RemoveAt() 方法删除特定附件。若要删除全部附件,则可使用 PdfAttachmentCollection. Clear() 方法。
- 使用 PdfDocument.SaveToFile() 方法保存结果文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建一个PdfDocument对象
doc = PdfDocument()
# 从指定文件加载一个PDF文档
doc.LoadFromFile("文档附件.pdf")
# 获取PDF文档中的附件对象集合
attachments = doc.Attachments
# 删除PDF文件的第一个附件(这里索引从0开始)
attachments.RemoveAt(0)
# 删除所有附件
# attachments.Clear()
# 将修改后的PDF文档保存到新的文件中
doc.SaveToFile("删除一个附件.pdf")
doc.Close()
Python 删除 PDF 中的注释附件
注释是基于页面的元素。要获取文档中的所有注释,我们必须先遍历文档的所有页面并获取每一个页面中的所有注释,然后判断某个注释是否是注释附件。最后,使用 Remove() 方法从注释集合中删除注释附件。以下步骤详细介绍了如何从 PDF 中删除注释附件:
- 创建一个 PdfDocument 对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 遍历文档中的页面,并使用 PageBase.AnnotationsWidget 获取该页面的注释集合。
- 判断注释是否为 PdfAttachmentAnnotationWidget 的实例。如果是,则使用PdfAnnotationCollection.Remove() 方法删除注释附件。
- 使用 PdfDocument.SaveToFile() 方法保存结果文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建一个PdfDocument对象
doc = PdfDocument()
# 从指定文件加载一个PDF文档
doc.LoadFromFile("注释附件.pdf")
# 遍历PDF文档中的每一页
for i in range(doc.Pages.Count):
# 获取当前页
pageBase = doc.Pages[i]
# 遍历当前页的注释
for j in range(pageBase.AnnotationsWidget.Count):
# 获取当前注释
annotationWidget = pageBase.AnnotationsWidget[j]
# 检查注释是否属于PdfAttachmentAnnotationWidget类型
if isinstance(annotationWidget, PdfAttachmentAnnotationWidget):
# 从当前页移除该注释
pageBase.AnnotationsWidget.Remove(annotationWidget)
# 将修改后的PDF文档保存到新的文件中
doc.SaveToFile("删除注释附件.pdf")
doc.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。