1、参考
2、说明
3、代码
package com.kikyo.data.utils;
import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.*;
public class PdfHtmlToPdfUtils {
private static String toPdfTool = "D:\\Program\\tools\\wkhtmltox-0.12.6-1.mxe-cross-win64\\wkhtmltox\\bin\\wkhtmltopdf.exe";
private static String Font = "C:\\Windows\\Fonts\\simsun.ttc";
/**
* html转pdf
*
* @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径
* @param destPath pdf保存路径
* @return 转换成功返回true
*/
public static boolean convert(String srcPath, String destPath) throws Exception {
File parent = new File(destPath).getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
StringBuilder cmd = new StringBuilder();
if (System.getProperty("os.name").indexOf("Windows") == -1) {
toPdfTool = "/usr/local/bin/wkhtmltopdf"; //非windows 系统
}
String r_header = "https://xxxxxxxxxxxxxxx/uploadCard/header.html";
String r_footer = "https://xxxxxxxxxxxxxxxx/uploadCard/footer.html";
cmd.append(toPdfTool);
cmd.append(" ");
cmd.append(" --header-html " + r_header + "?");
cmd.append(" --footer-html " + r_footer + "?");
cmd.append(" --margin-top 3cm ");//设置页面上边距 (default 10mm)
cmd.append(" --margin-bottom 2cm ");
cmd.append(" --header-spacing 5 ");// (设置页眉和内容的距离,默认0)
cmd.append(" --footer-spacing 5 ");// (设置页脚和内容的距离)
cmd.append(srcPath);
cmd.append(" ");
cmd.append(destPath);
boolean result = true;
try {
System.out.println("aaaaaaaaaa1->" + cmd.toString());
Process proc = Runtime.getRuntime().exec(cmd.toString(), new String[0]);
System.out.println("aaaaaaaaaa2->");
ThreadPoolHelper.execute(() -> {
print_msg(proc.getErrorStream());
});
System.out.println("aaaaaaaaaa3->");
ThreadPoolHelper.execute(() -> {
print_msg(proc.getInputStream());
});
System.out.println("aaaaaaaaaa4->");
proc.waitFor();
System.out.println("aaaaaaaaaa7->");
} catch (Exception e) {
System.out.println("aaaaaaaaaa8->" + e.getMessage());
result = false;
e.printStackTrace();
throw e;
}
System.out.println("aaaaaaaaaa9->" + Boolean.valueOf(result).toString());
return result;
}
public static boolean convertHtmlToPdf(String inputFile, String outputFile) throws Exception {
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
String url = new File(inputFile).toURI().toURL().toString();
System.out.println(url);
renderer.setDocument(url);
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); //宋体(新宋体) simsun.ttc
//解决图片的相对路径问题
//renderer.getSharedContext().setBaseURL("file:/D:/");
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();
return true;
}
public static void itextHtmlToPdf(String path, String pdfPath) throws Exception {
String url = new File(path).toURI().toURL().toString();
FileOutputStream os = new FileOutputStream(pdfPath);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
// 解决中文不显示问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(Font, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.layout();
renderer.createPDF(os);
}
public static void print_msg(InputStream inputStream) {
try {
InputStreamReader isr = new InputStreamReader(inputStream, "utf-8");
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line.toString()); //输出内容
}
isr.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
public static void main(String[] args) throws Exception {
//PdfHtmlToPdfUtils.convert("http://www.baidu.com", "d:/ceshi.pdf");
//PdfHtmlToPdfUtils.convertHtmlToPdf("pdf.html", "d:/ceshi2.pdf");
//PdfHtmlToPdfUtils.convert("https://xxxxxxxxxxx/static/pages/consulationCustomerDetail.html?id=139", "d:/ceshi.pdf");
PdfHtmlToPdfUtils.convert("https://xxxxxxxxxxxxxx/dialog/getDiseaseMessage?id=7882#", "C:\\Users\\K\\Desktop\\test.pdf");
}
}