一个PDF合并操作实现类,利用iTextSharp控件实现(http://www.diybl.com/course/4_webprogram/asp.net/asp_netxl/2008109/149644.html)

实现PDF文档的合并,默认使用A3纸张来合并,可以根据需要修改。

  1. using  iTextSharp.text;
  2. using  iTextSharp.text.pdf;
  3. /// <summary>
  4.      /// pdf文件合并处理类
  5.      /// </summary>
  6.      class  PDFMergeManager
  7.     {
  8.          private  PdfWriter pw;
  9.          private  PdfReader reader;       
  10.          private  Document document;
  11.          private  PdfContentByte cb;
  12.          private  PdfImportedPage newPage;
  13.          /// <summary>
  14.          /// 通过输出文件来构建合并管理,合并到新增文件中,合并完成后调用FinishedMerge方法
  15.          /// </summary>
  16.          /// <param name="sOutFiles"></param>
  17.          public  PDFMergeManager( string  sOutFiles)
  18.         {
  19.             document =  new  Document(PageSize.A3);         
  20.              if  (File.Exists(sOutFiles) && !MessageHelper.ShowQuestion( "对应的文件已经存在,文件目录:/r/n " +sOutFiles+ "/r/n是否覆盖该文件?" ))
  21.             {
  22.                 document =  null ;
  23.                  throw   new  IOException( "用户取消操作" );                
  24.             }
  25.             pw = PdfWriter.GetInstance(document,  new  FileStream(sOutFiles, FileMode.Create));
  26.             document.Open();
  27.             cb = pw.DirectContent;
  28.         }       
  29.          /// <summary>
  30.          /// 通过文件流来合并文件,合并到当前的可写流中,合并完成后调用FinishedMerge方法
  31.          /// </summary>
  32.          /// <param name="sm"></param>
  33.          public  PDFMergeManager(Stream sm)
  34.         {
  35.             document =  new  Document();
  36.             pw = PdfWriter.GetInstance(document, sm);            
  37.             document.Open();
  38.             cb = pw.DirectContent;
  39.         }
  40.          /// <summary>
  41.          /// 合并文件
  42.          /// </summary>
  43.          /// <param name="sFiles">需要合并的文件路径名称</param>
  44.          /// <returns></returns>
  45.          public   bool  MergeFile( string  sFiles)
  46.         {
  47.             reader =  new  PdfReader(sFiles);           
  48.             {
  49.                  int  iPageNum = reader.NumberOfPages;
  50.                  for  ( int  j = 1; j <= iPageNum; j++)
  51.                 {
  52.                     
  53.                     newPage = pw.GetImportedPage(reader, j);
  54.                     Rectangle r = reader.GetPageSize(j);
  55.                     document.SetPageSize(r);
  56.                     document.NewPage();
  57.                     cb.AddTemplate(newPage, 0, 0);                    
  58.                 }
  59.                
  60.             }
  61.             reader.Close();            
  62.              return   true ;
  63.         }
  64.          /// <summary>
  65.          /// 通过字节数据合并文件
  66.          /// </summary>
  67.          /// <param name="pdfIn">PDF字节数据</param>
  68.          /// <returns></returns>
  69.          public   bool  MergeFile( byte [] pdfIn)
  70.         {
  71.             reader =  new  PdfReader(pdfIn);
  72.             {
  73.                  int  iPageNum = reader.NumberOfPages;
  74.                  for  ( int  j = 1; j <= iPageNum; j++)
  75.                 {
  76.                     newPage = pw.GetImportedPage(reader, j);
  77.                     Rectangle r = reader.GetPageSize(j);
  78.                     document.SetPageSize(r);
  79.                     document.NewPage();
  80.                     cb.AddTemplate(newPage, 0, 0);
  81.                 }
  82.             }
  83.             reader.Close();
  84.              return   true ;
  85.         }
  86.          /// <summary>
  87.          /// 通过PDF文件流合并文件
  88.          /// </summary>
  89.          /// <param name="pdfStream">PDF文件流</param>
  90.          /// <returns></returns>
  91.          public   bool  MergeFile(Stream pdfStream)
  92.         {
  93.             reader =  new  PdfReader(pdfStream);
  94.             {
  95.                  int  iPageNum = reader.NumberOfPages;
  96.                  for  ( int  j = 1; j <= iPageNum; j++)
  97.                 {
  98.                     newPage = pw.GetImportedPage(reader, j);
  99.                     Rectangle r = reader.GetPageSize(j);
  100.                     document.SetPageSize(r);
  101.                     document.NewPage();
  102.                     cb.AddTemplate(newPage, 0, 0);
  103.                 }
  104.             }
  105.             reader.Close();
  106.              return   true ;
  107. }
  108.          /// <summary>
  109.          /// 通过网络地址来合并文件
  110.          /// </summary>
  111.          /// <param name="pdfUrl">需要合并的PDF的网络路径</param>
  112.          /// <returns></returns>
  113.          public   bool  MergeFile(Uri pdfUrl)
  114.         {
  115.             reader =  new  PdfReader(pdfUrl);
  116.             {
  117.                  int  iPageNum = reader.NumberOfPages;
  118.                  for  ( int  j = 1; j <= iPageNum; j++)
  119.                 {
  120.                     newPage = pw.GetImportedPage(reader, j);
  121.                     Rectangle r = reader.GetPageSize(j);
  122.                     document.SetPageSize(r);
  123.                     document.NewPage();
  124.                     cb.AddTemplate(newPage, 0, 0);
  125.                 }
  126.             }
  127.             reader.Close();
  128.              return   true ;
  129.         }
  130.          /// <summary>
  131.          /// 完成合并
  132.          /// </summary>
  133.          public   void  FinishedMerge()
  134.         {
  135.              try
  136.             {
  137.                  if  (reader !=  null )
  138.                 {
  139.                     reader.Close();
  140.                 }
  141.                  if  (pw !=  null )
  142.                 {
  143.                     pw.Flush();
  144.                     pw.Close();
  145.                 }
  146.                  if  (document.IsOpen())
  147.                 {
  148.                     document.Close();
  149.                 }
  150.             }
  151.              catch
  152.             {
  153.             }
  154.         }        
  155.     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值