博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 添加、获取及删除PDF附件
阅读量:7077 次
发布时间:2019-06-28

本文共 5532 字,大约阅读时间需要 18 分钟。

C# 添加、获取及删除PDF附件

前言

附件在PDF文档中很常见,这些附件可以是PDF或其他类型的文件。在PDF中,附件有两种存在方式,一种是普通的文件附件(document-level file attachment),另一种是注释(annotation)。本文主要介绍如何在C#应用程序中给PDF文档添加附件以及从PDF文档获取附件、删除附件。

我们都知道.NET Framework 本身并没有直接操作PDF的类库,因此在.NET应用程序中操作PDF文档必须要借助第三方组件提供的dll。本文主要使用的是Free Spire.PDF组件的dll。

实现

1.  添加附件

以下代码将介绍两种将文档附加到PDF的方式。一种是将文档作为文件附件添加到PDF,另一种则是将文档作为注释附加到PDF的页面中。

1.1  将文档作为文件附件添加到PDF

该方法是通过调用PdfAttachmentCollection类的Add()方法将文档添加到PdfDocument对象的Attachments集合中。

//加载PDF文档PdfDocument pdf = new PdfDocument("Test.pdf");//加载需要附加的文档PdfAttachment attachment = new PdfAttachment("New.pdf");//将文档添加到原PDF文档的附件集合中pdf.Attachments.Add(attachment);//保存文档pdf.SaveToFile("Attachment1.pdf");

                      

1.2  将文档作为注释(annotation)附加到PDF文档的页面

创建注释时,我们需要用到以下类PdfAttachmentAnnotation:

namespace Spire.Pdf.Annotations{    // Summary:    //     Represents an attachment annotation.    public class PdfAttachmentAnnotation : PdfFileAnnotation    {        //        // Parameters:        //   rectangle:        //     Bounds of the annotation.        //        //   fileName:        //     A string value specifying the full path to the file to be embedded in the        //     PDF file.        public PdfAttachmentAnnotation(RectangleF rectangle, string fileName);        //        //        // Parameters:        //   rectangle:        //     Bounds of the annotation.        //        //   fileName:        //     A string value specifying the full path to the file to be embedded in the        //     PDF file.        //        //   data:        //     A byte array specifying the content of the annotation's embedded file.        //        // Remarks:        //     If both FileName and FileContent are specified, the FileContent takes precedence.        public PdfAttachmentAnnotation(RectangleF rectangle, string fileName, byte[] data);        //        //        // Parameters:        //   rectangle:        //     The rectangle.        //        //   fileName:        //     A string value specifying the full path to the file to be embedded in the        //     PDF file.        //        //   stream:        //     The stream specifying the content of the annotation's embedded file.        //        // Remarks:        //     If both FileName and FileContent are specified, the FileContent takes precedence.        public PdfAttachmentAnnotation(RectangleF rectangle, string fileName, Stream stream);        public override string FileName { get; set; }        //        // Summary:        //     Gets or Sets attachment's icon.        public PdfAttachmentIcon Icon { get; set; }        protected override void Initialize();        protected override void Save();    }}

 代码段:

//加载PDF文档PdfDocument doc = new PdfDocument("Test.pdf");//给文档添加一个新页面PdfPageBase page = doc.Pages.Add();//添加文本到页面PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial", 16f, System.Drawing.FontStyle.Bold));page.Canvas.DrawString("Attachments:", font1, PdfBrushes.CornflowerBlue, new Point(50, 50));//将文档作为注释添加到页面PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial", 12f, System.Drawing.FontStyle.Bold));PointF location = new PointF(52, 80);String label = "Report.docx";byte[] data = File.ReadAllBytes("Report.docx");SizeF size = font2.MeasureString(label);RectangleF bounds = new RectangleF(location, size);page.Canvas.DrawString(label, font2, PdfBrushes.MediumPurple, bounds);bounds = new RectangleF(bounds.Right + 3, bounds.Top, font2.Height / 2, font2.Height);PdfAttachmentAnnotation annotation1 = new PdfAttachmentAnnotation(bounds, "Report.docx", data);annotation1.Color = Color.Purple;annotation1.Flags = PdfAnnotationFlags.NoZoom;annotation1.Icon = PdfAttachmentIcon.Graph;annotation1.Text = "Report.docx";(page as PdfNewPage).Annotations.Add(annotation1);//保存文档doc.SaveToFile("Attachment2.pdf");

 

2.  获取附件

根据附件添加方式的不同,获取附件也分为以下两种相应的方式。

2.1  获取文件附件

获取文件附件时,我们还可以获取附件的信息如文件名,MimeType,描述,创建日期和修改日期等。

//加载PDF文档PdfDocument pdf = new PdfDocument("Attachment1.pdf");//获取文档的第一个文件附件PdfAttachment attachment = pdf.Attachments[0];//获取该附件的信息Console.WriteLine("Name: {0}", attachment.FileName);Console.WriteLine("MimeType: {0}", attachment.MimeType);Console.WriteLine("Description: {0}", attachment.Description);Console.WriteLine("Creation Date: {0}", attachment.CreationDate);Console.WriteLine("Modification Date: {0}", attachment.ModificationDate);//将附件的数据写入到新文档File.WriteAllBytes(attachment.FileName, attachment.Data);Console.ReadKey();

 

2.2  获取注释附件

//加载PDF文档PdfDocument pdf = new PdfDocument("Attachment2.pdf");//实例化一个list并将文档内所有页面的Attachment annotations添加到该listList
attaches = new List
();foreach (PdfPageBase page in pdf.Pages){ foreach (PdfAnnotation annotation in page.AnnotationsWidget) { attaches.Add(annotation as PdfAttachmentAnnotationWidget); }}//遍历list,将附件数据写入到新文档for (int i = 0; i < attaches.Count; i++){ File.WriteAllBytes(attaches[i].FileName, attaches[i].Data);}

 

3.  删除附件

3.1  删除文件附件

//加载PDF文档PdfDocument pdf = new PdfDocument("Attachment1.pdf");//删除文档的所有文件附件for (int i = 0; i < pdf.Attachments.Count; i++){    pdf.Attachments.RemoveAt(i);} //保存文档pdf.SaveToFile("Remove.pdf");

 

3.2  删除注释附件

//加载PDF文档PdfDocument pdf = new PdfDocument("Attachment2.pdf");//删除文档的所有注释附件foreach (PdfPageBase page in pdf.Pages){    for (int i = 0; i < page.AnnotationsWidget.Count; i++)    {        PdfAnnotation annotation = page.AnnotationsWidget[i] as PdfAttachmentAnnotationWidget;        page.AnnotationsWidget.Remove(annotation);                       }}//保存文档pdf.SaveToFile("Result.pdf");

 

总结:

本文只对该dll的部分功能做了简单的介绍,如果需要了解更多内容,可以去或下载dll进行测试。

转载地址:http://necml.baihongyu.com/

你可能感兴趣的文章
【转】如何查看linux版本 如何查看LINUX是多少位
查看>>
openwrt-智能路由器hack技术(1)---"DNS劫持"
查看>>
第十二章 数据备份与还原
查看>>
[redis] Redis 配置文件置参数详解
查看>>
Java 多线程程序设计
查看>>
SQL--类型转换
查看>>
VGG_19 train_vali.prototxt file
查看>>
获取文件或是文件夹的大小和占用空间
查看>>
libssh2进行远程运行LINUX命令
查看>>
Android Gson深入分析
查看>>
Android中自动跳转到系统设置界面
查看>>
树后台数据存储(採用webmethod)
查看>>
Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】
查看>>
memcached系列之二
查看>>
树的左旋与右旋
查看>>
Atitit. 如何判断软件工程师 能力模型 程序员能力模型 项目经理能力模型...
查看>>
每周算法讲堂,二分法
查看>>
2016第8周五
查看>>
CSS3文本溢出显示省略号
查看>>
zookeeper系列之通信模型(转)
查看>>