wkhtmltopdf一款能把HTML页面保存为PDF的软件.md
一、简介
wkhtmltopdf 和 wkhtmltoimage 是一个使用 Qt WebKit 引擎做渲染的,能够把html 文档转换成 pdf 文档 或 图片(image) 的命令行工具。(强调一下:是 “命令行工具” )
支持多个平台,可在win,linux,os x 等系统下运行。
官方网站:https://wkhtmltopdf.org/
官方github:https://github.com/wkhtmltopdf/wkhtmltopdf
二、安装
官方在github上的2018年0.12.5版本中提供了RPM包安装方式,安装完就可以使用了
三、使用
使用也很简单,
命令格式:wkhtmltopdf [GLOBAL OPTION]... [OBJECT]...
wkhtmltopdf https://www.baidu.com baidu.pdf
结果如下
没有中文,大部分原因是没有字体支持,可以先安装下微软雅黑试试。
yum install wqy-microhei-fonts -y
可以了。
关于字体,这里多插一嘴,CentOS中安装中文字体包的一般方法
yum install xorg-x11-font-utils fontconfig -y
#拷贝字体包到/usr/share/fonts并执行
mkfontscale && mkfontdir && fc-cache -fv
需要小语种字体的可以看下google noto。
四、wkhtmltopdf的缺点
大家都说好的东西未必是真好,接下来我们开始说缺点了
4.1 生成的pdf是白页
VUE等框架开始流行后,wkhtmltopdf用在vue项目上肯定是白页。
引起空白页的主要原因就是,使用webpack打包的项目,index.html页面在查看的时候是不显示具体页面内容的,具体内容都包含在一个js文件中,只有在访问到具体某个页面路由的时候相应的资源才会被调出来。但是wkthtmltopdf只能解析静态资源,不会去运行js文件。所以出来的是白页。同样的如果页面中的内容在页面开始渲染时才通过ajax请求从后台获取,也是无法被wkhtmltopdf获取。
这里介绍一个判断当前页面能否被wkhtmltopdf正常导出的一个方法:
将当前页面在浏览器中另存为,保存到本地,如果本地文件打开后是有内容的,那么wkhtmltopdf就能正常导出。因为这个工具只会解析html与CSS,并不会去运行js文件。
那怎么解决呢?
可以用SSR服务端渲染,或者在页面上放置一个按钮,将渲染完毕的HTML传回服务器端生成PDF。
参考资料
https://juejin.cn/post/6844903612993241101
https://www.jianshu.com/p/559c594678b6