freemarker导出word
- 第一步、将word转换为xml格式
- 第二步、将转换后的xml文件修改后缀为ftl后复制到项目 resources 目录下(可以自己新建一个文件夹放在文件夹中)
- 第三步、格式化xml代码(如果问价太大可能会无法格式化)这时候需要在idea中进行设置
- 第四步、ftl文件值的替换
- 第五步、工具类
- POM
第一步、将word转换为xml格式
第二步、将转换后的xml文件修改后缀为ftl后复制到项目 resources 目录下(可以自己新建一个文件夹放在文件夹中)
第三步、格式化xml代码(如果问价太大可能会无法格式化)这时候需要在idea中进行设置
idea.max.intellisense.filesize=10000
idea.max.content.load.filesize=10000
第四步、ftl文件值的替换
${monthLowerALL!} 表示替换单个值
遍历数组
<#list userList as user>
编号:${user.id} 姓名:${user.username} ${user.age}<br/>
</#list>
第五步、工具类
@Slf4j
public class FreemarkerUtil {
/**
* 使用 Freemarker 生成 Word 文件
*
* @param templateName 模板文件路径名称
* @param fileName 生成的文件路径以及名称
* @param dataModel 填充的数据对象
*/
public static void exportWord(String templateName, String fileName, Map<String, Object> dataModel) {
generateFile(templateName, fileName, dataModel);
}
/**
* 使用 Freemarker 生成指定文件返回流
*
* @param templateName 模板文件路径名称
* @param fileName 生成的文件名称
* @param dataModel 填充的数据对象
*/
private static void generateFile(String templateName, String fileName, Map<String, Object> dataModel) {
try {
// 1、创建配置对象
Configuration config = new Configuration(Configuration.VERSION_2_3_30);
config.setDefaultEncoding("utf-8");
//这里 templates 为你项目中resources目录下templates文件夹,相当于会拼接在你的 templateName参数前面
config.setClassForTemplateLoading(FreemarkerUtil.class, "/templates");
// 2、获取模板文件
Template template = config.getTemplate(templateName, "utf-8");
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
response.setContentType("application/msword;charset=utf-8");
response.setCharacterEncoding("utf-8");
try {
response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1") + ".docx");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
template.process(dataModel, response.getWriter());
} catch (Exception e) {
e.printStackTrace();
}
}
}
###第六步、调用
Map<String, Object> dataMap = Maps.newConcurrentMap();
dataMap.put("totalIncomeAll", "123456789++");
dataMap.put("monthLowerALL", "1960");
// 执行导出
FreemarkerUtil.exportWord("templates路径下对应的模板名称.ftl", "导出的模板名称", dataMap);
POM
<!-- 文档模板操作依赖 -->
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.core</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
<version>2.0.2</version>
</dependency>