package com.hx.util; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; import org.springframework.core.io.ClassPathResource; import java.io.*; import java.util.Date; import java.util.HashMap; import java.util.Map; public class TempltUtil { public static final String PREVIEW_DOC = "/temp.docx"; public static final String TEMP_URL = "temp"; public static final String TEMP_NAME = "contract.tpl"; /** * * @param tempUrl 模板所在文件夹 * @param tempName 模板名称 * @return * @throws IOException */ public static Template configTemplate(String tempUrl,String tempName) throws IOException { Configuration config = new Configuration(); ClassPathResource classPathResource = new ClassPathResource(tempUrl); config.setDirectoryForTemplateLoading(classPathResource.getFile()); config.setObjectWrapper(new DefaultObjectWrapper()); Template template = config.getTemplate(tempName, "UTF-8"); return template; } /** * * @param tempUrl 模板所在文件夹 * @param temp 模板名称 * @param copyUrl 复制文件路径 * @param data 模板数据map * return 生成路径 */ public static String toPreview(String tempUrl,String temp,String copyUrl, Map data){ try { Template template = configTemplate(tempUrl,temp); ClassPathResource classPathResource = new ClassPathResource(tempUrl+"/"+PREVIEW_DOC); //生成新的模板 File tempFile = classPathResource.getFile(); copyUrl = copyUrl+"/"+DateUtil.dateFormat(new Date(),"yyyyMMddHHmmss")+tempFile.getName(); File file = new File(copyUrl); FileUtils.copyFile(tempFile,file); File file2 = new File(copyUrl); FileOutputStream fos = new FileOutputStream(file2); Writer out = new OutputStreamWriter(fos, "UTF-8"); template.process(data, out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } return copyUrl; } /** * * @param templateUrl 模板路径目录,不包括模板名称,如 ./src/main/resources/jsonFile * @param templateName 模板名称,如:data.tpl * @param savaPath 生成文件存放目录,如 ./src/main/resources/jsonFile * @param name 生成的文件名称,包括后缀名称 * @param data 模板里面内容 * @throws Exception */ public static String createDataFile(String templateUrl,String templateName, String savaPath, String name,Map data) throws IOException { String targetFile = null; Writer out = null; if(!SimpleTool.checkNotNull(templateUrl)) { throw new RuntimeException("templateUrl 为空"); } if(!SimpleTool.checkNotNull(templateName)) { throw new RuntimeException("templateName 为空"); } if(!SimpleTool.checkNotNull(savaPath)) { throw new RuntimeException("savaPath 为空"); } try { if(!savaPath.endsWith("/")){ savaPath = savaPath+"/"; } if(!templateUrl.endsWith("/")){ templateUrl = templateUrl +"/"; } //为了解决spingBoot打包成jar获取不了文件,把文件保存到本地 //拿到jar里面的文件流 ClassPathResource classPathResource = new ClassPathResource(templateUrl+templateName); //保存模板图片路径 String saveTempUrl = savaPath+"temp/"; //判断是否存在了 File temFile = new File(saveTempUrl+templateName); if(temFile.exists()){ temFile = temFile.getParentFile(); }else{ //不存在就创建一个 temFile = FileUtils.inputStreamToFile(classPathResource.getInputStream(),saveTempUrl,templateName); temFile = temFile.getParentFile(); } // 反射end Configuration cfg = new Configuration(); // 指定模板文件从何处加载的数据源,这里设置成一个文件目录 cfg.setDirectoryForTemplateLoading(temFile); cfg.setObjectWrapper(new DefaultObjectWrapper()); cfg.setDefaultEncoding("UTF-8"); // 获取或创建模板 Template template = cfg.getTemplate(templateName); template.setEncoding("UTF-8"); // String targetFile = "./src/template/test.html"; //生成路径 targetFile = savaPath; File file = new File(targetFile); //没有找到就新建一个 if (!file.isDirectory() && !file.exists()) { file.mkdirs(); } targetFile += name; System.out.println("targetFile:"+targetFile); // 将模板和数据模型合并 输出到Console out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(targetFile), "UTF-8")); template.process(data, out); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { if(SimpleTool.checkNotNull(out)){ out.flush(); out.close(); } } return targetFile; } }