本篇文章给大家分享的是有关freemarker中怎么导出word,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1.新建word文档,导出预期如下

2.另存为xml文件

3.编辑xml,将文字替换成表达式 ${argname}
原图:

替换后 :

年龄、职位、项目、简述对应的值依次替换成 ${age} ${position} ${project} ${note}
4.修改文件名称为:ftl2doc.ftl,放到项目里

5.查看pom依赖是否添加若没有需添加freemarker依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
6.编写工具类
package org.jeecg.modules.system.util;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import freemarker.template.*;
public class FreemarkerUtil {
private static final Object LOCK = new Object();
private static Configuration cfg;
private static FreemarkerUtil ftl ;
private FreemarkerUtil(File file) throws IOException {
cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(file);
cfg.setEncoding(Locale.getDefault(), "UTF-8");
cfg.setObjectWrapper(new DefaultObjectWrapper());
}
private static void check(File file) {
if (ftl == null) {
synchronized (LOCK) {
try {
ftl = new FreemarkerUtil(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 创建 word 文档
* 必须先设置response导出配置,然后解析模版,否则会出问题
* @throws IOException
*/
public static void createFile(File templateDir,String templateName,String docFileName, Map<String,Object> rootMap,HttpServletRequest request, HttpServletResponse response) throws IOException {
// response.resetBuffer();
//设置导出
response.addHeader("Cache-Control","no-cache");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-word;charset=UTF-8");
String ua = request.getHeader("user-agent");
ua = ua == null ? null : ua.toLowerCase();
if(ua != null && (ua.indexOf("firefox") > 0 || ua.indexOf("safari")>0)){
try {
docFileName = new String(docFileName.getBytes(),"ISO8859-1");
response.addHeader("Content-Disposition","attachment;filename=" + docFileName);
} catch (Exception e) {
}
}else{
try {
docFileName = URLEncoder.encode(docFileName, "utf-8");
response.addHeader("Content-Disposition","attachment;filename=" + docFileName);
} catch (Exception e) {
}
}
check(templateDir);
//解析模版
Template temp = cfg.getTemplate(templateName, "UTF-8");
PrintWriter write = response.getWriter();
try {
temp.process(rootMap, write);
} catch (TemplateException e) {
e.printStackTrace();
}finally {
if(write != null){
write.flush();
write.close();
}
}
}
}
7.测试接口
@Resource
private ResourceLoader resourceLoader;
@GetMapping(value = "/wordTest")
public void wordTest(HttpServletRequest req,HttpServletResponse resp){
String path = "templates/word";
org.springframework.core.io.Resource resource = resourceLoader.getResource("classpath:"+path);
try {
File file = resource.getFile();
Map<String,Object> map = new HashMap<String,Object>();
//这里map的key和上面模板内的${key}保持一致即可
map.put("name", "刘禹锡");
map.put("age", 26);
map.put("position", "php开发");
map.put("project", "不动产登记项目");
map.put("note", "php是世界上最好的语言!!!");
String docFileName ="word-模板导出测试.doc";
String templateName = "ftl2doc.ftl";
FreemarkerUtil.createFile(file,templateName,docFileName, map, req, resp);
} catch (IOException e) {
e.printStackTrace();
}
}
测试结果导出文件如下:

以上就是freemarker中怎么导出word,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注天达云行业资讯频道。