HTML轉PDF批量導出速度太慢且使用Spire.pdf.dll限制頁簽10后需要開通會員才能使用-做出優化
環境:U9 - UI插件?
需求:選擇需要導出的客戶查詢對應對賬數據批量導出PDF并彈出下載框保存到默認位置
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI;
using System.Web.UI.WebControls;
using UFIDA.U9.AP.Payment;
using UFIDA.U9.Cust.HuaRui.QueryCustomerUIModel;
using UFIDA.U9.FI.AP.Payment.PayBillUIModel;
using UFIDA.U9.UI.PDHelper;
using UFSoft.UBF.AopFrame.Lock;
using UFSoft.UBF.Business;
using UFSoft.UBF.UI;
using UFSoft.UBF.UI.ControlModel;
using UFSoft.UBF.UI.WebControlAdapter;
using UFSoft.UBF.Util.DataAccess;
using static UFIDA.U9.Cust.HuaRui.HuaRExtendUIPlug.TemplateClass;namespace UFIDA.U9.Cust.HuaRui.HuaRExtendUIPlug
{public partial class QueryCustomerUIFormWebPart : UFSoft.UBF.UI.Custom.ExtendedPartBase{private UFIDA.U9.Cust.HuaRui.QueryCustomerUIModel.QueryCustomerUIFormWebPart _part;IUFButton BtnFresh;public override void AfterInit(UFSoft.UBF.UI.IView.IPart Part, EventArgs args){_part = Part as UFIDA.U9.Cust.HuaRui.QueryCustomerUIModel.QueryCustomerUIFormWebPart;if (_part == null)return;#region 添加按鈕IUFButton BtnTransfer = new UFWebButtonAdapter();BtnTransfer.Text = "批量導出";BtnTransfer.AutoPostBack = true;BtnTransfer.ID = "BtnTransfer";BtnTransfer.Width = 100;BtnTransfer.Height = 20;IUFCard card = (IUFCard)_part.GetUFControlByName(_part.TopLevelContainer, "Card0");card.Controls.Add(BtnTransfer);CommonFunction.Layout(card, BtnTransfer, 0, 0);BtnTransfer.Click += new EventHandler(BtnTransfer_Click);#endregionbase.AfterInit(Part, args);}private void BtnTransfer_Click(object sender, EventArgs e){try{_part.OnDataCollect(this);_part.IsDataBinding = true;_part.IsConsuming = true;_part.Model.ClearErrorMessage();if (_part.Model.QueryCustomerLine.SelectRecords.Count == 0){_part.Model.ErrorMessage.Message = "請選擇數據!";return;}#region 生成HTML文件轉PDF復制到指定文件夾string filePathUrl = "";//文件地址var basePath = AppDomain.CurrentDomain.BaseDirectory;string destinationPath = basePath + @"\FileZipTemp\";string destinationPathZip = basePath + @"\FileZip\";string FileName = "貨款對賬單-" + DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();if (!Directory.Exists(destinationPath)){Directory.CreateDirectory(destinationPath);}if (!Directory.Exists(destinationPathZip)){Directory.CreateDirectory(destinationPathZip);}string CustomersName = string.Empty;string str = string.Empty;if (_part.Model.QueryCustomerLine.SelectRecords.Count > 1){foreach (QueryCustomerLineRecord rd in _part.Model.QueryCustomerLine.SelectRecords){str += ",N'" + rd.CustomerName + "'";}str = str.Substring(1);CustomersName = "(CustomersName in (" + str + "))";}else{foreach (QueryCustomerLineRecord rd in _part.Model.QueryCustomerLine.SelectRecords){CustomersName = "(CustomersName = N'" + rd.CustomerName + "')";}}DataSet ds = new DataSet();string procBomName = "Cust_HuaRui_ProvideAccountNew";DataParamList lstBom = new DataParamList();lstBom.Add(DataParamFactory.CreateInput("CustomersName", CustomersName));lstBom.Add(DataParamFactory.CreateInput("ContarctsState", null));lstBom.Add(DataParamFactory.CreateInput("UserID", PDContext.Current.UserCode));lstBom.Add(DataParamFactory.CreateInput("SOBAccountingPeriod", null));DataAccessor.RunSP(procBomName, lstBom, out ds);List<ProvideAccount> ProvideAccount = CommonHelper.DataTable2List<ProvideAccount>(ds.Tables[0]);if (ds.Tables[0].Rows.Count == 0){_part.Model.ErrorMessage.Message = "所選客戶沒有貨款對賬相關內容!";return;}var Customers = ProvideAccount.GroupBy(x => x.CustomersName).Select(x => x.Key).ToList();//調用模版提供的默認實現.--默認實現可能會調用相應的Action.foreach (var customer in Customers){var list = ProvideAccount.Where(x => x.CustomersName == customer).ToList();if (list.Count == 0){continue;}//StringBuilder htmlContent = HtmlTOPdf(list, customer);//string htmlFilePathUrl = destinationPathZip + "\\" + FileName;//if (!Directory.Exists(htmlFilePathUrl))//{// Directory.CreateDirectory(htmlFilePathUrl);//}string pdfFilePathUrl = destinationPath + "\\" + FileName;if (!Directory.Exists(pdfFilePathUrl)){Directory.CreateDirectory(pdfFilePathUrl);}//指定輸出文件路徑//string htmlName = customer + DateTime.Now.ToString("yyyyMMdd") + ".html";string pdfName = customer + DateTime.Now.ToString("yyyyMMdd") + ".pdf";//string htmlPath = Path.Combine(htmlFilePathUrl, htmlName);string pdfPath = Path.Combine(pdfFilePathUrl, pdfName);將HTML內容寫入文件//File.WriteAllText(htmlPath, htmlContent.ToString());從.html文件中獲取HTML字符串//string htmlString = File.ReadAllText(htmlPath);指定插件路徑//string pluginPath = "D:\\yonyou\\U9V60\\Portal\\plugins";設置插件//HtmlConverter.PluginPath = pluginPath;將HTML字符串轉換為PDF//HtmlConverter.Convert(htmlString, pdfPath, true, 100000, new Size(803, 1188), new PdfMargins(0), Spire.Pdf.HtmlConverter.LoadHtmlType.SourceCode);PdfHelper.CreatePDF(pdfPath, list, customer);}#endregion 服務端生成ZIP文件并下載#region 服務端生成ZIP文件并下載string tempZipFilePath = Path.GetTempFileName();string tempZipFilePath1 = "";string tempZipFilePathZip = "";string script = "";try{if (!Directory.Exists(destinationPathZip)){Directory.CreateDirectory(destinationPathZip);}var safePath = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), destinationPath));if (!Directory.Exists(safePath)){Directory.CreateDirectory(safePath);}// 創建臨時ZIP文件//string guid = Guid.NewGuid().ToString();tempZipFilePath1 = Path.Combine(Path.GetTempPath(), FileName + ".zip");System.IO.Compression.ZipFile.CreateFromDirectory(safePath, tempZipFilePath1);File.Copy(tempZipFilePath1, Path.Combine(destinationPathZip, FileName + ".zip"), true);//拼接鏈接script = @"../\FileZip/" + FileName + @"" + ".zip";//延遲刪除文件名稱tempZipFilePathZip = destinationPathZip + FileName + @"" + ".zip";script = string.Format("window.open('{0}'); ", script);AtlasHelper.RegisterAtlasStartupScript((Control)_part.TopLevelContainer, _part.GetType(), "downbload", script, true);}finally{// 清理臨時文件File.Delete(tempZipFilePath);File.Delete(tempZipFilePath1);}#endregion 服務端生成ZIP文件并下載#region 刪除服務端生成的臨時文件夾string folderPath = destinationPath; // 替換為你想要刪除的文件夾路徑try{// 遞歸刪除文件夾及其所有內容Directory.Delete(folderPath, true);var timer = new System.Timers.Timer();timer.Interval = 15000;timer.Elapsed += (sender1, e1) =>{if (!string.IsNullOrEmpty(destinationPathZip))DeleteDirectoryContents(destinationPathZip);timer.Stop();}; timer.Start();//Directory.Delete(destinationPathZip, true);}catch (Exception ex){// 處理任何可能的異常,例如權限問題、路徑不存在等//Console.WriteLine("刪除文件夾時發生錯誤: " + ex.Message);_part.Model.ErrorMessage.Message = "刪除文件夾時發生錯誤!";return;}#endregion 刪除服務端生成的臨時文件夾}catch (Exception ex){_part.Model.ErrorMessage.Message = ex.Message;return;}}public static void DeleteDirectoryContents(string path){foreach (string item in Directory.GetFileSystemEntries(path)){if (File.GetAttributes(item).HasFlag(FileAttributes.Directory)){// 遞歸刪除子目錄DeleteDirectoryContents(item);}else{// 刪除文件File.Delete(item);}}// 刪除空文件夾//Directory.Delete(path);}}
}
需要的幫助類:
1、生成PDF
using iTextSharp.text.pdf.draw;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.IO;
using System.Data;
using UFIDA.U9.Cust.HuaRui.HuaRExtendUI;
using System.Collections.Generic;
using System.Linq;namespace UFIDA.U9.Cust.HuaRui.HuaRExtendUIPlug
{public class PdfHelper{private static void SetImg(PdfWriter writer, string path, float fitWidth, float fitHeight, float absoluteX, float absoluteY){try{Image image = Image.GetInstance(path);image.Alignment = Element.ALIGN_MIDDLE;image.ScaleToFit(fitWidth, fitHeight);image.SetAbsolutePosition(absoluteX, absoluteY);writer.DirectContent.AddImage(image);}catch (Exception e){Console.WriteLine(e.Message);throw e;}}public static void CreatePDF(string fileName, List<ProvideAccount> list, string CustomerName){try{Document document = new Document(new Rectangle(803, 1188), 30F, 30F, 100F, 100F);//fileName = Path.GetFullPath("../..") + @"\PdfFiles\" + fileName + ".pdf";PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));// 定義頁眉和頁腳頁碼事件PDFBuilder builder = new PDFBuilder();builder.CustomerName = CustomerName;//設置頁面監聽事件writer.PageEvent = builder;document.Open();//換行Paragraph newLine = new Paragraph("\n");float tableWidthPercentage = 100f; //表格的整體寬度//表格背景色BaseColor green = new BaseColor(175, 215, 136);BaseColor blue = new BaseColor(148, 170, 214);//所需字體string fontPath = Path.GetFullPath("../..") + @"\fonts\";string timesPath = fontPath + "TIMES.TTF";string timesBdPath = fontPath + "TIMESBD.TTF";BaseFont bf = BaseFont.CreateFont(timesPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);BaseFont blodbf = BaseFont.CreateFont(timesBdPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);Font coverFont = new Font(blodbf, 30, Font.NORMAL);Font titleFont = new Font(blodbf, 16, Font.NORMAL);Font coverTiletFontMarked = new Font(blodbf, 16f, Font.NORMAL, new BaseColor(148, 170, 214));Font textFontBold = new Font(blodbf, 10.5f, Font.NORMAL);Font textFont = new Font(bf, 10.5f, Font.NORMAL);Font textFontGray = new Font(blodbf, 10.5f, Font.NORMAL, new BaseColor(215, 215, 215));Font chapterFont = new Font(blodbf, 14f, Font.NORMAL);//設置字體,支持中文BaseFont bfChinese = BaseFont.CreateFont("C:\\WINDOWS\\Fonts\\msyh.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);iTextSharp.text.Font fontChinese = new iTextSharp.text.Font(bfChinese, 7, iTextSharp.text.Font.NORMAL, new BaseColor(0, 0, 0));//獲取datatable數據DataTable Data = GetDataTableList(list);PdfPTable dataTb = new PdfPTable(Data.Columns.Count);dataTb.SetWidths(new float[] { 0.04f, 0.06f, 0.06f, 0.06f, 0.08f, 0.06f, 0.06f, 0.06f, 0.06f, 0.06f, 0.06f, 0.08f, 0.06f, 0.06f, 0.06f, 0.06f, 0.06f, 0.06f, 0.06f });// 每個單元格占多寬dataTb.WidthPercentage = tableWidthPercentage;dataTb.DefaultCell.BorderColor = BaseColor.LIGHT_GRAY;dataTb.DefaultCell.Padding = 1;dataTb.DefaultCell.BorderWidth = 1;dataTb.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER; // 設置單元格內容水平居中dataTb.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE; // 設置單元格內容垂直居中//將datatable表頭轉換成PDFTable的表頭foreach (DataColumn dc in Data.Columns){dataTb.AddCell(new Phrase(dc.ColumnName.ToString(), fontChinese));}//插入數據for (int i = 0; i < Data.Rows.Count; i++){for (int j = 0; j < Data.Columns.Count; j++){dataTb.AddCell(new Phrase(Data.Rows[i][j].ToString(), fontChinese));}}document.Add(dataTb);document.Add(newLine);document.Close();}catch (Exception ex){throw new Exception("PDF生成失敗-錯誤信息:" + ex.Message);}}/// <summary>/// 創建默認dataTable數據/// </summary>/// <returns></returns>public static DataTable GetDataTableList(List<ProvideAccount> list){DataTable dt = new DataTable();dt.Columns.Add("序號", typeof(string));//添加列 dt.Columns.Add("合同日期", typeof(string));//添加列 dt.Columns.Add("合同編碼", typeof(string));//添加列 dt.Columns.Add("客戶PO號", typeof(string));//添加列 dt.Columns.Add("項目名稱", typeof(string));//添加列 dt.Columns.Add("最終合同金額", typeof(string));//添加列 dt.Columns.Add("出庫金額", typeof(string));//添加列 dt.Columns.Add("已開票金額", typeof(string));//添加列 dt.Columns.Add("已付款金額", typeof(string));//添加列 dt.Columns.Add("應收金額", typeof(string));//添加列 dt.Columns.Add("逾期金額", typeof(string));//添加列 dt.Columns.Add("付款方式", typeof(string));//添加列 dt.Columns.Add("到期時間", typeof(string));//添加列 dt.Columns.Add("發貨完成", typeof(string));//添加列 dt.Columns.Add("合同狀態", typeof(string));//添加列 dt.Columns.Add("業務員", typeof(string));//添加列 dt.Columns.Add("業務單元", typeof(string));//添加列 dt.Columns.Add("歷史合同編號", typeof(string));//添加列 dt.Columns.Add("初始合同金額", typeof(string));//添加列 //循環添加行的數據int num = 1;foreach (var item in list){DataRow dtRow = dt.NewRow();dtRow["序號"] = num;dtRow["合同日期"] = item.CreatedOn;dtRow["合同編碼"] = item.HisCRMDocNo;dtRow["客戶PO號"] = item.CustomerPO;dtRow["項目名稱"] = item.ProjectName;dtRow["最終合同金額"] = item.ContractAmount;dtRow["出庫金額"] = item.ShipSumMoney;dtRow["已開票金額"] = item.InvoicedAmount;dtRow["已付款金額"] = item.BalanceAmount;dtRow["應收金額"] = item.BusinessReceivaBalance;dtRow["逾期金額"] = item.AnticipatoryRight;dtRow["付款方式"] = item.ConfirmTermName;dtRow["到期時間"] = item.EstimatedPayDate;dtRow["發貨完成"] = item.IsCompletedShip;dtRow["合同狀態"] = item.contarctsState;dtRow["業務員"] = item.OperatorsName;dtRow["業務單元"] = item.BusinessUnit;dtRow["歷史合同編號"] = item.CRMDocNo;dtRow["初始合同金額"] = item.OriginalContractAmount;dt.Rows.Add(dtRow);num++;}//添加合計行DataRow dtRow2 = dt.NewRow();dtRow2["序號"] = "";dtRow2["合同日期"] = "";dtRow2["合同編碼"] = "";dtRow2["客戶PO號"] = "";dtRow2["項目名稱"] = "合計";dtRow2["最終合同金額"] = list.Sum(x => x.ContractAmount);dtRow2["出庫金額"] = list.Sum(x => x.ShipSumMoney);dtRow2["已開票金額"] = list.Sum(x => x.InvoicedAmount);dtRow2["已付款金額"] = list.Sum(x => x.BalanceAmount);dtRow2["應收金額"] = list.Sum(x => x.BusinessReceivaBalance);dtRow2["逾期金額"] = list.Sum(x => x.AnticipatoryRight);dtRow2["付款方式"] = "";dtRow2["到期時間"] = "";dtRow2["發貨完成"] = "";dtRow2["合同狀態"] = "";dtRow2["業務員"] = "";dtRow2["業務單元"] = "";dtRow2["歷史合同編號"] = "";dtRow2["初始合同金額"] = list.Sum(x => x.OriginalContractAmount);dt.Rows.Add(dtRow2);return dt;}private static PdfPCell GetCell(Phrase phrase, BaseColor color, int colSpan, int rowSpan){PdfPCell cells = new PdfPCell(phrase);cells.UseAscender = true;cells.MinimumHeight = 20f;cells.HorizontalAlignment = Element.ALIGN_CENTER;cells.VerticalAlignment = 5;cells.Colspan = colSpan;cells.Rowspan = rowSpan;cells.NoWrap = false;if (color != null){cells.BackgroundColor = color;}return cells;}}
}
2、設置頁眉和頁腳
using System;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;namespace UFIDA.U9.Cust.HuaRui.HuaRExtendUIPlug
{public class PDFBuilder : PdfPageEventHelper{public string CustomerName;// 模板public PdfTemplate total;// 基礎字體對象public BaseFont bf = null;// 利用基礎字體生成的字體對象,一般用于生成中文文字public Font fontDetail = null;/// <summary>/// 文檔打開時創建模板/// </summary>/// <param name="writer"></param>/// <param name="document"></param>public override void OnOpenDocument(PdfWriter writer, Document document){total = writer.DirectContent.CreateTemplate(50, 50);// 共 頁 的矩形的長寬高}/// <summary>/// 關閉每頁的時候,寫入頁眉,頁腳。/// </summary>/// <param name="writer"></param>/// <param name="document"></param>public override void OnEndPage(PdfWriter writer, Document document){this.AddPage(writer, document);}public static void SetImg(PdfWriter writer, string path, float fitWidth, float fitHeight, float absoluteX, float absoluteY){try{Image image = Image.GetInstance(path);image.Alignment = Element.ALIGN_MIDDLE;image.ScaleToFit(fitWidth, fitHeight);image.SetAbsolutePosition(absoluteX, absoluteY);writer.DirectContent.AddImage(image);}catch (Exception e){Console.WriteLine(e.Message);throw e;}}/// <summary>/// 加分頁/// </summary>/// <param name="writer"></param>/// <param name="document"></param>public void AddPage(PdfWriter writer, Document document){if (document.PageNumber >=1){string fontPath = Path.GetFullPath("../..") + @"\fonts\";try{string timesPath = fontPath + "TIMES.TTF";bf = BaseFont.CreateFont(timesPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);}catch (Exception e){Console.WriteLine(e.Message);throw e;}BaseFont blodf = null;try{string timesBdPath = fontPath + "TIMESBD.TTF";blodf = BaseFont.CreateFont(timesBdPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);}catch (Exception e){Console.WriteLine(e.Message);throw e;}//設置字體,支持中文BaseFont bfChinese = BaseFont.CreateFont("C:\\WINDOWS\\Fonts\\msyh.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);iTextSharp.text.Font fontChinese = new iTextSharp.text.Font(bfChinese, 16, iTextSharp.text.Font.BOLD, new BaseColor(0, 0, 0));iTextSharp.text.Font fontChinese1 = new iTextSharp.text.Font(bfChinese, 7, iTextSharp.text.Font.NORMAL, new BaseColor(0, 0, 0));//Phrase pageNumberPh = new Phrase("page " + (document.PageNumber - 1), fontChinese);float center = document.PageSize.Right / 2;//頁面的水平中點float headerleft = document.PageSize.GetLeft(50);//頁面的z左邊距float right = document.PageSize.GetRight(90);//頁面的z左邊距float top = document.PageSize.Top - 36;float bottom = document.PageSize.Bottom + 10;float x = document.PageSize.Width / 3;float y = document.PageSize.Top - 30;Phrase header = new Paragraph("浙江華睿科技股份有限公司貨款對賬表", fontChinese);Paragraph header1 = new Paragraph("致:" + CustomerName, fontChinese1);Paragraph header2 = new Paragraph("現將浙江華睿科技股份有限公司與貴單位的經濟業務往來情況知會貴單位,請核對并按照協議約定時間支付貨款,到期貨款請盡快支付", fontChinese1);Paragraph header3 = new Paragraph("貴公司往來貨款情況明細如下:(單位:元 對賬截止:", fontChinese1);Paragraph header4 = new Paragraph(DateTime.Now.ToString("yyyy-MM-dd"), fontChinese1);ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header, x, y, 0); //頁眉標題ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header1, headerleft, y - 20, 0); //頁眉內容ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header2, headerleft, y - 35, 0); //頁眉ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header3, headerleft, y - 50, 0); //頁眉ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_RIGHT, header4, right + 20, y - 50, 0); //頁眉//ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_CENTER, pageNumberPh, center, bottom - 20, 0); //頁碼Phrase pageNumberPh = new Phrase("說明:多頁賬單請蓋騎縫章,謝謝配合", fontChinese1);Paragraph header11 = new Paragraph("浙江華睿科技股份有限公司(蓋章)", fontChinese1);Paragraph header12 = new Paragraph("(蓋章)", fontChinese1);Paragraph header13 = new Paragraph(CustomerName, fontChinese1);Paragraph header21 = new Paragraph("日期:", fontChinese1);Paragraph header22 = new Paragraph("日期:", fontChinese1);Paragraph header31 = new Paragraph("對賬人(簽字):", fontChinese1);Paragraph header32 = new Paragraph("對賬人(簽字):", fontChinese1);Paragraph header41 = new Paragraph("不符原因:", fontChinese1);ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_CENTER, pageNumberPh, center, bottom + 70, 0); //頁腳ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header11, headerleft, bottom + 45, 0); //頁腳內容ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header12, x + 120, bottom + 45, 0); //頁腳內容ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header13, right - 60, bottom + 45, 0); //頁腳內容ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header21, headerleft, bottom + 30, 0); //頁腳內容ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header22, x + 120, bottom + 30, 0); //頁腳內容ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header31, headerleft, bottom + 15, 0); //頁腳內容ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header32, x + 120, bottom + 15, 0); //頁腳內容ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_LEFT, header41, x + 120, bottom, 0); //頁腳內容}}/// <summary>/// 關閉文檔時,替換模板,完成整個頁眉頁腳組件/// </summary>/// <param name="writer"></param>/// <param name="document"></param>public override void OnCloseDocument(PdfWriter writer, Document document){// 關閉文檔的時候,將模板替換成實際的 Y 值,至此,page x of y 制作完畢,完美兼容各種文檔size。total.BeginText();total.SetFontAndSize(bf, 9);// 生成的模版的字體、顏色string foot2 = " " + (writer.PageNumber) + " 頁"; //頁腳內容拼接 如 第1頁/共2頁total.ShowText(foot2);// 模版顯示的內容total.EndText();total.ClosePath();}}
}