因为项目须要,把HTML代码转为PDF或者图片进行保存。最开始使用Flying Saucer来把HTML代码生成为PDF文档,功能已经开发出来了,也可以完成转换功能,期间也遇到了中文支持以及图片路径的问题,也解决了,原本觉得这样就能够了,可是在测试期间发现有些PDF文档生成的样式有问题,搜索了一下发现,Flying Saucer是比较老的技术,如今也没人搞了,因此对于CSS3.0的支持很不友好。html
功能要实现啊,让别人改HTML代码也不现实,那就尝试着别的技术呗。后来想着能生成图片也行,就找了一下,发现使用CSSBOX能够把HTML代码生成为图片,而后就试了一下,果真能够,而后就开心的把这个功能集成到系统里面了。一直没出什么问题,结果悲剧又发生了,有一个页面使用CSS3渲染了一条斜着的直线,结果CSSBOX没法转换。linux
其实开始的时候就知道有wkhtmltopdf能够把HTML代码生成为PDF文档,可是这个其实是要安装一个软件,在Java代码中调用这个软件执行转换,当时以为没有别的技术直接引入jar包方便,就没有尝试,如今实在是没有办法了,就尝试一下吧。由于我如今是要把HTML代码生成为图片,因此我使用的是wkhtmltoimage,其实没什么差异,在安装wkhtmltox软件时,会同时安装wkhtmltopdf和wkhtmltoimage。centos
使用wkhtmltoimage的时候也没少走弯路,主要是对Linux不熟悉吧,在安装的时候遇到了很多问题。如今把我本身摸索的知识分享给你们,你们能够参考一下,只是我的观点,不正确的地方望你们见谅。下面就来介绍在Java调用这个软甲的详细用法。具体分为Windows环境和Linux环境。测试
一、软件下载地址:htm
官网下载地址首页:http://wkhtmltopdf.org/downloads.html图片
能够在这个页面下载到最新版本的wkhtmltox。开发
我没有使用最新版的,我使用的是0.12.2版本,下载地址为:http://download.gna.org/wkhtmltopdf/0.12/0.12.2/文档
二、Windows环境安装get
Windows环境安装软件我就很少说了,我是在http://download.gna.org/wkhtmltopdf/0.12/0.12.2/这个网址,下载的wkhtmltox-0.12.2_msvc2013-win64.exe这个版本,32位的能够选择32位的版本下载,下载完成后就是双击安装了。安装完成后在安装目录能找到wkhtmltopdf.exe和wkhtmltoimage.exe,这两个执行程序就是咱们用来转换PDF和转换图片的,后面会说到如何进行调用。cmd
三、Linux环境安装
我是在http://download.gna.org/wkhtmltopdf/0.12/0.12.2/地址下载的wkhtmltox-0.12.2_linux-centos6-i386.rpm这个版本的RPM包,因为我虚拟机安装的是CentOS6.5的32位,因此下载的是这个版本,大家能够根据实际状况,这个网址上有Linux的版本和32位64位对应的版本下载,根据实际状况选择便可。
下载方式,能够在Linux上直接使用wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-centos6-i386.rpm 进行下载,若是像我同样使用的是虚拟机,也能够先下载到本机上,而后在Linux上使用rz -be进行上传,注意使用rz命令上传大文件时,必定要加这个-be命令,不然上传不成功。若你的Linux中没有rz命令,那么可使用yum -y install lrzsz命令来安装rz和sz命令。
下面开始安装:
1)进入到RPM包下载的目录下,执行rpm -ivh wkhtmltox-0.12.2_linux-centos6-i386.rpm命令,结果出现以下所示:
失败缘由是缺乏xorg-x11-fonts-Type1和xorg-x11-fonts-75dpi依赖,那么咱们要先装依赖。
2)安装xorg-x11-fonts-Type1依赖:yum -y install xorg-x11-fonts-Type1。
3)安装xorg-x11-fonts-75dpi依赖:yum -y install xorg-x11-fonts-75dpi。
4)再次安装wkhtmltox:rpm -ivh wkhtmltox-0.12.2_linux-centos6-i386.rpm,OK,安装成功。若是你们在安装时还缺乏其余依赖,那么须要先把缺乏的依赖安装以后再安装wkhtmltox。查询缺乏的依赖方法是 yum search xxxx,xxxx是缺乏的依赖关键字,而后从查询结果中找到正确的yum源进行安装。
5)安装完成后,咱们可使用wkhtmltoimage http://www.baidu.com 1.jpg或者wkhtmltopdf http://www.baidu.com 1.pdf来测试是否安装成功。
四、Java程序调用
Java调用时,不须要添加额外的Jar包。
Java调用代码:
public class CustomWKHtmlToPdfUtil {
public String getCommand(String sourceFilePath, String targetFilePath) {
String system = System.getProperty("os.name");
if(system.contains("Windows")) {
return "D:\\Program Files\\wkhtmltopdf\\wkhtmltoimage.exe " + sourceFilePath + " " + targetFilePath;
}else if(system.contains("Linux")) {
return "wkhtmltoimage " + sourceFilePath + " " + targetFilePath;
}
return "";
}
public static void main(String[] args) throws Exception{
CustomWKHtmlToPdfUtil util = new CustomWKHtmlToPdfUtil();
String command = util.getCommand("e:/html/result.html", "e:/html/result.jpg");
Process process = Runtime.getRuntime().exec(command);
process.waitFor(); //这个调用比较关键,就是等当前命令执行完成后再往下执行
System.out.println("执行完成");
}
}
其实就是使用Java调用cmd的执行命令,可是调用要区分Windows和Linux系统,若是是Windows系统,则必需要指定wkhtmltoimage或者wkhtmltopdf的位置,我在Windows的安装位置是D:\Program Files\wkhtmltopdf,所以我在上面调用wkhtmltoimage时使用的路径是D:\Program Files\wkhtmltopdf\wkhtmltoimage.exe。在Linux环境下,因为软件在安装时,会把wkhtmltopdf和wkhtmlimage安装到系统命令中,所以不须要指定安装路径,直接调用就能够了。
我比较推荐使用wkhtmltoimage生成JPG图片,我调用wkhtmltopdf生成PDF时会有点问题。以上是个人一些经历,但愿对你们有用!