为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
C# .NET

概述

附件,指随同文件发出的有关文件或物品。在PDF文档中,我们可以添加同类型的或其他类型的文档作为附件内容,而PDF中附件也可以分为两种存在形式,一种是附件以普通文件形式存在,另一种是以注释的形式存在。在下面的示例中介绍了如何分别添加以上两种形式的PDF附件。此外,根据PDF附件的不同添加方式,我们在获取PDF附件信息或删除PDF附件时,也可以分情况来执行操作。

 

要点索引

1.添加PDF附件

   1.1 以普通文档形式添加附件

   1.2 以文档注释形式添加附件

2.获取PDF附件

   2.1 获取文件附件

   2.2 获取注释附件

3.删除PDF附件

   3.1 删除文件附件

   3.2 删除注释附件

 

工具使用

 

代码示例(供参考)

 1.添加PDF附件

   1.1 以普通文档形式添加附件

using Spire.Pdf;
using Spire.Pdf.Attachments; 
namespace AddAttachment_PDF
{ 
   class Program 
      {     
         static void Main(string[] args)     
            {            
            //创建一个PdfDocument类对象,加载测试文档            
            PdfDocument pdf = new PdfDocument();            
            pdf.LoadFromFile("sample.pdf");             
            
            //初始化PdfAttachment类实例,加载需要附加的文档            
            PdfAttachment attachment = new PdfAttachment("New.pdf");             
            
            //将文档添加到原PDF文档的附件集合中            
            pdf.Attachments.Add(attachment);             
            
            //保存并打开文档            
            pdf.SaveToFile("Attachment1.pdf");            
            System.Diagnostics.Process.Start("Attachment1.pdf");        
            }    
      }
}

测试结果:

https://img1.sycdn.imooc.com//5d1abd860001655c09380377.jpg

   1.2 以文档注释形式添加附件

using Spire.Pdf;
using Spire.Pdf.Annotations;
using Spire.Pdf.Graphics;
using System;
using System.Drawing;
using System.IO; 
namespace AddAttachment2
{ 
   class Program  
     {     
        static void Main(string[] args)      
          {            
          //创建一个PdfDocument类对象,加载测试文档            
          PdfDocument doc = new PdfDocument("sample.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 = "sample.docx";            
          byte[] data = File.ReadAllBytes("sample.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, "sample.docx", data);            
          annotation1.Color = Color.Purple;            
          annotation1.Flags = PdfAnnotationFlags.NoZoom;            
          annotation1.Icon = PdfAttachmentIcon.Graph;            
          annotation1.Text = "sample.docx";            
          (page as PdfNewPage).Annotations.Add(annotation1);             
          
          //保存并打开文档            
          doc.SaveToFile("Attachment2.pdf");            
          System.Diagnostics.Process.Start("Attachment2.pdf");        
          }    
      }
  }

测试结果:

https://img1.sycdn.imooc.com//5d1abe81000125c609390354.jpg

2.获取PDF附件

   2.1 获取文件附件

using Spire.Pdf;
using Spire.Pdf.Attachments;
using System;
using System.IO; 
namespace GetAttachment_PDF
{  
  class Program 
     {     
        static void Main(string[] args)     
           {            
           //创建PDF文档,加载测试文件            
           PdfDocument pdf = new PdfDocument();            
           pdf.LoadFromFile("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();        
           }  
      }
 }

测试结果:

https://img1.sycdn.imooc.com//5d1abf14000164cb06750370.jpg

   2.2 获取注释附件

using Spire.Pdf;
using Spire.Pdf.Annotations;
using System.Collections.Generic;
using System.IO; 
namespace GetAttachment2
{  
  class Program 
     {     
        static void Main(string[] args)     
           {            
           //加载PDF文档            
           PdfDocument pdf = new PdfDocument();            
           pdf.LoadFromFile("Attachment2.pdf");             
           
           //实例化一个list并将文档内所有页面的Attachment annotations添加到该list            
           List<PdfAttachmentAnnotationWidget> attaches = new List<PdfAttachmentAnnotationWidget>();            
           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);          
              }        
            }  
        }
   }

注释附件读取结果:

https://img1.sycdn.imooc.com//5d1ac0d00001466007060355.jpg

3.删除PDF附件

   3.1 删除文件附件

using Spire.Pdf; 
namespace DeleteAttachment_PDF
{  
  class Program  
    {     
       static void Main(string[] args)     
          {          
            //加载PDF文档            
            PdfDocument pdf = new PdfDocument();            
            pdf.LoadFromFile("Attachment1.pdf");             
            
            //删除文档的所有文件附件            
            for (int i = 0; i < pdf.Attachments.Count; i++)            
             {                
               pdf.Attachments.RemoveAt(i);           
              }            
           
            //保存并打开文档            
            pdf.SaveToFile("Remove.pdf");            
            System.Diagnostics.Process.Start("Remove.pdf");        
          }   
      }
  }

   3.2 删除注释附件

using Spire.Pdf;
using Spire.Pdf.Annotations; 
namespace DeleteAttachment2
 {  
   class Program   
     {        
       static void Main(string[] args)      
         {           
          //加载PDF文档            
          PdfDocument pdf = new PdfDocument();            
          pdf.LoadFromFile("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");            
            System.Diagnostics.Process.Start("Result.pdf");        
          }    
       }
   }

调试程序后,生成的文档就没有附件了。

 

 (本文完)

如需转载,请注明出处。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
9
获赞与收藏
48

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消