C# Net Core 使用 itextsharp.lgplv2.core 把Html轉PDF
只支持英文(中文我不知道怎么弄,懂的朋友幫我看一下)!!!!!【補充:評論區的小伙伴已解決】
引入包itextsharp.lgplv2.core
代碼
public static MemoryStream Pdf(string html) { StringReader sr = new StringReader(html); //步驟1 Document document = new Document(PageSize.A4, 10f, 10f, 10f, 0f); MemoryStream stream = new MemoryStream(); //步驟2 PdfWriter.GetInstance(document, stream); //步驟3 document.Open(); //創建一個樣式表 StyleSheet styles = new StyleSheet(); ////設置默認字體的屬性 //styles.LoadTagStyle(HtmlTags.BODY, "encoding", "Identity-H"); //styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONT, "Tahoma"); //styles.LoadTagStyle(HtmlTags.BODY, "size", "16pt"); //FontFactory.Register(@"C:\Windows\Fonts\tahoma.ttf"); var unicodeFontProvider = FontFactoryImp.Instance; unicodeFontProvider.DefaultEmbedding = BaseFont.EMBEDDED; unicodeFontProvider.DefaultEncoding = BaseFont.IDENTITY_H; var props = new Hashtable { // { "img_provider", new MyImageFactory() }, { "font_factory", unicodeFontProvider } //始終使用Unicode字體 }; //步驟4 //var objects = HtmlWorker.ParseToList(sr, styles, props); var objects = HtmlWorker.ParseToList(sr, styles); foreach (IElement element in objects) { document.Add(element); } document.Close(); return stream; }
-------------------后面補充-----------------
后面看到了這個帖子:https://dotnetcoretutorials.com/2019/07/02/creating-a-pdf-in-net-core/
中的 這段話
我決定使用包【pugpdf】:https://github.com/pug-pelle-p/pugpdf
當然如果能解決itextsharp.lgplv2.core的中文問題,我覺得他是最好的選擇
-------------------后面補充-----------------
-------------------后面補充2-----------------
經過評論區的小伙伴的努力,解決了中文的問題,以下是全代碼
public static MemoryStream Pdf(string html) { StringReader sr = new StringReader(html); //步驟1 Document document = new Document(PageSize.A4, 10f, 10f, 10f, 0f); MemoryStream stream = new MemoryStream(); //步驟2 PdfWriter.GetInstance(document, stream); //步驟3 document.Open(); //創建一個樣式表 StyleSheet styles = new StyleSheet(); ////設置默認字體的屬性 //styles.LoadTagStyle(HtmlTags.BODY, "encoding", "Identity-H"); //styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONT, "Tahoma"); //styles.LoadTagStyle(HtmlTags.BODY, "size", "16pt"); //FontFactory.Register(@"C:\Windows\Fonts\tahoma.ttf"); var unicodeFontProvider = FontFactoryImp.Instance; unicodeFontProvider.DefaultEmbedding = BaseFont.EMBEDDED; unicodeFontProvider.DefaultEncoding = BaseFont.IDENTITY_H; var props = new Hashtable { // { "img_provider", new MyImageFactory() }, { "font_factory", unicodeFontProvider } //始終使用Unicode字體 }; //步驟4 //var objects = HtmlWorker.ParseToList(sr, styles, props); var objects = HtmlWorker.ParseToList(sr, styles); foreach (IElement element in objects) { BaseFont baseFont = BaseFont.CreateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont); Paragraph temp = element as Paragraph; if (temp != null) { var chuck = temp[0] as Chunk; if (chuck != null) { chuck.Font = font; //document.Add(temp); } } document.Add(element); } document.Close(); return stream; }
但是我發現復雜的html解析效果不是很好(相對於其他)
於是我嘗試着自己來生成pdf
以下代碼完成了以下功能:
*添加圖片
*添加段落(文本)
*添加塊到某一處(文本)
using iTextSharp.text; using iTextSharp.text.pdf;
public static byte[] CreatePdfFile() { using (var stream = new MemoryStream()) { var document = new Document(PageSize.A4, 0f, 0f, 0f, 0f); var writer = PdfWriter.GetInstance(document, stream); document.Open(); //設置圖片大小和位置 byte[] arr = Convert.FromBase64String(DataPdf.backgroundImg); Image image = Image.GetInstance(arr); image.ScaleToFit(document.PageSize.Width, document.PageSize.Height); image.SetAbsolutePosition(0, 0); //添加圖片 document.Add(image); //創建字體 BaseFont baseFont = BaseFont.CreateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font font = new Font(baseFont); //一個段落文本 Paragraph paragraph = new Paragraph(@"asdas打算的!@#$%^&*()_ asd asdasdasd 扯哦阿斯加德歐艾斯激動我按實際歐艾斯卷阿勝境的 熬時間大廈將顛 ", font); //添加段落 document.Add(paragraph); //添加塊到列 var ct = new ColumnText(writer.DirectContent); ct.SetSimpleColumn(100, 150, 500, 800, 24, Element.ALIGN_LEFT); var chunk = new Chunk("啥的阿薩德阿薩德as阿薩德aaaaasdasfdawswd",font); ct.AddElement(chunk); ct.Go(); //document.NewPage(); //document.Add(new Phrase("")); //document.NewPage(); //writer.PageEmpty = false; document.Close(); return stream.ToArray(); } }
學習文本(塊,短語,段落)
https://www.mikesdotnetting.com/article/82/itextsharp-adding-text-with-chunks-phrases-and-paragraphs
-------------------后面補充2-----------------