php 抓取网页生成图片(如何用PHP扩展网页转换生成为各种格式的图片或者pdf文件)
优采云 发布时间: 2022-01-22 05:07php 抓取网页生成图片(如何用PHP扩展网页转换生成为各种格式的图片或者pdf文件)
我们在实际项目开发中经常会遇到这种需求,从特定网页生成图片用于分享等用途。这时候,我们就可以使用这个PHP扩展,轻松将网页转换成各种格式的图片或pdf文件。我们来看看如何实现它?
本教程的主角是 wkhtmltopdf。我们先简单了解一下:
wkhtmltopdf 是一个开源的、简单有效的命令行 shell 程序,可以将任何 HTML(网页)转换为 PDF 文档或图像(jpg、png 等)。
wkhtmltopdf 是用 C++ 编写的,并在 GNU/GPL(通用公共许可证)下发布。它使用 WebKit 渲染引擎将 HTML 页面转换为 PDF 文档,而不会损失页面的质量。这是一个非常有用且可靠的解决方案,用于实时创建和存储网页快照。
该程序的特点如下:
开源和跨平台。使用 WebKit 引擎将任何 HTML 网页转换为 PDF 文件。为页眉和页脚添加了选项目录生成 (TOC) 选项。提供批处理模式转换。通过绑定 libwkhtmltox 支持 PHP 或 Python。
首先我们需要在我们的服务器上安装linux下的webkit内核libwkhtmltox,根据我们的服务器配置选择合适的安装包:
需要注意的是libwkhtmltox的当前版本已经是0.13了,但是我在CentOS下安装了libwkhtmltox-0.116.2之后,当我把网页转换成图片的时候,我搞错了,最后选择了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 <br />
error: Failed dependencies:<br />
icu is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64<br />
xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
[root@KaiBoss_4_45 ~]# yum search icu<br />
[root@KaiBoss_4_45 ~]# yum install icu.x86_64<br />
<br />
[root@KaiBoss_4_45 ~]# yum search 75dpi<br />
[root@KaiBoss_4_45 ~]# yum install xorg-x11-fonts-75dpi.noarch<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
[root@KaiBoss_4_45 ~]# rpm -ivh wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm <br />
Preparing... ########################################### [100%]<br />
1:wkhtmltox ########################################### [100%]<br />
[root@KaiBoss_4_45 ~]# <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
如果看到上面的结果,就说明安装成功了!
10 稳定版安装方法:
[root@KaiBoss_4_45 ~]#mkdir libwkhtmtox<br />
[root@KaiBoss_4_45 ~]#cd libwkhtmtox<br />
[root@KaiBoss_4_45 libwkhtmtox]# tar jxvf libwkhtmltox-0.10.0_rc2-amd64.tar.bz2<br />
[root@KaiBoss_4_45 libwkhtmtox]# cd lib<br />
[root@KaiBoss_4_45 lib]# cp libwkhtmltox.so /usr/local/lib/<br />
[root@KaiBoss_4_45 lib]# cd ../include/<br />
[root@KaiBoss_4_45 include]# cp -R wkhtmltox /usr/local/include/<br />
<br />
<br />
<br />
<br />
<br />
接下来需要安装phpwkhtmltox这个php扩展,它可以调用webkit内核将网页转换成各种格式的图片或者pdf。
这里需要注意的是,如果是PHP7,需要安装PHP7版本对应的扩展包。
[root@KaiBoss_4_45 ~]#unzip php7-wkhtmltox-master.zip<br />
[root@KaiBoss_4_45 ~]#cd php7-wkhtmltox-master<br />
[root@KaiBoss_4_45 ~]#phpize<br />
[root@KaiBoss_4_45 ~]#./configure<br />
[root@KaiBoss_4_45 ~]#make install
接下来,我们修改我们的 php.ini 配置文件,添加扩展文件:
extension=phpwkhtmltox.so
然后,重新加载系统动态链接库(重要,否则PHP无法完成扩展phpwkhtmltox),检查是否添加成功:
[root@platform tmp]#ldconfig<br />
[root@platform tmp]#php -m
然后,您可以编写一个 php 脚本来测试该功能:
测试生成的图像:
以下是百度网页生成的结果
测试生成pdf:
如果你发现生成的图片或pdf中出现中文乱码,需要让CentOS支持中文:
[root@KaiBoss_4_45 ~]#yum groupinstall chinese-support
将字体文件复制到/usr/share/fonts/xxx,其中xxx为新建的字体文件夹,如msyh
[root@KaiBoss_4_45 ~]#cd /usr/share/fonts/<br />
[root@KaiBoss_4_45 ~]#mkdir msyh<br />
[root@KaiBoss_4_45 ~]#cd msyh
创建字体缓存
[root@KaiBoss_4_45 ~]#mkfontscale<br />
[root@KaiBoss_4_45 ~]#mkfontdir<br />
[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/<br />
[root@KaiBoss_4_45 ~]#mkdir Consolas<br />
[root@KaiBoss_4_45 ~]#cd Consolas
创建字体缓存
[root@KaiBoss_4_45 ~]#mkfontscale<br />
[root@KaiBoss_4_45 ~]#mkfontdir<br />
[root@KaiBoss_4_45 ~]#fc-cache -fv
你完成了!
wkhtmltox官网:
下载所有历史版本:... ME.md
wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64 下载地址(百度网盘):
稳定版0.10版本libwkhtmltox-0.10.0_rc2-amd64.tar.bz2下载地址(百度网盘):
(非PHP7)php-wkhtmltox-master下载地址(百度网盘):
(PHP7)php7-wkhtmltox-master下载地址(百度网盘):