使用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 中的嵌入文件。

相关推荐
xiaolinudao1237 小时前
给pdf文件盖骑缝章的软件有哪些
pdf
hu556679811 小时前
如何使用Adobe Acrobat Pro DC将1页PDF切割为2页,A3变A4打印。
pdf
ComPDFKit12 小时前
PDF转Word后,每行都成一段?先分清断段、文本框和扫描页
pdf·word
Nymph_Zhu17 小时前
pdf转换markdown预览及内容互相点击定位
前端·pdf·vue3·markdown·element-plus
web打印社区17 小时前
Lodop在Edge和双核浏览器-先分清内核
前端·javascript·edge·pdf·ecmascript·html5
是店小二呀18 小时前
敏感PDF不想上传陌生网站?我把Stirling-PDF装进NAS自己处理
pdf
liuchangng18 小时前
React 19 + Vite 6 实战:从教材 PDF 到 866 词间隔重复单词 App
前端·react.js·pdf·vite·开源项目
指针向南2 天前
PDF 转 HTML 免费5种方法,体积0.5%到368%
图像处理·人工智能·计算机视觉·pdf
工具派2 天前
PDF签名贴上去为什么发虚?尺寸、DPI与坐标的边界实测
java·python·pdf
DFT计算杂谈3 天前
GSAS-II X 射线衍射(XRD)数据转换为对分布函数(PDF,Pair Distribution Function)
算法·机器学习·pdf