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