工具 “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