1、特点
Wkhtmltopdf可直接把浏览器中浏览的网页转换成一个pdf,他是一个把html页面转换成pdf的软件(需要安装在服务器上)。使用时可通过java代码调用cmd指令完成网页转换为pdf的功能。
官网地址: https://wkhtmltopdf.org/downloads.html
2、Linux下的使用
无需任何安装,现在可以开始直接使用了。
1、先将刚才下载的包解压:tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
2、然后运行/data/wkhtmltox/bin/wkhtmltopdf www.baidu.com 1.pdf
3、windows下的使用
进入wkhtmltopdf安装的bin目录下,执行
wkhtmltopdf.exe www.baidu.com 1.pdf
4、java代码
HtmlToPdfInterceptor.java
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;
}
@Override
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); //输出内容
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
HtmlToPdf.java
import java.io.File;
public class HtmlToPdf {
// wkhtmltopdf在系统中的路径,需要换成自己的目录地址
//private static String toPdfcmd = "wkhtmltopdf-amd64";
private static String toPdfcmd = "D:\\software\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
/**
* html转pdf
*
* @param srcPath
* html路径,可以是硬盘上的路径,也可以是网络路径
* @param destPath
* pdf保存路径
* @return 转换成功返回true
*/
public static boolean convert(String srcPath, String destPath) {
System.out.println("--------html转pdf start----------");
File file = new File(destPath);
File parent = file.getParentFile();
// 如果pdf保存路径不存在,则创建路径
if (!parent.exists()) {
parent.mkdirs();
}
StringBuilder cmd = new StringBuilder();
cmd.append(toPdfcmd);
cmd.append(" ");
cmd.append(" --page-size A4 ");//默认的页面尺寸是 A4 指定你想要的页面尺寸,如:A3,Letter 和 Legal等
cmd.append(" --minimum-font-size 18 ");// 字体大小调整
// wkhtmltopdf-amd64 --page-size A3 iversion.html iversion.pdf
// cmd.append(" --footer-html file:///" + "https://www.speechb.com");// (添加一个HTML页脚,后面是网址)
/* cmd.append(" --header-line");// 页眉下面的线
cmd.append(" --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
cmd.append(" --margin-top 3cm ");// 设置页面上边距 (default 10mm)
cmd.append(" --header-html file:///" + "https://blog.csdn.net/x6582026/article/details/53835835");// (添加一个HTML页眉,后面是网址)
cmd.append(" --header-spacing 5 ");// (设置页眉和内容的距离,默认0)
cmd.append(" --footer-center 第[page]页/共[topage]页");//设置在中心位置的页脚内容
//cmd.append(" --footer-html file:///" + "https://blog.csdn.net/x6582026/article/details/53835835");// (添加一个HTML页脚,后面是网址)
cmd.append(" --footer-line");// * 显示一条线在页脚内容上)
cmd.append(" --footer-spacing 5 ");// (设置页脚和内容的距离)*/
cmd.append(srcPath);
cmd.append(" ");
cmd.append(destPath);
System.out.println("--------html转pdf cmd----------"+cmd.toString());
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;
}
public static void main(String[] args) {
convert("www.blog.speechb.com", "1.pdf");
}
}