好东西要分享,之前一直在使用wkhtmltopdf进行pdf文件的生成,常用的方式就是先安装wkhtmltopdf,然后在程序中用命令的方式将对应的html生成pdf文件,简单而且方便;但重复的编码使得想在wkhtmltopdf基础上进行封装,偶然间发现有小伙伴已经封装的还不错啦,常用的功能都已经实现,源码地址:https://github.com/fpanaccia/Wkhtmltopdf.NetCore。
作者将其打包成Nuget包(Wkhtmltopdf.NetCore),直接引入使用即可;
既然用到了.NetCore,肯定就要考虑到跨平台兼容性,对于wkhtmltopdf之前一直是在Windows上使用,还没有在其他平台尝试;这个包封装的行不行,拉出来遛遛就知道啦,接下来就试试:
1. 建个API项目,引入包和兼容对应平台的wkhtmltopdf执行文件
;
注:默认依赖的wkhtmltopdf执行文件需要存放在Rotativa目录下,可以自定义名称,如果自定义,需要再注册服务时指定对应的文件名;这里的wkhtmltopdf已经根据不同平台进行编译打包了,无需安装,这些文件在源码那就有;
2.创建PDFTestController控制器,添加如下接口进行测试
;
首先把生成pdf的服务注入进来,后续直接使用就可以啦:
接下来就开始写接口啦,这里只是测试,代码冗余没有考虑,在实际项目中小伙伴可以根据自己需求进行封装;
-
ExportPDFByHtml 接口,用html直接生成pdf文件,但这里没有保存,以文件流的形式访问,通过浏览器查看文件,可以自行下载;html模板在实际开发过程中可以单独用文件存储;
SavePDFByHtml接口,直接保存文件,文件名可以根据需要进行自定义;
TestMarginAndPageSize接口,设置Margin和PageSize参数,其他参数也可以设置;
ConvertOptions默认封装了以下属性,小伙伴也可以自定义扩展,只要继承IConvertOptions即可,这里就不演示的,因为官方有对应的案例,下伙伴下去搞搞,wkhtmltopdf的参数挺多的,都可以进行封装使用。
-
ExportByRazorView使用Razor视图的方式进行pdf文件生成,此库已经支持cshtml文件的读取
根据指定视图生成对应的pdf效果,如下:
-
ExportByRazorViewData数据动态绑定,既然支持视图,那就应该支持Razor语法,一般常用的就是数据绑定了,上面是静态的,接下来来个动态绑定的。
根据指定视图生成对应的pdf效果,如下:
如上基本的使用演示就说那么多,使用还是很简单,小伙伴后续可以根据自己的需要进行相关扩展;当然还有其他功能,比如设置页眉/页脚等,作者提供有对应的案例;这里不说那么多,不然又是长文。
3. 小伙伴用的时候可能会遇到的问题
-
在开发调试运行项目时,会报找不到wkhtmltopdf文件,那是因为运行时的确找不到对应的文件,将对应Rotativa下的文件设置为始终复制即可:
-
在Windows下怎么玩都没问题啦,开始发布到Linux(我用的centos 7),我擦,莫名其妙的错。
看见这个错我懵的,一顿搜索猛如虎,还是没找到答案;冷静下来,重新捋捋,原来是自己在犯傻;
两个问题需要解决,1.上传到Linux下的wkhtmltopdf没有给执行权限;2.可能环境缺少对应的依赖库;
设置可执行权限
在Linux环境下,可以通过
ll
命令查看权限,刚开始是没有权限的,只需要执行
chmod 777 wkhtmltopdf
命令,执行权限就有了,如下图中红框中的x就是可执行权限,关于Linux常用命令,后续单独整理一篇;
安装缺少的依赖库
可执行权限开启之后,别急着去访问页面,这样可能还是错误。因为可能缺少依赖库,那咋知道缺少呢,我是直接执行wkhtmltopdf,执行成功就没啥,不成功就会报缺少相关依赖,然后直接安装就行啦;执行
./wkhtmltopdf https://www.baidu.com ./test.pdf
试试就知道啦,因为wkhtmltopdf本身是可以单独运行的,并不依赖我们写的程序。
-
当执行成功之后,然后开始访问接口导出功能,如果不出意外,遇到中文就产生乱码啦,那是因为Linux环境下缺少相关的字体文件,将对应的字体文件拷贝到Linux上即可,字体我找好了,下载地址如下:
链接: https://pan.baidu.com/s/1jikC0DUkpEzpXL5ysjEQPA 提取码:
tn4j
;
将下载下来的字体解压,然后拷贝到Linux下的 /usr/share/fonts目录下即可
最后这样应该就没啥问题啦,剩下的就交给小伙伴自己摸索搞实践吧;
此文源码地址:https://github.com/zyq025/DotNetCoreStudyDemo
wkhtmltopdf官网地址:https://wkhtmltopdf.org/
使用还是很简单的,常规的需求没啥问题,如果需要功能定制化,小伙伴可以参考源码,自己封装一个(封装思路不难的);如果小伙伴有比较好的导出库,免费开源的那种,一起分享出来玩玩。
一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一起学~
前言好东西要分享,之前一直在使用wkhtmltopdf进行pdf文件的生成,常用的方式就是先安装wkhtmltopdf,然后在程序中用命令的方式将对应的html生成pdf文件,简单而且方...
Wkhtmltopdf
.NetCore.Example
该项目实现了
nuget
,该实现在net core中实现了库
wkhtmltopdf
,该示例以docker容器为例,您也可以在docker容器中运行该项目
nuget
的代码在此存储库中
这是出色HTML至
PDF
转换库
wkhtmltopdf
的C#包装器(使用P / Invoke)。
嵌入式项目需要在运行时将Visual C ++ 2015 Redistributable(x86)安装在计算机上。 你可以抓住它从微软网站。
当前状态和限制
自2010年第4季度以来,我一直在生产中使用它,到目前为止它运行良好,因此我们可以说它几乎已经“准备就绪”。
我使用组件的方式来自后台办公室的Windows服务,该服务将html->
pdf
转换作为用户从Web应用程序启动的某些工作流的一部分,因此,Web应用程序不直接调用WkHtmlToXSharp,而是发送一个通过NServiceBus传递给独立服务的消息,该服务处理(以及其他任务)从HTML生成
PDF
(一种
Pdf
文档),该文档随后通过Web应用程序提供给我们的用户。
就像我说的那样,它运行得很好,但是,我认为应该向您建议
wkhtmltopdf
是一个可以把html转为
pdf
的插件,有windows、
linux
等平台的版本,比较简单
官网下载https://
wkhtmltopdf
.org/downloads.html根据自己的平台安装
无需编译安装,下载解压后,在bin目录下有wkhtmltoimage和
wkhtmltopdf
两个文件,生成
pdf
可以直接运行
wkhtmltopdf
(也可以把bin目录...
如需直接下载请点击下载页面
wkhtmltopdf
并且wkhtmltoimage是开源 (LGPLv3) 命令行工具,用于使用 Qt WebKit 渲染引擎将 HTML 渲染为
PDF
和各种图像格式。这些完全“无头”运行,不需要显示或显示服务。
支持多个平台,可在windows,
linux
,mac等系统下运行。
生成
PDF
时会自动根据你在HTML页面中H标签生成树形目录结构。
小巧方便,转换速度快。
跨平台
。
我还没有感受
Wkhtmltopdf
.NetCore
该项目实现了用于ASP Net Core的库
wkhtmltopdf
,可在Windows,
Linux
,macOS和docker中使用。
有关如何使用它的更多信息,请访问
但我不想看到另一个存储库
您将需要使用以下结构放置此文件,这需要完成,因为
nuget
无法复制这些文件,仅放置具有完整路径的链接,并且仅在您的计算机上工作。
该结构将需要在项目的文件夹中
├── Example
| ├── Example.csproj
| └── Rotativa
| | ├──
Linux
| | | └──
wkhtmltopdf
| | ├── Mac
| | | └──
wkhtmltopdf
| | └── Windows
wkhtmltopdf
库的.NET Core P / Invoke包装器,该包装器使用Webkit引擎将HTML页面转换为
PDF
。
可以通过
Nuget
安装库。 从软件包管理器控制台运行以下命令:
PM> Install-Package DinkTo
Pdf
将本机库复制到项目的根文件夹。 当使用P / Invoke调用本机方法时,.NET Core从那里加载本机库。 您可以找到本机库的最新版本。 选择适合您的操作系统和平台(64位或32位)的库。
未使用IIS测试库。 库已在控制台应用程序中以及在Kestrel Web服务器上针对Web应用程序和Web API
var renderer = new HtmlTo
Pdf
();
renderer.PrintOptions.Title = "My title";
var
pdf
= await renderer.RenderHtmlAs
Pdf
Async("<h1>Hello world</h1>");
pdf
.SaveAs("c:\\my.
pdf
");
// Or
var byteArray =
pdf
.BinaryData;
WkHtmlToXDotNet
如果您已经看到了很棒的“
WkHtmlToPdf
”工具 ( ),但想在您的 .NET(C# 或 VB)应用程序中使用它,那么您来对地方了。 只需将这个 .NET DLL 包含在您的 .NET 项目中,确保“wkhtmltox.dll”文件在您的 bin 目录中(因为它是一个依赖项),瞧! 您将能够使用以下方法:
HtmlToXConverter.ConvertTo
Pdf
HtmlToXConverter.ConvertToPng
这就是您的代码的样子:
byte[]
pdf
Data = HtmlToXConverter.ConvertTo
Pdf
("<h1>SOO COOL!</h1>");
到https://
wkhtmltopdf
.org/downloads.html下载stable(稳定版)
Linux
64-bit或者32-bit(根据自身系统选择)
64:tar -xvf wkhtmltox-0.12.4_
linux
-generic-amd64.tar.xz
32:tar -xvzf wkhtmltox-0.12.4_
linux
-generic-i3
1、将html文件转为
pdf
文件的函数:
html_path-----html路径;
pdf
_path-----
pdf
路径
bool HtmlTo
Pdf
(QString html_path, QString
pdf
_path)
QFile::remove(
pdf
_path);
int result = 0;
wkhtmltopdf
_global_settings * ...
工作中一个比较常见的需求,要求将某个Url地址的内容转换为
PDF
文件,在网上查找无数文章后,发现目前最简单实用且效果很不错的就是采用
Wkhtmltopdf
.exe程序来转换。
安装此程序后,有二种方式使用(本人的环境是Windows7,vs2010,
wkhtmltopdf
.exe是windows32位):
1.在VS2010中,可以使用
Nuget
搜索安装
Wkhtmltopdf
插件到项目中,然后...
我可以回答这个问题。使用
python
的
pdf
kit库和
wkhtmltopdf
工具可以将HTML格式的文件转换为
PDF
文件。你可以通过以下代码将HTML文件转换为
PDF
文件:
import
pdf
kit
pdf
kit.from_file('example.html', 'example.
pdf
')
在运行代码之前,确保安装了
wkhtmltopdf
工具并将其添加到环境变量中。