一个PDF合并操作实现类,利用iTextSharp控件实现

来源:互联网 发布:怎么用js隐藏div 编辑:程序博客网 时间:2024/04/28 15:18
实现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.     }