PHP用wkhtmltopdf及扩展实现网页生成图片或PDF

zkbhj 发表了文章 • 0 个评论 • 3578 次浏览 • 2017-11-21 10:55 • 来自相关话题

我们经常会在实际的项目开发中遇到这种需求,将一个特定的网页生成图片,用于分享等用途。这时候,我们可以用这个PHP扩展,很方便的将网页转换生成为各种格式的图片或者pdf文件。下面就来看下如何实现?

本教程的主角是wkhtmltopdf,下面就先简单了解下它:

wkhtmltopdf 是一个开源、简单而有效的命令行 shell 程序,它可以将任何 HTML (网页)转换为 PDF 文档或图像(jpg、png 等)。

wkhtmltopdf 是用 C++ 编写的,并在 GNU/GPL (通用公共许可证)下发布。它使用 WebKit 渲染引擎将 HTML 页面转换为 PDF 文档且不会丢失页面的质量。这是一个用于实时创建和存储网页快照的非常有用且可信赖的解决方案。

 
这个程序的功能特点有以下几点:
开源并且跨平台。使用 WebKit 引擎将任意 HTML 网页转换为 PDF 文件。添加页眉和页脚的选项目录生成 (TOC) 选项。提供批量模式转换。通过绑定 libwkhtmltox 来支持 PHP 或 Python。





 
首先,我们需要在我们的服务器上安装 libwkhtmltox,linux下的webkit内核,根据自己的服务器配置,选择合适的安装包:

需要说明的是,libwkhtmltox现在的版本已经是0.13了,但是本人在CentOS 6.2下安装了libwkhtmltox-0.11之后,在将网页转换成图片时会出错,最终选择了0.10版本,这个版本还是相当稳定的。

13版本安装方法:wget https://bitbucket.org/wkhtmlto ... 4.rpm然后执行:[root@KaiBoss_4_45 ~]# rpm -ivh wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm
如果安装过程中出现下列报错,可以通过下面方法解决,安装缺失的依赖即可![root@KaiBoss_4_45 ~]# rpm -ivh wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm
error: Failed dependencies:
icu is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64









[root@KaiBoss_4_45 ~]# yum search icu
[root@KaiBoss_4_45 ~]# yum install icu.x86_64

[root@KaiBoss_4_45 ~]# yum search 75dpi
[root@KaiBoss_4_45 ~]# yum install xorg-x11-fonts-75dpi.noarch









[root@KaiBoss_4_45 ~]# rpm -ivh wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm
Preparing... ########################################### [100%]
1:wkhtmltox ########################################### [100%]
[root@KaiBoss_4_45 ~]#









看到如上结果,就代表安装成功了!
 
10稳定版本安装方式:[root@KaiBoss_4_45 ~]#mkdir libwkhtmtox
[root@KaiBoss_4_45 ~]#cd libwkhtmtox
[root@KaiBoss_4_45 libwkhtmtox]# tar jxvf libwkhtmltox-0.10.0_rc2-amd64.tar.bz2
[root@KaiBoss_4_45 libwkhtmtox]# cd lib
[root@KaiBoss_4_45 lib]# cp libwkhtmltox.so /usr/local/lib/
[root@KaiBoss_4_45 lib]# cd ../include/
[root@KaiBoss_4_45 include]# cp -R wkhtmltox /usr/local/include/






 
接下来,需要安装phpwkhtmltox, php扩展,可调用webkit内核将网页转换成各种格式图片或者pdf。
这里需要注意,如果是PHP7,需要安装PHP7版本对应的扩展包。[root@KaiBoss_4_45 ~]#unzip php7-wkhtmltox-master.zip
[root@KaiBoss_4_45 ~]#cd php7-wkhtmltox-master
[root@KaiBoss_4_45 ~]#phpize
[root@KaiBoss_4_45 ~]#./configure
[root@KaiBoss_4_45 ~]#make install





 接下来,我们修改们的php.ini配置文件,将扩展文件加进来:extension=phpwkhtmltox.so 然后,重新加载系统动态链接库(重要,否则PHP无法完成扩展phpwkhtmltox),并检查是否添加成功:[root@platform tmp]#ldconfig
[root@platform tmp]#php -m然后,就可以写一个php脚本,来测试功能啦:
 
测试生成图片:<?php
wkhtmltox_convert(
'image',
array(
'out' => 'zk_pic.jpg',
'in' => 'http://www.baidu.com/'
)
);
?>
下面是百度网页的生成结果











 测试生成pdf:<?php
wkhtmltox_convert('pdf',
array(
'out' => '/tmp/zk_pdf.pdf',
'imageQuality' => '95'
), // global settings
array(
array(
'page' => 'http://www.ziroom.com/'
),
array(
'page' => 'http://www.baidu.com/'
)
)// object settings
);
?>
如果发现生成的图片或pdf中,中文是乱码,则需要让CentOS支持中文:[root@KaiBoss_4_45 ~]#yum groupinstall chinese-support把字体文件拷贝到/usr/share/fonts/xxx,其中xxx为新增字体文件夹,如msyh[root@KaiBoss_4_45 ~]#cd /usr/share/fonts/
[root@KaiBoss_4_45 ~]#mkdir msyh
[root@KaiBoss_4_45 ~]#cd msyh建立字体缓存[root@KaiBoss_4_45 ~]#mkfontscale
[root@KaiBoss_4_45 ~]#mkfontdir
[root@KaiBoss_4_45 ~]#fc-cache -fv
PS:让Linux CentOS支持Consolas字体(技术类博客可能会发布一个示例代码,大部分wordpress技术博客都会安装SyntaxHighlighter插件,而该插件代码显示字体首选的是Consolas字体,所以为了html转换成图片时示例代码显示得好看,我们也需要让linux支持Consolas字体)
 
下载或者从本地windows拷贝Consolas(注意从windows系统里面拷贝出来应该是有4个文件),并上传到linux服务器。把字体文件拷贝到/usr/share/fonts/xxx,其中xxx为新增字体文件夹,如Consolas[root@KaiBoss_4_45 ~]#cd /usr/share/fonts/
[root@KaiBoss_4_45 ~]#mkdir Consolas
[root@KaiBoss_4_45 ~]#cd Consolas
建立字体缓存[root@KaiBoss_4_45 ~]#mkfontscale
[root@KaiBoss_4_45 ~]#mkfontdir
[root@KaiBoss_4_45 ~]#fc-cache -fv
大功告成!
 
wkhtmtox官网:https://wkhtmltopdf.org/
 
所有历史版本下载:https://github.com/wkhtmltopdf ... ME.md

wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64 下载地址(百度网盘):https://pan.baidu.com/s/1mi3P9g8 
 
稳定版0.10版本libwkhtmltox-0.10.0_rc2-amd64.tar.bz2 下载地址(百度网盘):https://pan.baidu.com/s/1c2B74PU

(非PHP7)php-wkhtmltox-master 下载地址(百度网盘):https://pan.baidu.com/s/1jHHkFTO
 
(PHP7)php7-wkhtmltox-master 下载地址(百度网盘):https://pan.baidu.com/s/1i5J4Mhf 查看全部
我们经常会在实际的项目开发中遇到这种需求,将一个特定的网页生成图片,用于分享等用途。这时候,我们可以用这个PHP扩展,很方便的将网页转换生成为各种格式的图片或者pdf文件。下面就来看下如何实现?

本教程的主角是wkhtmltopdf,下面就先简单了解下它:


wkhtmltopdf 是一个开源、简单而有效的命令行 shell 程序,它可以将任何 HTML (网页)转换为 PDF 文档或图像(jpg、png 等)。

wkhtmltopdf 是用 C++ 编写的,并在 GNU/GPL (通用公共许可证)下发布。它使用 WebKit 渲染引擎将 HTML 页面转换为 PDF 文档且不会丢失页面的质量。这是一个用于实时创建和存储网页快照的非常有用且可信赖的解决方案。


 
这个程序的功能特点有以下几点:
  1. 开源并且跨平台。
  2. 使用 WebKit 引擎将任意 HTML 网页转换为 PDF 文件。
  3. 添加页眉和页脚的选项
  4. 目录生成 (TOC) 选项。
  5. 提供批量模式转换。
  6. 通过绑定 libwkhtmltox 来支持 PHP 或 Python。


banner.jpg

 
首先,我们需要在我们的服务器上安装 libwkhtmltox,linux下的webkit内核,根据自己的服务器配置,选择合适的安装包:


需要说明的是,libwkhtmltox现在的版本已经是0.13了,但是本人在CentOS 6.2下安装了libwkhtmltox-0.11之后,在将网页转换成图片时会出错,最终选择了0.10版本,这个版本还是相当稳定的。


13版本安装方法:
wget https://bitbucket.org/wkhtmlto ... 4.rpm
然后执行:
[root@KaiBoss_4_45 ~]# rpm -ivh wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm

如果安装过程中出现下列报错,可以通过下面方法解决,安装缺失的依赖即可!
[root@KaiBoss_4_45 ~]# rpm -ivh wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm 
error: Failed dependencies:
icu is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64









[root@KaiBoss_4_45 ~]# yum search icu
[root@KaiBoss_4_45 ~]# yum install icu.x86_64

[root@KaiBoss_4_45 ~]# yum search 75dpi
[root@KaiBoss_4_45 ~]# yum install xorg-x11-fonts-75dpi.noarch









[root@KaiBoss_4_45 ~]# rpm -ivh wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm 
Preparing... ########################################### [100%]
1:wkhtmltox ########################################### [100%]
[root@KaiBoss_4_45 ~]#









看到如上结果,就代表安装成功了!
 
10稳定版本安装方式:
[root@KaiBoss_4_45 ~]#mkdir libwkhtmtox
[root@KaiBoss_4_45 ~]#cd libwkhtmtox
[root@KaiBoss_4_45 libwkhtmtox]# tar jxvf libwkhtmltox-0.10.0_rc2-amd64.tar.bz2
[root@KaiBoss_4_45 libwkhtmtox]# cd lib
[root@KaiBoss_4_45 lib]# cp libwkhtmltox.so /usr/local/lib/
[root@KaiBoss_4_45 lib]# cd ../include/
[root@KaiBoss_4_45 include]# cp -R wkhtmltox /usr/local/include/






 
接下来,需要安装phpwkhtmltox, php扩展,可调用webkit内核将网页转换成各种格式图片或者pdf。
这里需要注意,如果是PHP7,需要安装PHP7版本对应的扩展包。
[root@KaiBoss_4_45 ~]#unzip php7-wkhtmltox-master.zip
[root@KaiBoss_4_45 ~]#cd php7-wkhtmltox-master
[root@KaiBoss_4_45 ~]#phpize
[root@KaiBoss_4_45 ~]#./configure
[root@KaiBoss_4_45 ~]#make install


QQ截图20171121115044.jpg

 接下来,我们修改们的php.ini配置文件,将扩展文件加进来:
extension=phpwkhtmltox.so 
然后,重新加载系统动态链接库(重要,否则PHP无法完成扩展phpwkhtmltox),并检查是否添加成功:
[root@platform tmp]#ldconfig
[root@platform tmp]#php -m
然后,就可以写一个php脚本,来测试功能啦:
 
测试生成图片:
<?php
wkhtmltox_convert(
'image',
array(
'out' => 'zk_pic.jpg',
'in' => 'http://www.baidu.com/'
)
);
?>

下面是百度网页的生成结果

QQ截图20171121161815.jpg


baiducreate.jpg


 测试生成pdf:
<?php
wkhtmltox_convert('pdf',
array(
'out' => '/tmp/zk_pdf.pdf',
'imageQuality' => '95'
), // global settings
array(
array(
'page' => 'http://www.ziroom.com/'
),
array(
'page' => 'http://www.baidu.com/'
)
)// object settings
);
?>

如果发现生成的图片或pdf中,中文是乱码,则需要让CentOS支持中文:
[root@KaiBoss_4_45 ~]#yum groupinstall chinese-support
把字体文件拷贝到/usr/share/fonts/xxx,其中xxx为新增字体文件夹,如msyh
[root@KaiBoss_4_45 ~]#cd /usr/share/fonts/
[root@KaiBoss_4_45 ~]#mkdir msyh
[root@KaiBoss_4_45 ~]#cd msyh
建立字体缓存
[root@KaiBoss_4_45 ~]#mkfontscale
[root@KaiBoss_4_45 ~]#mkfontdir
[root@KaiBoss_4_45 ~]#fc-cache -fv

PS:让Linux CentOS支持Consolas字体(技术类博客可能会发布一个示例代码,大部分wordpress技术博客都会安装SyntaxHighlighter插件,而该插件代码显示字体首选的是Consolas字体,所以为了html转换成图片时示例代码显示得好看,我们也需要让linux支持Consolas字体)
 
下载或者从本地windows拷贝Consolas(注意从windows系统里面拷贝出来应该是有4个文件),并上传到linux服务器。把字体文件拷贝到/usr/share/fonts/xxx,其中xxx为新增字体文件夹,如Consolas
[root@KaiBoss_4_45 ~]#cd /usr/share/fonts/
[root@KaiBoss_4_45 ~]#mkdir Consolas
[root@KaiBoss_4_45 ~]#cd Consolas

建立字体缓存
[root@KaiBoss_4_45 ~]#mkfontscale
[root@KaiBoss_4_45 ~]#mkfontdir
[root@KaiBoss_4_45 ~]#fc-cache -fv

大功告成!
 
wkhtmtox官网:https://wkhtmltopdf.org/
 
所有历史版本下载:https://github.com/wkhtmltopdf ... ME.md

wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64 下载地址(百度网盘):https://pan.baidu.com/s/1mi3P9g8 
 
稳定版0.10版本libwkhtmltox-0.10.0_rc2-amd64.tar.bz2 下载地址(百度网盘):https://pan.baidu.com/s/1c2B74PU

(非PHP7)php-wkhtmltox-master 下载地址(百度网盘):https://pan.baidu.com/s/1jHHkFTO
 
(PHP7)php7-wkhtmltox-master 下载地址(百度网盘):https://pan.baidu.com/s/1i5J4Mhf