Jtidy补全html标签并使用wkhtmltopdf插件将html转pdf

遇到的问题:

  1. html转pdf时页面太宽,后来发现是由于html标签未关闭
  2. 使用itext转pdf,有些表内套表格样式错乱
  3. html转pdf时乱码

解决思路:

  1. 获取html文件编码格式
  2. 使用Jtidy处理html文件标签问题,读取文件时指定获取到的特定编码格式,并生成补全的html
  3. 使用wkhtmltopdf插件将html转为pdf。(单独使用此插件有时会产生乱码,如使用Jtidy转换后汉字都转为Unicode编码,再使用此插件不再出现乱码问题)

准备:

  1. 下载wkhtmltopdf插件,安装后配置path,此插件需要配合pdfbox使用:【下载
  2. wkhtmltopdf 中文参数详解
  3. 代码下载由于字数太长所以将实现代码打成了zip包:【下载代码
  4. 此代码开发关于wkhtmltopdf中linux和windows问题最多参考文档:动态生成HTML并生成PDF和图片

解决过程:
11. 添加 jtidy包

		<dependency>
			<groupId>net.sf.jtidy</groupId>
			<artifactId>jtidy</artifactId>
			<version>r938</version>
		</dependency>
  1. 以下部分代码,其他由于字数太长转移到了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的代码,如果上面的打包代码中识别有问题,可以下载这个里面的作为参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值