packagecom.ra.truck.createpdf;importcom.itextpdf.text.pdf.BaseFont;import com.lowagie.text.*;importcom.lowagie.text.Font;importcom.lowagie.text.Rectangle;importcom.lowagie.text.pdf.PdfWriter;importfreemarker.template.Configuration;importfreemarker.template.Template;importorg.xhtmlrenderer.pdf.ITextFontResolver;importorg.xhtmlrenderer.pdf.ITextRenderer;import java.awt.*;import java.io.*;importjava.util.HashMap;importjava.util.Map;/*** @Auther: lanhao
* @Date: 2018/8/7 11:46
* @Description:*/
public classJavaToPdfHtmlFreeMarkerFS {private static final String DEST ="../HelloWorld_CN_HTML_FREEMARKER_FS_index.pdf";private static final String HTML = "demo.html";private static final String FONT = "simsun.ttc";private static final String LOGO_PATH ="file:/"+PathUtil.getCurrentPath()+"/"+"demo448"+".png";private static Configuration freemarkerCfg=null;static{
freemarkerCfg=newConfiguration();//freemarker的模板目录
try{
freemarkerCfg.setDirectoryForTemplateLoading(newFile(PathUtil.getCurrentPath()));
}catch(IOException e) {
e.printStackTrace();
}
}public static voidmain(String[] args){
String os=System.getProperty("os.name");
System.out.println(os);
Map data = new HashMap<>();
data.put("name","lan浩");
String content=freeMarkerRender(data,HTML);
createPdf(content,DEST);
}/*** freemarker渲染html*/
public static String freeMarkerRender(Mapdata,String htmlTmp) {
Writer out= newStringWriter();try{//获取模板,并设置编码方式
Template template =freemarkerCfg.getTemplate(htmlTmp);
template.setEncoding("UTF-8");//合并数据模型与模板
template.process(data, out); //将合并后的数据和模板写入到流中,这里使用的字符流
out.flush();returnout.toString();
}catch(Exception e) {
e.printStackTrace();
}finally{try{
out.close();
}catch(IOException ex) {
ex.printStackTrace();
}
}return null;
}private static voidcreatePdf(String content,String dest) {try{
ITextRenderer render= newITextRenderer();//解决中文不显式问题
ITextFontResolver fontResolver =render.getFontResolver();
fontResolver.addFont(FONT,BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);//解析html生成pdf
render.setDocumentFromString(content);//解决图片相对路径的问题
render.getSharedContext().setBaseURL(LOGO_PATH);
render.layout();
render.createPDF(newFileOutputStream(dest));
}catch(Exception e) {
e.printStackTrace();
}
}
}