C# 添加、获取及删除PDF附件
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); 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. string fileName,1)">byte[] data); The rectangle. stream: The stream specifying the content of the annotation's embedded file. fileName,Stream stream); override string FileName { get; set; } Summary: Gets or Sets attachment's icon. public PdfAttachmentIcon Icon { ; } protected void Initialize(); Save(); } } ?代码段: 加载PDF文档 PdfDocument doc = 给文档添加一个新页面 PdfPageBase page = doc.Pages.Add(); 添加文本到页面 PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font(Arial,16f,System.Drawing.FontStyle.Bold)); page.Canvas.DrawString(Attachments:",font1,PdfBrushes.CornflowerBlue,1)">new Point(50,50)); 将文档作为注释添加到页面 PdfTrueTypeFont font2 = new PointF(52,1)">80); String label = Report.docx; byte[] data = File.ReadAllBytes(); 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 / 2new PdfAttachmentAnnotation(bounds,data); annotation1.Color = Color.Purple; annotation1.Flags = PdfAnnotationFlags.NoZoom; annotation1.Icon = PdfAttachmentIcon.Graph; annotation1.Text = ; (page as PdfNewPage).Annotations.Add(annotation1); 保存文档 doc.SaveToFile(Attachment2.pdf"); ? 2.? 获取附件 根据附件添加方式的不同,获取附件也分为以下两种相应的方式。 2.1? 获取文件附件 获取文件附件时,我们还可以获取附件的信息如文件名,MimeType,描述,创建日期和修改日期等。 获取文档的第一个文件附件 PdfAttachment attachment = pdf.Attachments[0]; 获取该附件的信息 Console.WriteLine(Name: {0}MimeType: {0}Description: {0}Creation Date: {0}Modification Date: {0}将附件的数据写入到新文档 File.WriteAllBytes(attachment.FileName,attachment.Data); Console.ReadKey(); 2.2? 获取注释附件 实例化一个list并将文档内所有页面的Attachment annotations添加到该list List<PdfAttachmentAnnotationWidget> attaches = new List<PdfAttachmentAnnotationWidget>(); foreach (PdfPageBase page in pdf.Pages) { foreach (PdfAnnotation annotation page.AnnotationsWidget) { attaches.Add(annotation PdfAttachmentAnnotationWidget); } } 遍历list,将附件数据写入到新文档 for (int i = 0; i < attaches.Count; i++) { File.WriteAllBytes(attaches[i].FileName,attaches[i].Data); } ? 3.? 删除附件 3.1? 删除文件附件 删除文档的所有文件附件 0; i < pdf.Attachments.Count; i++) { pdf.Attachments.RemoveAt(i); } Remove.pdf"); ? 3.2? 删除注释附件 删除文档的所有注释附件 0; i < page.AnnotationsWidget.Count; i++) { PdfAnnotation annotation = page.AnnotationsWidget[i] PdfAttachmentAnnotationWidget; page.AnnotationsWidget.Remove(annotation); } } Result.pdf"); ? 总结: 本文只对该dll的部分功能做了简单的介绍,如果需要了解更多内容,可以去官网或NuGet下载dll进行测试。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |