首先需要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簡圖如下:左邊是封面和底頁都加頁碼,右邊是封面和底頁不加頁碼