C#- iTextSharp合并PDF,带页码


首先需要3个引用

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

 

完整场景是这样:

1- 我把所有的PDF子文件存放的某个目录下

2-从数据库按条件查询出来的每个实体都带有一个字段,对应的是子pdf存放的位置pdf文件的名称,设为pdfName

3-需要把按条件查询出来的所有子pdf文件合并成一个大的pdf文件,

4-合并的大的pdf文件,需要按要求加上页码

/// <summary>
/// 合并PDF并且产生页码
/// </summary> 
/// <param name="data"></param>
void MergePDFFilesWithPageNumber(List<实体类> data)
{
  string OrderNO = Request.QueryString["OrderNO"];
       
  //最后合成的PDF文件要存放的文件目录
  string reportPath = Server.MapPath("~/upload/Report/");
        
  //最后合成的PDF文件的文件名
  string reportName = "XXXXXX_Report.pdf";
  //最后合并的PDF的完整地址
  string mergePDFFiles = reportPath + reportName;
  //如果目录不存在,创建目录  if (!Directory.Exists(reportPath))
  {
    Directory.CreateDirectory(reportPath);
  }
       
  //如果文件已存在,把原来的删除
  if (File.Exists(reportPath + reportName))   {     File.Delete(reportPath + reportName);   }
  //这是子pfd文件存放的文件目录地址(所有子pdf文件都存放在这个目录下)
  string filePdfPath = Server.MapPath("~/upload/TemplateFile/PDF/" + OrderNO.Replace("*", "-"));   #region 使用iTextSharp合并PDF        
  //在总PDF的存放位置创建一个新的PDF   iTextSharp.text.Document DOC
= new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate());   PdfWriter writer = PdfWriter.GetInstance(DOC, new FileStream(mergePDFFiles, FileMode.Create));   DOC.Open();   iTextSharp.text.Rectangle re;   PdfContentByte cb = writer.DirectContent;   PdfImportedPage newPage;  //页码的字体,大小样式   BaseFont bfHei = BaseFont.CreateFont(@"C:\Windows\Fonts\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);   Font font = new Font(bfHei, 10);   for (int i = 0; i < data.Count; i++)   {
    //读取每个子PDF文件     PdfReader reader
= new PdfReader(filePdfPath + "/" + data[i].pdfName);
    //单个子PDF文件的页数
    int iPageNum = reader.NumberOfPages;

    //将每个子pdf的每一页插入到新创建的总PDF文件里,根据需要增加页面
    for (int j = 1; j <= iPageNum; j++)     {       re = reader.GetPageSize(reader.GetPageN(j));       DOC.SetPageSize(re);       DOC.NewPage();       newPage = writer.GetImportedPage(reader, j);       cb.AddTemplate(newPage, 0, 0);       //增加页码-封面和底页都加       //Phrase header = new Phrase("第" + writer.PageNumber.ToString() + "页", font);       ////页脚显示的位置       //ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_CENTER, header, DOC.PageSize.Width / 2, DOC.Bottom, 0);       //增加页码-封面和底页不加       //if (writer.PageNumber != 1 && !(i == data.Count - 1 && j == iPageNum))       //{       // Phrase header = new Phrase("第" + (writer.PageNumber - 1).ToString() + "页", font);       // //页脚显示的位置       // ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_CENTER, header, DOC.PageSize.Width / 2, DOC.Bottom, 0);       //}       //增加页码-封面不加,没有底页,封面只占一页       if (writer.PageNumber != 1)       {         Phrase header = new Phrase("" + (writer.PageNumber - 1).ToString() + "", font);         //页脚显示的位置         ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_CENTER, header, DOC.PageSize.Width / 2, DOC.Bottom, 0);       }     }   }   DOC.Close();
}

最后的结果是,合并的PDF简图如下:左边是封面和底页都加页码,右边是封面和底页不加页码


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM