查了下 轉PDF的各種框架 發現大部分都是收費的。 發現一款免費的iTextSharp 就想玩一下 只是簡單做個HTML 轉PDF 沒有過深的探究。 首先 我在項目中引入iTextSharp 還是老方法 要麼 NuGet上下載 或者 直接命令 然後在項目中建了一個HTML 裡面就是一些簡單的標簽 和 ...
查了下 轉PDF的各種框架 發現大部分都是收費的。 發現一款免費的iTextSharp 就想玩一下
只是簡單做個HTML 轉PDF 沒有過深的探究。
首先 我在項目中引入iTextSharp 還是老方法 要麼 NuGet上下載 或者 直接命令
然後在項目中建了一個HTML 裡面就是一些簡單的標簽 和一些占位符
然後建了個PDF幫助類 裡面實現具體轉換的方法
public class PDFHelp { public byte[] ConvertHtmlTextToPDF(string htmltext) { if (string.IsNullOrEmpty(htmltext)) { return null; } //避免htmlText沒有任何html tag標簽的純文字時,轉PDF時會掛掉,所以一律加上<p>標簽 //htmlText = "<p>" + htmltext + "</p>"; MemoryStream stream = new MemoryStream(); byte[] data = Encoding.UTF8.GetBytes(htmltext); MemoryStream msInput = new MemoryStream(data); Document doc = new Document(); PdfWriter writer = PdfWriter.GetInstance(doc, stream); //指定文件預設縮放標準100% PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, doc.PageSize.Height, 1f); doc.Open(); //使用XMLWorkerHelper把Html parse到PDF XMLWorkerHelper .GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8, new UnicodeFontFactory()); //將pdfDest 寫入到PDF PdfAction action = PdfAction.GotoLocalPage(1, pdfDest, writer); writer.SetOpenAction(action); doc.Close(); msInput.Close(); stream.Close(); //回傳PDF return stream.ToArray(); } }
占位符的簡單替換 測試下。只寫了三個 舉個例子
public string Placeholderfill(string htmlContext) { var entity = _shopingRepository.FindAll().FirstOrDefault(); htmlContext = htmlContext.Replace("{{SHOPINGNAME}}", entity.ShopingName); htmlContext = htmlContext.Replace("{{SHOPINGPric}}", entity.ShopingPric.ToString()); htmlContext = htmlContext.Replace("{{SHOPINGNuber}}", entity.ShopingCount.ToString()); return htmlContext; }
接下了就是控制器 的調用了
public FileResult ExportPDF() { string htmlContext = System.IO.File.ReadAllText(Server.MapPath("~/HTMLTemplate/ShopingBuy.html")); var context= _iShopingServer.Placeholderfill(htmlContext); PDFHelp pf = new PDFHelp(); var ms= pf.ConvertHtmlTextToPDF(context); return File(ms,"application/pdf", "shoping"+ DateTime.Now+ ".pdf"); }
在頁面上寫個點擊PDF下載的按鈕 Ajax 調用這個方法 然後就是最終實現的效果。 寫的很粗糙。 但實現的過程還是比較容易的。
一般業務都是轉PDF然後加入郵箱附件 用來發郵件的。
這裡只是簡單實現。 有時間還得繼續深入研究