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

 更新时间:2025年12月15日 08:27:06   作者:2501_93070778  
除文本和图形外,PDF 文件还可以包含作为附件嵌入的完整文件,这使得成套文档的交换更加方便和可靠,本文演示如何使用 Spire.PDF for .NET 在 C# 和 VB.NET 中向 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");
        }
    }
}

到此这篇关于使用C#代码在PDF中添加或删除附件的文章就介绍到这了,更多相关C# PDF添加或删除附件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现读取和设置文件与文件夹的权限

    C#实现读取和设置文件与文件夹的权限

    这篇文章主要为大家详细介绍了如何使用C#实现读取和设置文件与文件夹的权限,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • 一文揭秘C#中资源泄漏的3种隐蔽场景排查与解决

    一文揭秘C#中资源泄漏的3种隐蔽场景排查与解决

    Dispose 不释放 的坑,远比你想象的要深,这篇文章就从 6 年 .NET 开发的经验出发,给你揭露 3 种最隐蔽、最容易踩的资源泄漏场景,希望对大家有所帮助
    2026-04-04
  • C#使用ThoughtWorks.QRCode生成二维码

    C#使用ThoughtWorks.QRCode生成二维码

    ThoughtWorks.QRCode是一款功能强劲的动态链接库,能够为.net应用生成二维码,这篇文章主要为大家详细介绍了C#使用ThoughtWorks.QRCode生成二维码的具体方法,需要的可以参考下
    2024-04-04
  • 深入解析C#中的交错数组与隐式类型的数组

    深入解析C#中的交错数组与隐式类型的数组

    这篇文章主要介绍了深入解析C#中的交错数组与隐式类型的数组,隐式类型的数组通常与匿名类型以及对象初始值设定项和集合初始值设定项一起使用,需要的朋友可以参考下
    2016-01-01
  • 基于C#制作一个颜色拾取器

    基于C#制作一个颜色拾取器

    这篇文章主要为大家详细介绍了如何基于C#制作一个颜色拾取器,可以获取屏幕上任意位置像素的色值,文中的示例代码讲解详细,有需要的小伙伴可以了解下
    2024-01-01
  • Unity的AssetPostprocessor Model动画函数使用案例深究

    Unity的AssetPostprocessor Model动画函数使用案例深究

    这篇文章主要介绍了Unity的AssetPostprocessor Model动画函数使用案例的深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • C#使用Windows自带功能将文件夹打包为ZIP

    C#使用Windows自带功能将文件夹打包为ZIP

    文章介绍了如何在C#中使用System.IO.Compression命名空间将文件夹打包为ZIP文件,并提供了基本用法、高级选项、异常处理、引用命名空间和完整示例,还提到了其他注意事项,如使用第三方库和异步处理,需要的朋友可以参考下
    2026-02-02
  • C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

    C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

    这篇文章主要介绍了C#实现压缩和解压缩的方法,结合具体实例形式分析了Gzip和Zip两种压缩操作实现方法,需要的朋友可以参考下
    2017-06-06
  • C# 最基础知识介绍--多态

    C# 最基础知识介绍--多态

    在本篇文章将对大家介绍得是在C#中最常用的几种概念,即:多态,下面文章内容将对大家详细介绍这几种常用得状态
    2021-09-09
  • DevExpress SplitContainerControl用法总结

    DevExpress SplitContainerControl用法总结

    这篇文章主要介绍了DevExpress SplitContainerControl用法,对初学者有一定的参考借鉴价值,需要的朋友可以参考下
    2014-08-08

最新评论