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. Nginx如何配置Http、Https、WS、WSS?

    写在前面 当今互联网领域,Nginx是使用最多的代理服务器之一,很多大厂在自己的业务系统中都是用了Nginx作为代理服务器.所以,我们有必要了解下Nginx对于Http.Https.WS.WSS的各项 ...

  2. 如何在Mac OS X中开启VIM语法高亮和显示行号

    VIM (Wikipedia图) Vim 是一款相当给力的源自UNIX平台的命令行文本编辑器,不过不给力的是,Mac OS X下并没有诸多Linux发行版上VIM那些牛逼哄哄的神马代码高亮显示啊,自动 ...

  3. 企业CRM系统选型的标准有哪些?

    随着市场的发展,企业开始意识到客户的重要性.越来越多的企业形成了"以客户为核心"的理念,更加注重客户数据和管理,因此CRM客户关系管理系统成为企业的首选.选择一个适合企业的CRM系 ...

  4. [bug] MySQL 无法删除表

    参考 https://blog.csdn.net/smbluesky/article/details/82427121

  5. Jenkins远程代码执行漏洞

    于一个月前,进行服务器巡检时,发现服务器存在不明进程,并且以Jenkins用户身份来运行.当时进行了处理并修复了漏洞.在此补上修复过程 第一反应是Jenkins存在漏洞,于是Google Jenkin ...

  6. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理. (一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时 ...

  7. SSH自动断开连接的原因-20200323

    SSH自动断开连接的原因   方法一: 用putty/SecureCRT连续3分钟左右没有输入, 就自动断开, 然后必须重新登陆, 很麻烦. 在网上查了很多资料, 发现原因有多种, 环境变量TMOUT ...

  8. Lua _G

    1.全局变量的原形 在Lua中,要声明全局变量很简单,那就是定义变量的时候,前面不要加上local. 这个神秘的全局变量,其实本质上也是一个table,它把我们创建的全局变量都保存到一个table里了 ...

  9. selenium多表单切换以及多窗口切换、警告窗处理

    selenium表单切换 在做UI自动化,有时候要定位的元素属性在页面上明明是唯一的.却怎么也不执行对元素的操作动作,这时候多半是iframe表单在作怪. 切入表单:iddriver.switch_t ...

  10. 2017-11-20 崂应工作总结,含LTC3780模块分析,含运放原理

    学习了运算放大器的分类 运放的单点输入 差动模式 共模抑制输入模式 反相位比例运放 正相比例运放 电压跟随器 运放的放大比例计算 LTC3780模块的原理 因为: R19  这个电阻不确定他的接法 暂 ...