pom配置
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.0.9</version>
</dependency>
处理逻辑
/**
* 使用freemarker得到html内容
* @param ftlPath
* @param ftlName
* @param o
* @return
* @throws ParseException
* @throws IOException
* @throws TemplateException
*/
private String getPdfContent(String ftlPath, String ftlName, Object o) throws TemplateException, IOException {
String html = null;
Template tpl = getTemplate(ftlName,ftlPath);
tpl.setEncoding("UTF-8");
StringWriter writer = new StringWriter();
tpl.process(o, writer);
writer.flush();
html = writer.toString();
return html;
}
/**
* 生成PDF
* @param path
* @param html
* @param out
* @throws DocumentException
* @throws IOException
*/
private void generatePDF(String path, String html, OutputStream out) throws DocumentException, IOException{
ITextRenderer render = new ITextRenderer();
render.getFontResolver().addFont(path + "/ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
render.getFontResolver().addFont(path + "/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
render.setDocumentFromString(html);
path = path.replaceAll("\\\\", "/");
render.getSharedContext().setBaseURL("file:/"+path+"/");
render.layout();
render.createPDF(out);
render.finishPDF();
render = null;
}
/**
* 生成PDF
* @param path
* @param html
* @param out
* @throws DocumentException
* @throws IOException
*/
private void generatePDF(String contextPath, String html, OutputStream out) throws DocumentException, IOException{
String ftlPath = contextPath + "WEB-INF" + File.separator + "template" + File.separator + "order" + File.separator + "ftl";
ITextRenderer render = new ITextRenderer();
render.getFontResolver().addFont(ftlPath + "/msyh.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
File f = new File(contextPath + "static");
URL base = f.toURI().toURL();
html = html.replaceAll("&(?!amp;)", "&");
render.setDocumentFromString(html,base.toString());
render.layout();
render.createPDF(out);
render.finishPDF();
render = null;
}