news 2026/4/16 16:18:21

如何使用C#代码在 PDF 中添加或删除附件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何使用C#代码在 PDF 中添加或删除附件

除文本和图形外,PDF 文件还可以包含作为附件嵌入的完整文件。这使得成套文档的交换更加方便和可靠。Spire.PDF 提供两种方式来添加附件:

  • 文档级附件(Document Level Attachment):附加在 PDF 文档级别的文件不会出现在页面上,只能在 PDF 阅读器的“附件”面板中查看。
  • 注释级附件(Annotation Attachment):文件会被添加到页面的特定位置。此类附件以回形针图标显示在页面上,审阅者可双击图标打开文件。

本文演示如何使用 Spire.PDF for .NET 在 C# 和 VB.NET 中向 PDF 文档添加或删除这两种类型的附件。

安装 Spire.PDF for .NET

首先,您需要将 Spire.PDF for .NET 包中的 DLL 文件作为引用添加到您的 .NET 项目中。您可以通过此链接下载这些 DLL 文件,或通过 NuGet 进行安装。

PM> Install-Package Spire.PDF

在 C# 和 VB.NET 中向 PDF 添加附件

通过使用PdfDocument.Attachments.Add()方法,可以轻松将附件添加到“附件”面板。以下是具体步骤:

  1. 创建一个PdfDocument对象。

  2. 使用PdfDocument.LoadFromFile()方法加载 PDF 文档。

  3. 基于外部文件创建一个PdfAttachment对象。

  4. 使用PdfDocument.Attachments.Add()方法将附件添加到 PDF 中。

  5. 使用PdfDocument.SaveToFile()方法将文档保存为新的 PDF 文件。

示例代码如下:

using Spire.Pdf; using Spire.Pdf.Attachments; namespace AttachFilesToPDF { class Program { static void Main(string[] args) { //创建 PdfDocument 对象 PdfDocument doc = new PdfDocument(); //加载示例 PDF 文件 doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.pdf"); //基于外部文件创建 PdfAttachment 对象 PdfAttachment attachment = new PdfAttachment("C:\\Users\\Administrator\\Desktop\\Data.xlsx"); //将附件添加到 PDF doc.Attachments.Add(attachment); //保存文档 doc.SaveToFile("Attachment.pdf"); } } }

在 C# 和 VB.NET 中向 PDF 添加注释级附件

注释级附件既会显示在“附件”面板中,也会出现在文档的特定页面上。

示例代码如下:

using Spire.Pdf; using Spire.Pdf.Annotations; using Spire.Pdf.Graphics; using System; using System.Drawing; using System.IO; namespace AnnotationAttachment { class Program { static void Main(string[] args) { //创建 PdfDocument 对象 PdfDocument doc = new PdfDocument(); //加载示例 PDF 文件 doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.pdf"); //获取指定页 PdfPageBase page = doc.Pages[0]; //在 PDF 上绘制文字标签 String label = "Here is the report:"; PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 13f, FontStyle.Bold), true); float x = 35; float y = doc.Pages[0].ActualSize.Height - 220; page.Canvas.DrawString(label, font, PdfBrushes.Red, x, y); //基于外部文件创建 PdfAttachmentAnnotation 对象 String filePath = "C:\\Users\\Administrator\\Desktop\\Report.pptx"; byte[] data = File.ReadAllBytes(filePath); SizeF size = font.MeasureString(label); RectangleF bounds = new RectangleF((float)(x + size.Width + 5), (float)y, 10, 15); PdfAttachmentAnnotation annotation = new PdfAttachmentAnnotation(bounds, "Report.docx", data); annotation.Color = Color.Purple; annotation.Flags = PdfAnnotationFlags.Default; annotation.Icon = PdfAttachmentIcon.Graph; annotation.Text = "Click here to open the file"; //将注释附件添加到 PDF 页面 page.AnnotationsWidget.Add(annotation); //保存文档 doc.SaveToFile("Annotation.pdf"); } } }

在 C# 和 VB.NET 中从 PDF 中移除附件

可以通过PdfDocument.Attachments属性访问 PDF 文档中的附件,并使用PdfAttachmentCollection对象的RemoveAt()方法或Clear()方法来删除附件。

示例代码如下:

using Spire.Pdf; using Spire.Pdf.Attachments; namespace RemoveAttachments { class Program { static void Main(string[] args) { //创建 PdfDocument 对象 PdfDocument doc = new PdfDocument(); //加载 PDF 文件 doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Attachment.pdf"); //获取附件集合 PdfAttachmentCollection attachments = doc.Attachments; //删除指定附件 attachments.RemoveAt(0); //删除所有附件 //attachments.Clear(); //保存文件 doc.SaveToFile("DeleteAttachments.pdf"); } } }

在 C# 和 VB.NET 中从 PDF 中移除注释级附件

注释是基于页面的元素。若要获取文档中的所有注释,需要遍历每一页并获取该页上的注释。接着判断某个注释是否为注释级附件,最后通过注释集合的Remove()方法将其移除。

示例代码如下:

using Spire.Pdf; using Spire.Pdf.Annotations; namespace RemoveAnnotationAttachments { class Program { static void Main(string[] args) { //创建 PdfDocument 对象 PdfDocument doc = new PdfDocument(); //加载 PDF 文件 doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Annotation.pdf"); //遍历所有页面 for (int i = 0; i < doc.Pages.Count; i++) { //获取注释集合 PdfAnnotationCollection annotationCollection = doc.Pages[i].AnnotationsWidget; //遍历注释 for (int j = 0; j < annotationCollection.Count; j++) { //判断当前注释是否为 PdfAttachmentAnnotationWidget 类型 if (annotationCollection[j] is PdfAttachmentAnnotationWidget) { //移除注释附件 annotationCollection.Remove((PdfAnnotation)annotationCollection[j]); } } } //保存文件 doc.SaveToFile("DeleteAnnotationAttachments.pdf"); } } }

申请临时许可证

如果您想去除生成文档中的评估提示,或解除功能限制,请申请一个 30 天的试用许可证。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 13:33:26

15、嵌入式系统中的设备驱动、多线程调试与网络编程

嵌入式系统中的设备驱动、多线程调试与网络编程 1. 设备驱动介绍 在特定应用中,Linux 内核提供了三个设备驱动来访问相关的外围设备,具体如下: | 设备驱动 | 功能描述 | | ---- | ---- | | /dev/adc | read() 函数返回通道 0 的数字文本字符串 | | /dev/leds | …

作者头像 李华
网站建设 2026/4/15 14:52:53

如何快速修复MPV在Mac上的色彩失真:4步完整指南

如何快速修复MPV在Mac上的色彩失真&#xff1a;4步完整指南 【免费下载链接】mpv &#x1f3a5; Command line video player 项目地址: https://gitcode.com/GitHub_Trending/mp/mpv 当你在Mac上使用MPV播放高清视频时&#xff0c;是否遇到过画面偏绿、细节模糊或HDR效果…

作者头像 李华
网站建设 2026/4/16 10:40:16

22、嵌入式系统开发:BusyBox、显示设置与U-Boot配置

嵌入式系统开发:BusyBox、显示设置与U-Boot配置 1. BusyBox的使用 BusyBox 可执行文件通常安装在 /bin 目录,这里也是大多数用户级命令行实用程序所在之处。为了让 BusyBox 能模拟不同命令,我们可以创建符号链接。例如,在 /bin 目录下创建如下符号链接: ln -s bus…

作者头像 李华
网站建设 2026/4/16 12:26:30

23、嵌入式Linux系统开发:NOR闪存修复、文件系统创建与硬件定义方法

嵌入式Linux系统开发:NOR闪存修复、文件系统创建与硬件定义方法 1. NOR闪存重编程 当NOR闪存出现问题时,可以通过开发板的JTAG端口对其进行重编程。Mini2440套件中有一个名为JTAG “wiggler”的设备,它可以插入PC的并行端口,并连接到开发板上的10针扁平电缆JTAG端口。需要…

作者头像 李华
网站建设 2026/4/16 12:20:43

62、深入了解CVS:命令行语法、选项、环境变量及日期格式

深入了解CVS:命令行语法、选项、环境变量及日期格式 1. CVS命令行选项 CVS提供了丰富的命令行选项,用于满足不同的操作需求。以下是一些常用选项的介绍: - 通用选项 - -T directory :指定用于存储临时文件的目录,该选项会覆盖环境变量或 .cvsrc 文件中的设置。 …

作者头像 李华
网站建设 2026/4/16 12:17:01

65、版本控制系统:CVS 与 Subversion 详解

版本控制系统:CVS 与 Subversion 详解 在软件开发领域,版本控制系统是不可或缺的工具,它能帮助开发者高效地管理代码的变更、协作开发以及回溯历史版本。本文将详细介绍两种常见的版本控制系统:CVS(Concurrent Versions System)和 Subversion。 1. CVS 命令详解 CVS 是…

作者头像 李华