大家好,我是傻明蚕豆,在我上一篇文章[HTML转PDF]中,写到了用itextpdf把html转为pdf文件,但itextpdf存在很多缺点,对多种样式不支持,所以这次使用wkhtmltopdf工具,可以90%还原html,我觉得大家应该都会喜欢。(https://www.jianshu.com/p/2819fa1e8d72)
wkhtmltopdf
wkhtmltopdf是什么东东?各位还是自行百度吧,或者可以看官网哦。

在这里选择合适的下载,我下载了win和centos的,
双击wkhtmltox.exe安装,安装完后进入bin目录,如下所示:
在该目录下cmd,运行命令:
wkhtmltopdf.exe https://wkhtmltopdf.org C:/wkhtmltopdf.pdf
上面的命令就是把wkhtmltopdf首页生成wkhtmltopdf.pdf文件,保存在C盘。
如果是centos系统,那就安装wkhtmltox-0.12.6-1.centos7.x86_64.rpm。
安装命令:
rpm -ivh wkhtmltox-0.12.6-1.centos7.x86_64.rpm
查看安装路径:
rpm -ql wkhtmltox-0.12.6-1.centos7.x86_64
我这里找到路劲是:/usr/local/bin/wkhtmltopdf
cd到该路径下,把简书首页生成pdf命令:
wkhtmltopdf https://www.jianshu.com /home/test/jianshu.pdf
使用方法和win系统一样,wkhtmltopdf就介绍到这里,下面是使用java调用wkhtmltopdf。
java调用wkhtmltopdf
首先创建一个springboot项目,然后创建一个html页面,运行项目,访问url能看到页面,下面是我的html页面:
java调用wkhtmltopdf不需要maven依赖,下面直接上代码。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class HtmlToPdfInterceptor extends Thread{
private InputStream is;
public HtmlToPdfInterceptor(InputStream is){
this.is = is;
}
@Override
public void run(){
try{
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line.toString()); //输出内容
}
}catch (IOException e){
e.printStackTrace();
}
}
}
import java.io.File;
/**
* 使用wkhtmltopdf工具把html转为pdf
*/
public class HtmlToPdfUtil {
//wkhtmltopdf在系统中的路径
private static final String toPdfTool = "C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
/**
* html转pdf
*
* @param srcPath
* html路径,可以是硬盘上的路径,也可以是网络路径
* @param destPath
* pdf保存路径
* @return 转换成功返回true
*/
public static boolean convert(String srcPath, String destPath) {
File file = new File(destPath);
File parent = file.getParentFile();
// 如果pdf保存路径不存在,则创建路径
if (!parent.exists()) {
parent.mkdirs();
}
StringBuilder cmd = new StringBuilder();
cmd.append(toPdfTool);
cmd.append(" ");
//centos系统下,拼接html页面不需要用双引号
//正确: /usr/local/bin/wkhtmltopdf 192.168.1.1:8080/test /test/test.pdf
//错误: /usr/local/bin/wkhtmltopdf "192.168.1.1:8080/test" /test/test.pdf
//cmd.append(" \"");
cmd.append(srcPath);
//cmd.append("\" ");
cmd.append(" ");
cmd.append(destPath);
boolean result = true;
try {
Process proc = Runtime.getRuntime().exec(cmd.toString());
HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());
HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());
error.start();
output.start();
proc.waitFor();
} catch (Exception e) {
result = false;
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
HtmlToPdfUtil.convert("http://localhost:18888/wechat/index", "H:/wechat.pdf");
}
}
直接运行main方法即可生成pdf,如果是centos系统,直接修改toPdfTool 变量即可,下面是生成的pdf,还原度相当高哦。
哈哈,就是这么简单,大家都学会了吗?
谢谢观看!
版权声明:本文为weixin_44668634原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。