- 此專案當時是用.NET 3.5 vs2008 開發的,當然就沒有好用的NuGet,只好自己下載來安裝,這邊要下載兩個套件iTextSharp及XmlWorker,基本上可以直接載最新版的,載下來後把參考加到專案中, 如果可以使用NuGet就直接搜尋安裝即可。
- 這邊放上完整的程式碼,主要是抓取HTML的路徑把文字檔轉成byte產出PDF實體檔案
- 至於在HTML檔案上有幾個要注意的是頁面寬度要設定成100%,如果設定死寬度很有可能會破版,另外這邊樣式的部分主要是支援CSS的,其他早期家在tag上的屬性都不再支援。
public void print() { WebClient wc = New WebClient; wc.Encoding = Encoding.UTF8; string htmlText = wc.DownloadString("path"); byte[] pdfFile = ConvertHtmlTextToPDF(htmlText); //將PDF產生出實體檔案 File.WriteAllBytes("fileName", pdfFile); }
public byte[] ConvertHtmlTextToPDF(string htmlText) { if (string.IsNullOrEmpty(htmlText)) { return null; } // htmlText = "" + htmlText + "支援Unicode的顯示
"; MemoryStream outputStream = new MemoryStream(); byte[] data = Encoding.UTF8.GetBytes(htmlText); MemoryStream msInput = new MemoryStream(data); //A4橫印 //iTextSharp.text.Document doc = new iTextSharp.text.Document( new iTextSharp.text.Rectangle(288f, 144f), 10, 10, 10, 10); //doc.SetPageSize(iTextSharp.text.PageSize.A4.Rotate()); //A4直印 iTextSharp.text.Document doc = new iTextSharp.text.Document(); iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, outputStream); iTextSharp.text.pdf.PdfDestination pdfDest = new iTextSharp.text.pdf.PdfDestination( iTextSharp.text.pdf.PdfDestination.XYZ, 0, doc.PageSize.Height, 1f); doc.Open(); iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml( writer, doc, msInput, null, Encoding.UTF8, new UnicodeFontFactory()); iTextSharp.text.pdf.PdfAction action = iTextSharp.text.pdf.PdfAction.GotoLocalPage(1, pdfDest, writer); writer.SetOpenAction(action); doc.Close(); msInput.Close(); outputStream.Close(); return outputStream.ToArray(); }
using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; public class UnicodeFontFactory : iTextSharp.text.FontFactoryImp { //arial unicode MS是完整的unicode字型。 private static string arialFontPath = Path.Combine( Path.Combine( Directory.GetParent( Environment.GetFolderPath(Environment.SpecialFolder.System)).FullName, "Fonts"), "arialuni.ttf"); //標楷體 private static string chinesePath = Path.Combine( Path.Combine( Directory.GetParent( Environment.GetFolderPath(Environment.SpecialFolder.System)).FullName, "Fonts"), "KAIU.TTF"); public override iTextSharp.text.Font GetFont(string fontname, string encoding, bool embedded, float size, int style, iTextSharp.text.BaseColor color, bool cached) { iTextSharp.text.pdf.BaseFont baseFont = iTextSharp.text.pdf.BaseFont.CreateFont( chinesePath, iTextSharp.text.pdf.BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.EMBEDDED); // return new iTextSharp.text.Font(baseFont, size, style, color); } }
參考資料:https://dotblogs.com.tw/shadow/archive/2014/02/09/143891.aspx
將HTML轉成PDF iDiTect.Converter简单易用,支持html5和css3
回覆刪除