我已经使用PhantomJS生成网页的PNG图像,通常质量很好。该属性称为截屏,可以在
此处找到相关描述,并且还支持PNG,JPEG,GIF和PDF格式。
当转换为PDF时,页面文本会保留为文本。
在测试了一些其他库或程序之后,发现PhantomJS是最完美的解决方案。PhantomJS使用WebKit,一个真正的布局和渲染引擎。
一些示例可以在
https://github.com/ariya/phantomjs/wiki/Examples中找到。在
Rendering/rasterization部分中提到了以下脚本,可帮助您完成此过程:
rasterize.js rasterizes a web page to image or PDF
PhantomJS QuicStart Guide指出:
可以生成PDF输出,例如从Wikipedia文章中:
phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
或在制作打印机可用的速查表时:
phantomjs rasterize.js http://www.nihilogic.dk/labs/webgl_cheat_sheet/WebGL_Cheat_Sheet.htm webgl.pdf
我测试了几页PDF生成,如果页面符合标准,就会产生很好的结果。文本可选择并以高质量打印,但在某些页面上,PDF的布局与PNG中的布局不完全相同。下面是使用命令生成的两个截图:
$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.png
$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.pdf
我还测试了http://lab.simurai.com/buttons/。生成的pdf和png非常相似,下面是我将pdf光栅化到5641像素宽并裁剪其中一部分得到的样本。和之前的PDF示例一样,PDF中的文本是可选的,并且正如您所看到的,文本很清晰(无锯齿!)。
安装
我首先尝试在Centos5上从源码编译安装Qt库和PhantomJS,但没有成功。然后在Ubuntu 11.10上进行了尝试,这个过程非常轻松:
我下载了http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2,并使用以下命令进行解压:
tar -xjvf phantomjs-1.7.0-linux-x86_64.tar.bz2
然后将PhantomJS可执行文件复制到系统的bin目录:
$ cp phantomjs-1.7.0-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
并且phantomjs已经准备好运行。
如果生成的PDF不好,您可以尝试更新Webkit,但我想结果应该是足够的。PhantomJS拥有出色的更新周期,因此错误应该会在合理的时间内得到修复。
PhantomJS常见问题也提供了很好的信息和可能性。