使用C#代码从 PDF 文档中提取附件

PDF 附件可以帮助用户查看与文档中特定内容相关的更多信息。PDF 中的附件主要分为两种:文档级附件和注释附件,二者的区别如下。

  • 文档级附件:这类附件直接添加到 PDF 文档中,不会显示在页面上,而是显示在 PDF 阅读器的"附件"面板中。

  • 注释附件:这类附件添加到页面的特定位置,通常以回形针图标的形式显示。查看者可以双击该图标打开附件。

本文将介绍如何使用 C# 和 VB.NET 从 PDF 文档中提取这两种类型的附件。

安装相关库

首先,需要将相关库文件添加为 .NET 项目的引用。你可以下载对应的安装包,并将其中的 DLL 文件添加到项目中;也可以通过 NuGet 包管理器安装所需的库。

cs 复制代码
PM> Install-Package Spire.PDF

使用 C# 和 VB.NET 从 PDF 中提取附件

可以通过 PdfDocument.Attachments 属性获取 PDF 文档中的文档级附件。以下步骤演示如何提取 PDF 中的所有文档级附件,并将其保存到本地文件夹。

  1. 创建一个 PdfDocument 对象。

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

  3. 通过 PdfDocument.Attachments 属性获取文档中的附件集合。

  4. 使用 PdfAttachment.Data 属性获取指定附件的数据。

  5. 将附件数据写入文件,并保存到指定文件夹。

完整示例代码如下:

cs 复制代码
using Spire.Pdf;
using Spire.Pdf.Attachments;
using System.Net.Mail;

namespace ExtractAttachments
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 PdfDocument 对象
            PdfDocument doc = new PdfDocument();

            // 加载包含附件的 PDF 文件
            doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Attachments.pdf");

            // 获取 PDF 文档的附件集合
            PdfAttachmentCollection attachments = doc.Attachments;

            // 指定输出文件夹路径
            string outputFolder = "C:\\Users\\Administrator\\Desktop\\output\\";

            // 遍历附件集合
            for (int i = 0; i < attachments.Count; i++)
            {
                // 将附件写入文件
                File.WriteAllBytes(outputFolder + attachments[i].FileName, attachments[i].Data);
            }
        }
    }
}

使用 C# 和 VB.NET 从 PDF 中提取注释附件

注释附件是与 PDF 页面相关联的元素。若要获取指定页面中的注释,可以使用 PdfPageBase.AnnotationsV2 属性。随后,需要判断某个注释是否为文件附件注释。

以下步骤介绍如何从 PDF 文档中提取注释附件,并将其保存到本地文件夹。

  1. 创建一个 PdfDocument 对象。

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

  3. 通过 PdfDocument.Pages[] 属性获取文档中的指定页面。

  4. 使用 PdfPageBase.AnnotationsV2 属性获取该页面的注释集合。

  5. 判断指定注释是否属于 PdfFileAttachmentAnnotation 类型。如果是,则将注释附件写入文件,并保存到指定文件夹。

完整示例代码如下:

cs 复制代码
using Spire.Pdf;
using Spire.Pdf.Interactive.Annotations;

namespace ExtractAnnotationAttachments
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 PdfDocument 对象
            PdfDocument doc = new PdfDocument();

            // 加载包含附件的 PDF 文件
            doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\AnnotationAttachments.pdf");

            // 指定输出文件夹路径
            string outputFolder = "C:\\Users\\Administrator\\Desktop\\Output\\";

            // 遍历所有页面
            for (int i = 0; i < doc.Pages.Count; i++)
            {
                // 获取页面的注释集合
                PdfAnnotationCollection collection = doc.Pages[i].AnnotationsV2;

                // 遍历所有注释
                for (int j = 0; j < collection.Count; j++)
                {
                    // 判断注释是否为 PdfFileAttachmentAnnotation 类型
                    if (collection[j] is PdfFileAttachmentAnnotation)
                    {
                        // 将注释附件写入文件
                        PdfFileAttachmentAnnotation attachmentAnnotation =
                            (PdfFileAttachmentAnnotation)collection[j];

                        PdfFileSpecification fileSpecification = attachmentAnnotation.FileSpecification;

                        // 获取附件文件名
                        String fileName = Path.GetFileName(fileSpecification.FileName);

                        // 获取附件数据
                        byte[] data = fileSpecification.EmbeddedFile.Data;

                        // 将附件保存到指定文件夹
                        File.WriteAllBytes(outputFolder + fileName, data);
                    }
                }
            }
        }
    }
}

总结

本文介绍了如何使用 C# 从 PDF 文档中提取附件,主要包括文档级附件和注释附件两种类型。

对于文档级附件,可以通过 PdfDocument.Attachments 属性获取附件集合,并遍历集合,将附件数据保存到本地文件夹。对于注释附件,则需要遍历 PDF 文档的各个页面,获取页面中的注释集合,并判断注释是否属于 PdfFileAttachmentAnnotation 类型。确认后,即可提取附件的文件名和数据,并将其保存为本地文件。

通过以上方法,可以根据附件在 PDF 文档中的存储方式,选择合适的提取方法,便于后续查看、管理和处理 PDF 中的嵌入文件。

相关推荐
程序人生8885 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
ComPDFKit1 天前
用 ComPDF DocSlight 提取 PDF 表格:三种样本实测与 Python 接入
开发语言·python·pdf·pdf表格提取
yiyideda1 天前
保单OCR工程实践:PDF/扫描件/纸质拍照三种输入下的字段结构化方案
计算机视觉·pdf·ocr·车险保单识别·保单ocr识别
Lhan.zzZ1 天前
Qt/QML:业务记录单展示、签名确认与 PDF 导出开发
c++·qt·pdf
万祥Python2 天前
2026年6月英语六级真题及答案解析(第一、二、三套全PDF)
pdf
Latchh2 天前
PDF打开不要密码却显示已加密,前端怎么判断
前端·图像处理·人工智能·计算机视觉·pdf
原子延迟2 天前
PDF权限密码和打开密码差在哪?我拿7份文件试了
图像处理·人工智能·计算机视觉·pdf
zxanz12 天前
Gotenberg PDF 转换服务曝出高危 RCE 安全漏洞
pdf
dotnet全栈开发3 天前
火爆全网的《高性价比人生指南》,613条建议最新完整版PDF来了!
pdf