项目中有需求将html页面实时转为pdf并提供下载。经过各种查找比对,最终使用了wkhtmltopdf工具来实现。
wkhtmltopdf,可以很方便的将输入的url渲染并打印成pdf文件。当然也有一些坑需要踩。特别提出,wkhtmltopdf渲染不支持ES6语法,意味着使用ES6语法编写的页面可能会报错而无法打印或出现排版问题。
先贴一个我的使用代码段,具体的再讲
$filename = “xxx.pdf”;
$url = “http://www.xxx.com/”
$save_url = “/tmp/”.$filename;
$shell = “xvfb-run –auto-servernum wkhtmltopdf –no-stop-slow-scripts –window-status ready ‘$url’ $save_url”;
$process = shell_exec($shell);
if(file_exists($save_url)){
//pdf文件存在,转换成功。
}else{
//pdf文件不存在,转换错误。
}
要使用wkhtmltopdf,首先自然是要安装它。我使用的是ubuntu server-16.04,所以就直接使用apt安装了。因为是server版的ubuntu,没有桌面环境,同时也需要安装xvfb,为wkhtmltopdf提供一个虚拟屏幕。否则会无法渲染而报错。
sudo apt-get update
sudo apt-get install xvfb
sudo apt-get install wkhtmltopdf
wkhtmltopdf的使用就是在bash中使用(注意引号)
wkhtmltopdf ‘网址’ ‘保存地址’
即可。
在前面加上xvfb-run –auto-servernum,可以在无桌面环境的linux中使用
xvfb-run –auto-servernum wkhtmltopdf –no-stop-slow-scripts –window-status ready ‘$url’ $save_url
参数:
–no-stop-slow-scripts 表示不停止计算缓慢的js脚本
–window-status ready 表示wkhtmltopdf将会等到渲染的网页window-status变为ready后再进行打印(可在页面中通过运行js代码window.status=”ready”进行状态匹配)
–debug-javascript 可以输出js的控制台信息,进行debug