为什么使用wkhtmltopdf
HTML转PDF的实现方式有很多,但是转换出来的PDF的质量又好有坏。之前试过IText和一些其他的工具,但是不是格式乱了就是由于标签书写不规范(没有结尾标签)导致转换出来的效果都不太满意,最后发现wkhtmltopdf转换格式什么基本没有问题而且使用也是比较简单就使用wkhtmltopdf。
第一步 下载安装
官网地址:https://wkhtmltopdf.org/downloads.html
根据自己的系统来选择安装包。
第二步 配置环境变量
安装完成之后找到安装路径,将其配置到环境变量中,方便使用。
配置完成环境变量之后就可以测试一下了。
看看转换效果。
可以看到转换效果是非常不错的。
第三步 代码调用wkhtmltopdf进行转换
辅助代码
package fangrong.com.cn.common.utils;
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;
}
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();
}
}
}
转换代码
package fangrong.com.cn.common.utils;
import java.io.File;
/**
* Input表单或JavaScript脚本支持:--enable-forms,下面这些是网友整理的参数说明
* wkhtmltopdf [OPTIONS]... [More input files]
到此集成完成。
使用过程中碰到的的一些坑
这些坑主要是出现在Linux环境下的
一般乱码的主要原因就是因为Linux中没有simsun的字体,将C:\Windows\Fonts中的simsun.ttc拷贝到linux服务器/usr/share/fonts/目录下,下次再生成pdf就正常了
- Docker容器中的java程序无法调用到Linux本地的wkhtmltopdf脚本
需要将本地的文件挂载映射到dockers容器当中