C# Net Core 使用 itextsharp.lgplv2.core 把Html转PDF
C# Net Core 使用 itextsharp.lgplv2.core 把Html转PDF
只支持英文(中文我不知道怎么弄,懂的朋友帮我看一下)!!!!!【补充:评论区的小伙伴已解决】
引入包itextsharp.lgplv2.core
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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-----------------
经过评论区的小伙伴的努力,解决了中文的问题,以下是全代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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
以下代码完成了以下功能:
*添加图片
*添加段落(文本)
*添加块到某一处(文本)
1 2 | using iTextSharp.text; using iTextSharp.text.pdf; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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-----------------
块,短语和段落的文本
如有问题请联系QQ:
var d=["1","2","3","4","5","6","7","8","9"];
var pass=d[8]+d[6]+d[0]+d[8]+d[2]+d[0]+d[4]+d[3]+d[2];
源代码(github)包(NuGet)关注:ping9719
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构