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-----------------

块,短语和段落的文本

C# Net Core 使用 itextsharp.lgplv2.core 把Html转PDF的更多相关文章

  1. NET Core RC2 and .NET Core SDK Preview

    NET Core RC2 and .NET Core SDK Preview 先看一下 .NET Core(包含 ASP.NET Core)的路线图: Beta6: 2015年7月27日 Beta7: ...

  2. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...

  3. EF Core 快速上手——EF Core的三种主要关系类型

    系列文章 EF Core 快速上手--EF Core 入门 本节导航 三种数据库关系类型建模 Migration方式创建和习修改数据库 定义和创建应用DbContext 将复杂查询拆分为子查询   本 ...

  4. EF Core 快速上手——EF Core 入门

    EF Core 快速上手--EF Core 介绍 本章导航 从本书你能学到什么 对EF6.x 程序员的一些话 EF Core 概述 1.3.1 ORM框架的缺点 第一个EF Core应用   本文是对 ...

  5. [转帖]什么是Asp.net Core?和 .net core有什么区别?

    什么是Asp.net Core?和 .net core有什么区别? https://www.cnblogs.com/itzhangxp/p/8322364.html 知道微软开始用 kestrel了 ...

  6. 什么是Asp.net Core?和 .net core有什么区别?

    为什么要写这篇文章 写这篇文章有两个原因,第一个是因为新站点创建出来后一直空置着,所以写一篇文章放在这里.第二就是因为近来在做一些基于Asp.net core平台的项目开发,也遇到了一些问题,正好趁此 ...

  7. 什么是Asp.net Core?和 .net core有什么区别?(转)

    什么是Asp.Net core 我相信很多C# Developer已经对于.net core不算陌生了,就算没有正式使用相信也应该有所了解.微软在推出来.net core的同时为了方便一些原有的项目可 ...

  8. .net core +codefirst(.net core 基础入门,适合这方面的小白阅读) 【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

    .net core +codefirst(.net core 基础入门,适合这方面的小白阅读)   前言 .net core mvc和 .net mvc开发很相似,比如 视图-模型-控制器结构.所以. ...

  9. ASP.NET Core:创建一个Core项目

    ylbtech-ASP.NET Core:创建一个Core项目 1.返回顶部 1. 2. 3. 4.         5. 2.返回顶部 1.新建Razor页面 2. 3. 4.Abc 4.1.Abc ...

随机推荐

  1. Linux下查看在线用户及用户进程

    #该服务器下的所有用户运行进程的情况 ps -ax -u #查看java程序下用户的进程情况 ps -ax -u |grep java   或  ps aux|grep java cat /etc/p ...

  2. 使用TK框架中 insert与insertSelective区别

    insertSelective会对字段进行判断再更新(如果为Null就忽略更新),如果你只想插入某些字段,可以用这个方法. insert对你注入的字段全部插入

  3. Linux 内核调度器源码分析 - 初始化

    导语 上篇系列文 混部之殇-论云原生资源隔离技术之CPU隔离(一) 介绍了云原生混部场景中CPU资源隔离核心技术:内核调度器,本系列文章<Linux内核调度器源码分析>将从源码的角度剖析内 ...

  4. SSM久别遇新坑

    SSM久别遇新坑 久别个锤子,也就几天没看,改bug改到怀疑人生 maven的父子模块问题 众所周知,用maven建立一个空的模块,在它之下,将原本的各层次结构分别新建为一个子模块,就能够将各业务进行 ...

  5. 引言:CTF新世界

    1. CTF的昨天和今天 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客 ...

  6. unbuntu下清理磁盘空间

    把很多大文件删除,并清空回收站后,发现可用存储空间并没增大,如图: 用find /home -size +500k 过滤出大于500k bytes的文件,发现原来删除的yuv文件都被置于.cache目 ...

  7. CRM帮助B2B企业持续改善战略决策「上篇」

    数据一直都是企业和客户的热点话题.客户期望得到更加个性化的感受,企业则期望使用数据来持续改善战略决策和给予更好的服务 B2B企业如何更合理地利用客户资料: 数据采集 长期以来,B2C行业的企业都是通过 ...

  8. prometheus nginx-module-vts删除内存区数据

    项目地址:https://github.com/vozlt/nginx-module-vts 删除所zone内存中的数据 curl localhost/status/control?cmd=delet ...

  9. who -b

    ~]# who -b 系统引导 2020-05-03 19:57[root@localhost ~]# who -r 运行级别 5 2020-05-03 19:58

  10. Java中JDK,JRE和JVM之间的关系-(转载)

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...