freemarker 使用word模版导出word
创建一个word.doc,如下图:
另存为XML格式,如下图:
将word.xml放入项目中,重命名为word.ftl,(list循环数据格式需要修正)
Configuration cfg=new Configuration(); cfg.setClassForTemplateLoading(FreeMarkerUtil.class,"/template"); cfg.setDefaultEncoding("utf-8"); cfg.setSharedVariable("indexOf",new IndexOfMethod()); cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250)); cfg.setOutputEncoding("utf-8"); cfg.setTemplateUpdateDelay(5); cfg.setObjectWrapper(new DefaultObjectWrapper()); Template template=cfg.getTemplate("word.ftl");
Writer out = new OutputStreamWriter(new FileOutputStream(new File("D:/测试word.doc")));
Map<String,Object> map = new HashMap<>(); List<Map<String,Object>> list = new ArrayList<>(); for(int i = 0; i < 2; i++){ Map<String,Object> m = new HashMap<>(); m.put("name","沙发"+i); list.add(m); } map.put("titleName","哈哈"); map.put("list",list); template.process(map,out);
(数据包含特殊字符需要转义)
如果freemarker富文本导出word,则word另存为mht文件,重命名为ftl文件后,修改其中的格式,并将字符串类型的数据编码改成3Dus-ascii格式;