遇到的问题:
- html转pdf时页面太宽,后来发现是由于html标签未关闭
- 使用itext转pdf,有些表内套表格样式错乱
- html转pdf时乱码
解决思路:
- 获取html文件编码格式
- 使用Jtidy处理html文件标签问题,读取文件时指定获取到的特定编码格式,并生成补全的html
- 使用wkhtmltopdf插件将html转为pdf。(单独使用此插件有时会产生乱码,如使用Jtidy转换后汉字都转为Unicode编码,再使用此插件不再出现乱码问题)
准备:
- 下载wkhtmltopdf插件,安装后配置path,此插件需要配合pdfbox使用:【下载】
- wkhtmltopdf 中文参数详解
- 代码下载由于字数太长所以将实现代码打成了zip包:【下载代码】
- 此代码开发关于wkhtmltopdf中linux和windows问题最多参考文档:动态生成HTML并生成PDF和图片
解决过程:
11. 添加 jtidy包
<dependency>
<groupId>net.sf.jtidy</groupId>
<artifactId>jtidy</artifactId>
<version>r938</version>
</dependency>
- 以下部分代码,其他由于字数太长转移到了jar包中—只测试了windows环境,Linux环境需要适当修改:
/**
* @author
* @title Wkhtmltopdf
* @Description:
* @date 2020/8/4
*/
public class Wkhtmltopdf {
// 文件夹路径
private static String pathDir = "F:\\Administrator\\Desktop\\签报管理-20200723-0723\\";
// 输入文件名(待处理html)
private static String infileName = "处理单.htm";
// Jtidy补全后输出文件名
private static String outfileName = "out.htm";
private static String infilePath = pathDir+infileName;
private static String outfilePath = pathDir+outfileName;
public static void main(String[] args) throws Exception {
// Tidy处理Start---------------------
Tidy tidy = new Tidy(); //使用Jtidy几乎只需要用的这一个类
//设置jtidy的配置文件,当然你也可以在程序根据需要中设置
tidy.setConfigurationFromFile("F:\\Administrator\\Desktop\\处理单宽度问题\\处理单宽度问题\\config.txt");
tidy.setErrout(new PrintWriter("F:\\Administrator\\Desktop\\处理单宽度问题\\处理单宽度问题\\error.txt")); //输出错误与警告信息,默认输出到stdout
//需要转换的文件,当然你也可以转换URL的内容
FileInputStream in = new FileInputStream(infilePath);
InputStreamReader inputStream = new InputStreamReader(in, EncodingDetect.detect(infilePath));
FileOutputStream out = new FileOutputStream(outfilePath); //输出的文件
tidy.parse(inputStream, out); //开始转换了~~~Jtidy把所有东西都封装好了,哈哈~~
out.close(); //转换完成关闭输入输出流
in.close();
// Tidy处理END---------------------
// html转pdf--start---------------------
// 设置wkhtmltopdf插件使用的参数
Map<String, Object> option = new HashMap<>();
option.put("page-height","297");
option.put("page-width","210");
Wkhtmltopdf wkhtmltopdf = new Wkhtmltopdf();
wkhtmltopdf.execute(outfilePath, pathDir+"处理单.pdf", option);
// html转pdf--end---------------------
}
}
参考:
最好用Html转pdf的工具——wkhtmltopdf
wkhtmltopdf的github实现
wkhtmltopdf 中文参数详解
动态生成HTML并生成PDF和图片:这个里面包含自动匹配windows和linux的代码,如果上面的打包代码中识别有问题,可以下载这个里面的作为参考。