pdf 生成
阿新 • • 發佈:2018-12-14
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("\\\\", "/");
//html中如果有圖片,圖片的路徑則使用這裡設定的路徑的相對路徑,這個是作為根路徑
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);
//html中如果有圖片,圖片的路徑則使用這裡設定的路徑的相對路徑,這個是作為根路徑
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;
}