java使用wkhtmltopdf将html转成pdf

工具 “wkhtmltopdf” 简介
【官网】:【http://wkhtmltopdf.org/

【下载请点击这里】 http://wkhtmltopdf.org/downloads.html

工具全名叫 “wkhtmltopdf” ; 是一个使用 Qt WebKit 引擎做渲染的,能够把html 文档转换成 pdf 文档 或 图片(image) 的命令行工具。(强调一下:是 “命令行工具” )

支持多个平台,可在win,linux,os x 等系统下运行。

使用方式
使用前的准备
使用前一定要记得先下载安装才行,对于不同的操作系统可能会有需要设置环境变量的情况。如果你安装后在命令行执行 wkhtmltopdf -V 提示以下信息:
在这里插入图片描述

这就说明你需要配置系统的环境变量了,根据情况把你安装wkhtmltopdf目录下的bin子目录加到 PATH 环境变量下。

我用的是win系统,我的安装到了D盘wkhtmltopdf目录下,所以我需要把 D:\wkhtmltopdf\bin 目录加入到环境变量 PATH 中

正确安装后是执行 wkhtmltopdf -V 会得到如下提示:在这里插入图片描述

开始使用
命令格式:wkhtmltopdf [GLOBAL OPTION]… [OBJECT]…

命令行工具自然是没有图形界面的。

光看上面的命令格式好像不太简单理解应该怎么用啊,别急,下面会有详细介绍的,不过为了满足部分急性子,我先给几个例子在下面。伸手堂可以直接拿去用,不愿意深入了解的同学就不必再浪费时间了。

把一个html文件转换成PDF
命令格式 :wkhtmltopdf xxx.html xxx.pdf

D:\MyWorkSpace\markdown>wkhtmltopdf 1.html 1.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

当你看到类似上面的内容时,说转换已经完成了,去打开转换好的pdf文档慢慢研究吧。

把一个 url 指向的网页转换成PDF
命令格式 : wkhtmltopdf url xxx.pdf

D:\MyWorkSpace\markdown>wkhtmltopdf www.yioks.com yioks.pdf
Loading pages (1/6)
QFont::setPixelSize: Pixel size <= 0 (0)                     ] 55%
Counting pages (2/6)
QFont::setPixelSize: Pixel size <= 0 (0)=====================] Object 1 of 1
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

当你看到如上信息时代表转换成功,是不是很酷。

把html文件 和 url指向的网页 转换成图片
命令格式 :

在这里插入图片描述
其实和转pdf时的参数是一样的,只是命令和输出文件的扩展名变了。上的命令格式中,我是把图片保存成了 jpg 格式,当然,如果你愿意也可以保存成其他图片格式(如:png),但文件可能会变大很多倍。在我的测试中,jpg格式文件是最小的。

Java调用使用:

线程类

package leyan.website.util;


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();
        }
    }
}

工具类service:

    //wkhtmltopdf在系统中的路径
    private static final String toPdfTool = "D:\\Tools\\wkhtmltox\\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();
        String ab="asdasd";
        cmd.append(toPdfTool);
        cmd.append(" ");
        cmd.append("  --header-line ");//页眉下面的线
        cmd.append("  --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
        cmd.append("  --footer-line ");//页脚下划线
        //cmd.append("  -–header-left");
        cmd.append("  --footer-left \"Page [page] of [topage]\" ");
        cmd.append("  --footer-right www.leyan.com ");
        cmd.append("  --margin-top 30mm ");//设置页面上边距 (default 10mm)
        cmd.append(" --header-spacing 10 ");//    (设置页眉和内容的距离,默认0)
        cmd.append(srcPath);
        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;
    }

controller调用:

    //点击转换pdf
    @GetMapping("/pdfTransition")
    @ResponseBody
    public void pdfTransition(@RequestParam String url){
        System.out.println(url);
        ChemistryStorage.convert(url,"d:/wkhtmltopdf.pdf");
        System.out.println("aa");

    }

前端事件:

  		 <form>
            <input type="button" id="download" value="点击下载">
        </form>
<script th:inline="javascript" type="text/javascript">
    $(function () {
        // //分子式
        // var formula = $("#formulaHTML").text();
        // $("#formulaHTMLs").append(formula)


        $("#download").click(function () {
            // console.log(window.location.href)
            var url=document.URL
            //$("#download").attr("style","display: none")
            $.get('/pdfTransition', {
                url:url
            }, function (data) {
                console.log(data);
            }, 'text');

            console.log()

        })
    })
</script>

链接:https://www.jianshu.com/p/559c594678b6
链接:https://developer.aliyun.com/article/91154

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值