freemarker 生成word
一、生成模板,动态获取的部分用${变量名},然后将word另存为xml文件,再将后缀名改成ftl格式。然后将模板放在对应的目录下。
二、引入freemarker包,mawen引用
org.freemarker freemarker 2.3.23
三、代码实现
@ApiOperation(value = "word", httpMethod = "GET") @RequestMapping(value = "/word", method = RequestMethod.GET) @Transactional public void getWord(HttpServletResponse response) { try { MapdataMap = new HashMap (); dataMap.put("id", 123456); dataMap.put("code", "张三"); dataMap.put("name", "123123"); Configuration configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); //指定模板路径的第二种方式,我的路径是D:/ 还有其他方式 configuration.setDirectoryForTemplateLoading(new File("D:/"));//这里对应模板的物理路径 // 输出文档路径及名称 // File outFile = new File("D:/test.doc"); //以utf-8的编码读取ftl文件 Template t = configuration.getTemplate("模板1.ftl","utf-8"); response.setContentType("application/vnd.ms-excel"); response.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode("适得府君书的", "UTF-8") + ".doc"); // Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"),10240); Writer out = null; out = new BufferedWriter(new OutputStreamWriter(response.getOutputStream())); t.process(dataMap, out); out.close(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
我生成的模板:
word导出的结果:
对应map中的三个值。