Total Pageviews

Thursday 12 July 2018

用PHP自动生成文章预览图,html转换成各种格式图片/PDF



最初大致的思路很简单,就是能不能通过某种方式调用浏览器内核来渲染网页即HTML,然后将HTML保存为图片。然后开始一头扎进Google、Baidu,搜索了很长时间,得出结论,资料太少,想自己写一个C扩展,调用webkit内核。就在快要放弃的时候,在论坛里面看到wkhtmltox,然后所有的问题都在于wkhtmltox了,很庆幸的是在google code里面又看到了phpwkhtmltox,然后我笑了。
安装软件清单:
a.libwkhtmltox linux下的webkit内核(不依赖为图形界面)
b.phpwkhtmltox php扩展,可调用webkit内核将网页转换成各种格式图片或者pdf
c.font-chinese 中文字体
d.msyh,Consolas 字体
系统环境:Linux CentOS 6.2 64位
1.Linux下安装libwkhtmltox
libwkhtmltox是提取出来的可以直接复制到linux相应的目录的webkit内核,可能有人想着,要渲染网页是需要图形浏览器,但是我们的VPS一般都是没有图形界面的,其实我们只需要安装libwkhtmltox到linux即可,并不需要图形界面。
1.1.下载libwkhtmltox
下载地址:http://code.google.com/p/wkhtmltopdf/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+ReleaseDate+Size+DownloadCount
需要说明的是,libwkhtmltox现在的版本已经是0.11了,但是本人在CentOS 6.2下安装了libwkhtmltox-0.11之后,在将网页转换成图片时会出错,最终选择了0.10版本,这个版本还是相当稳定的。
1.2.安装libwkhtmltox
下载并解压
#mkdir libwkhtmltox
#cd libwkhtmltox
#wget http://wkhtmltopdf.googlecode.com/files/libwkhtmltox-0.10.0_rc2-amd64.tar.bz2
#tar jxvf libwkhtmltox-0.10.0_rc2-amd64.tar.bz2
#ll
drwxr-xr-x 2 root root       59 Jan  3 20:58 examples
drwxr-xr-x 3 1000 1000       22 Nov  7  2010 include
drwxr-xr-x 2 1000 1000       28 Jan 31  2011 lib
安装
#cd lib
#cp libwkhtmltox.so /usr/local/lib/
#cd ../include
#cp -R wkhtmltox /usr/local/include/
1.3.安装phpwkhtmltox
下载并解压
#wget https://github.com/mreiferson/php-wkhtmltox/archive/master.zip
#unzip master.zip
作为php扩展安装
#cd php-wkhtmltox-master
#phpize
#./configure
#make install
修改PHP配置文件,追加
extension=phpwkhtmltox.so
重新加载系统动态链接库(重要,否则PHP无法完成扩展phpwkhtmltox)
#ldconfig
1.4.检查PHP是否已经支持phpwkhtmltox
#php -m
如果输出的内容包括phpwkhtmltox说明扩展成功。
1.5.小试“牛刀”,将谷歌首页保存为图片
1.5.1.编辑测试的php脚本test_html_to_image.php
<?php
wkhtmltox_convert(
    'image',
    array(
        'out' => '/tmp/test.jpg',
        'in' => 'http://www.google.com.hk/'
    )
);
?>
1.5.2.wkhtmltox_convert($type, $globalsetting, $objectsetting)说明
html转换为pdf示例:
<?php
wkhtmltox_convert('pdf',
    array(
        'out' => '/tmp/test.pdf',
        'imageQuality' => '95'
    ), // global settings
    array(
        array(
            'page' => 'http://www.phpboy.net/'
        ),
        array(
            'page' => 'http://www.baidu.com/'
        )
    )// object settings
);
?>
具体其他参数请参考:http://www.cs.au.dk/~jakobt/libwkhtmltox_0.10.0_doc/pagesettings.html#pagePdfGlobal
1.5.2.运行PHP
#php test_html_to_image.php
到tmp目录下就可以看到我们已经将google的首页保存为test.jpg图片,是不是很有成就感,把图片下载到本地,查看图片,你可能会发现中文显示为乱码,不用担心,请看下文。
1.6.让CentOS支持中文
#yum groupinstall chinese-support
安装完毕之后,再次运行php test_html_to_image.php,中文就不会出现乱码了,但是你可能会觉得中文显示得不好看,不用担心,请看下文。
1.7.让linux CentOS支持微软雅黑字体
1.7.1.下载或者从本地windows拷贝微软雅黑(注意从windows系统里面拷贝出来应该是有2个文件),并上传到linux服务器
1.7.2.把字体文件拷贝到/usr/share/fonts/xxx,其中xxx为新增字体文件夹,如msyh
#cd /usr/share/fonts/
#mkdir msyh
#cd msyh
1.7.3.建立字体缓存
#mkfontscale
#mkfontdir
#fc-cache -fv
1.8.让Linux CentOS支持Consolas字体(技术类博客可能会发布一个示例代码,大部分wordpress技术博客都会安装SyntaxHighlighter插件,而该插件代码显示字体首选的是Consolas字体,所以为了html转换成图片时示例代码显示得好看,我们也需要让linux支持Consolas字体)
1.8.1下载或者从本地windows拷贝Consolas(注意从windows系统里面拷贝出来应该是有4个文件),并上传到linux服务器
1.8.2.把字体文件拷贝到/usr/share/fonts/xxx,其中xxx为新增字体文件夹,如Consolas
#cd /usr/share/fonts/
#mkdir Consolas
#cd Consolas
1.8.3.建立字体缓存
#mkfontscale
#mkfontdir
#fc-cache -fv
安装完毕之后,你可以再次运行php test_html_to_image.php,如果你填写的网址对应的网页采用微软雅黑字体,该网页转换成图片的显示效果就比较美观了。

参考文档:
1.libwkhtmltox支持的参数说明http://www.cs.au.dk/~jakobt/libwkhtmltox_0.10.0_doc/pagesettings.html#pagePdfGlobal
2.自动生成网页截图(Screenshot)方法http://www.phpip.com/design/skill/A62009909P/23444.html
3.CentOS 安装中文语言包以及输入法 http://blog.chinaunix.net/uid-24352482-id-3203655.html

No comments:

Post a Comment