在实际也无需求中,需要用到网页快照功能,并能够查看历史网页快照功能,因此需要实现网页格式的固化保存,保存为图片或PDF文件的形式。
1. 技术研究
做这样研究了网上许多技术,大都存在各种各样的缺陷。
1.1. html2canvas&jsPDF
感兴趣的读者,可以参考: https://github.com/linwalker/render-html-to-pdf
该种方法,主要是通过JS调用实现,无法通过脚本,或者Java API的方法调用来实现转化工作。
1.2. iTextRender&pdfWriter
这种方式能够实现简单的Html2PDF功能,但存在以下缺点
- 对网页格式要求较高;
- 无法对图片等复杂元素进行处理。
主要参考博文:
Itext的PDF生成方案
freemarker+ITextRenderer 生成html转pdf
iTextRenderer(Flying Saucer) HTML转PDF
1.3. pdf-kit
pdf-kit主要通过JS生成PDF文件,在HTML截图方面比较欠缺,作者没有发现能够用于截图功能。
PDF-KIT官网
1.4. cssbox
cssbox主要用作前段css渲染功能,但没有提供输出为图片或PDF接口。
CSSBOX源码文件与说明
1.5. Phantomjs
爬虫或自动化测试重量级程序,能够实现爬虫功能与自动化测试任务。并能够使用代理服务器,或输出HTML为图片或DPF文件的形式。能够输出单个网页控件的图片或DPF文件,实现精准输出。
但Phantomjs存在如下问题:
- 相应速度较慢;
- 调用繁琐,需要自己写JS脚本。
1.6. Headless Chrome or other browser
使用无头浏览器,调用snapshot接口,能够实现截图功能。
1.7. HtmlUnitDriver调用浏览器API
使用HtmlUnitDriver调用浏览器API,如Chrome、Firefox、IE等主浏览器,均能实现截图功能。
缺点:
- 需要编写程序,调用API;
- 无法直接调用脚本实现截图功能。
2. wkhtmltopdf
该程序能够实现将Html转化为图片,或PDF文件的功能,具体下载地址为:wkhtmltopdf官网下载
2.1. 安装流程
## Download from Org website
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
## uncompress
tar xvJf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
## install font : chinese : 宋体
## /usr/share/fonts/XXX
安装中文字体,主要是考虑到网页内容为中文会出现中文乱码问题。
2.2. 调用
## to pdf
wkhtmltopdf http://www.baidu.com ~/baidu.pdf
## to image
wkhtmltopdf http://www.baidu.com ~/baidu.png
具体详情,可以参考wkhtml2pdf的帮助信息。
2.3. 选择原因
- 可以通过shell直接调用;
- 支持多线程并发操作;
- 调用简单、方便。
2.4. 存在缺点
- 存在TimeoutError;
- 偶尔存在加载阻塞,无法正常加载网页内容。这些网页通常是信息量较大、存在高清图片等问题。
3. 总结
- 如果需要HTML全文转化,那么wkHtml2PDF可以作为首要选项;
- 如果需要获取HTML中部分元素进行转化为图片、PDF,那么phtomjs是一个很好的选择。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!