php html转为pdf文件,php使用wkhtmltopdf实现html转pdf

  • Post author:
  • Post category:php


项目中有需求将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