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. idea使用lombok不生效

    问题: 在maven项目中引入lombok的依赖,可是依旧无法在实体类中生效 <dependency> <groupId>org.projectlombok</group ...

  2. Xshell6连Linux

    一.安装 文件 链接: 提取码:8rmr 二.连Linux 名称填自己喜欢的.续之前,我们保持一样的名字.主机填IP,根据之前Linux填的静态IP去连接. 然后双击,连接 我们用最高权限,填root ...

  3. CCNA 第四章 轻松划分子网

    1:划分子网的的好处: (1):减少网络流量 (2):优化网络性能 (3):简化管理 (4):有助于覆盖大型地理区域 2:CIDR和ISP的概念 (1):CIDR:Classless Inter-Do ...

  4. 使用花生壳、瑞友天翼远程访问金蝶K3

    金蝶版本号 WISE15.1 瑞友6.0系列 花生壳5 金蝶软件无法通过外网直接访问 因此需要使用瑞友天翼来实现远程访问 一般来说 金蝶服务器固定了IP地址以后 通过路由器开房两个外网端口即可实现瑞友 ...

  5. Docker 部署net5程序

    1.前言 本文讲述使用docker容器部署.net5项目.实现跨平台. 部署环境:docker 容器.liunx系统.这里采用VmWare虚拟机.并采用MobaXterm工具实现终端连接linux系统 ...

  6. MySQL从库维护经验分享

    前言: MySQL 主从架构应该是最常用的一组架构了.从库会实时同步主库传输来的数据,一般从库可以作为备用节点或作查询使用.其实不只是主库需要多关注,从库有时候也要经常维护,本篇文章将会分享几点从库维 ...

  7. Codeforces Round #691 (Div. 2)

    A. Red-Blue Shuffle 题意:有两个长度为n的数组,数组a和数组b,问那个数组中的数字相比之下比另一个数组中相应位置的元素值更大一些,如果数组a大就输出RED,如果数组b大就输出BLU ...

  8. 简单了解 MySQL 中相关的锁

    本文主要是带大家快速了解 InnoDB 中锁相关的知识 为什么需要加锁 首先,为什么要加锁?我想我不用多说了,想象接下来的场景你就能 GET 了. 你在商场的卫生间上厕所,此时你一定会做的操作是啥?锁 ...

  9. [DB] 数据库概述

    基本概念 关系模型:包括关系数据结构.关系操作集合.关系完整性约束三部分 关系型数据库:建立在关系模型基础上的数据库.由多张能互相联接的二维行列表格组成. 非关系型数据库(Nosql(Not Only ...

  10. Linux工程师必备的88个监控工具

    Linux工程师必备的88个监控工具 https://learn-linux.readthedocs.io/zh_CN/latest/maintenance/monitor/tools/80-linu ...