C#使用iTextSharp合并pdf,添加页码

原文链接:https://www.cnblogs.com/yongsterZeroZeroOne/p/13738635.html

原文链接:https://www.cnblogs.com/AspDotNetMVC/p/3812157.html

一、合并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();}

二、添加页码

static void SetAllHeaderFooter(string inputPath)
        {

            PdfReader reader=new PdfReader(inputPath);
            PdfStamper stamp=new PdfStamper(reader , new FileStream(Guid.NewGuid().ToString("N")+".pdf" , FileMode.Create));

            for(int i=1 ; i<=reader.NumberOfPages ; i++)
            {
                AddHeaderFooter(stamp , i , reader.NumberOfPages);
            }

            stamp.Close();
            reader.Close();

        }
static void AddHeaderFooter(PdfStamper stamp,int pageNum,int pageCount)
        {

             PdfContentByte cb =stamp.GetOverContent(pageNum);

             Color green=new Color(0 , 131 , 34);
             BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA , BaseFont.CP1252 , BaseFont.NOT_EMBEDDED);

             var header=new Rectangle(50 , 795 , 570 , 815);
             header.BackgroundColor=green;
             header.BorderColor=green;
             cb.Rectangle(header);
             cb.Stroke();

             var footer=new Rectangle(50 , 35 , 570 , 55);
             footer.BackgroundColor=green;
             footer.BorderColor=green;
             cb.Rectangle(footer);
             cb.Stroke();

             cb.SetRGBColorFill(255 , 255 , 255);

             cb.BeginText();
             cb.SetFontAndSize(bf , 12);
             cb.SetTextMatrix(70 , 800);

             cb.ShowText("U als ondernemer");
             cb.SetTextMatrix(550-bf.GetWidthPoint("Resultaten" , 12) , 800);
             cb.ShowText("Resultaten");
             cb.EndText();

             String pageText =string.Format("Page {0} of  {1}",pageNum,pageCount);
             float pageLen = bf.GetWidthPoint(pageText , 12);
             cb.BeginText();
             cb.SetFontAndSize(bf , 12);
             cb.SetTextMatrix(280 , 40);
             cb.ShowText(pageText);
             cb.EndText();
             cb.ResetRGBColorFill();

        }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值