1.将word打开 -- 另存为 word(xml)格式
2.打开xml文件 进行格式化下(可以百度在线xml格式化)
3.将xml文件的后缀改为ftl 格式的
4.将ftl文件 放置项目reource下的(filetemplate)自定义路径也行
5.需要在pom中加jar包,进行导包
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
6写代码
wordParamsMap.put("year", year); // 年份 ${year}-->对应ftl中的位置占位符
wordParamsMap.put("month", monthStr); // 月份、季度
wordParamsMap.put("system", taskName); // 定级系统
wordParamsMap.put("number1", number1); // 主机资产数量
wordParamsMap.put("number2", number2); // 网络资产数量
wordParamsMap.put("reportList", list);
wordParamsMap.put("fileName", "中国电****作日志审计报告"); // word 文件名
/*数据填充 结束*/
exportWord(wordParamsMap);
/**
* word生成 (使用freemarker与word的xml来生成word)
* @throws Exception
*/
@Override
public void exportWord(Map<String, Object> ParamsMap) throws Exception {
// String fileName = "exportWord_";
String fileName = ParamsMap.get("fileName")+".docx";
//复制模版文件到指定目录
String path = basePath+"/exportReport/" + DateUtil.date2Str(new Date(),DateUtil.DATE_FORMAT);
File f = new File(path);
if (!f.exists()) {
f.mkdirs();
}
// fileName +=DateUtil.date2Str(new Date(),DateUtil.DATE_TIME_FORMAT) + ".docx";
String fullPath = path+java.io.File.separatorChar+ fileName;
//模版复制到对应路径(base工具类需要操作有相对路径的文件夹)
String newTemplateTempPath = basePath+java.io.File.separatorChar+"filetemplate";
String templateName = "auditStrategyReport.ftl";//模版名称
FileUtil.copyFile2("filetemplate"+java.io.File.separatorChar+"auditStrategyReport.ftl",
newTemplateTempPath+java.io.File.separatorChar+templateName, true);
//生成word
exportByFreemarker.generateWord(newTemplateTempPath,templateName,fullPath,ParamsMap);
FileUtil.deleteDirectory(newTemplateTempPath); ---->util类
}
package com.som.cloud.util.export.word;
import freemarker.template.*;
import org.springframework.stereotype.Component;
import java.io.*;
import java.util.Map;
/**
* 使用freemarker与word的xml来生成word
* @Author: linww
* @Date: Created in 10:38 2018/4/18.
*/
@Component("ExportByFreemarker")
public class ExportByFreemarker {
private Configuration configuration = null;
public static Version version = new Version("2.3.23"); //FreeMarker版本号// 模板对象
public static Template template;
public static DefaultObjectWrapperBuilder defaultObjectWrapperBuilder;
public ExportByFreemarker(){
configuration = new Configuration(version);//设置FreeMarker版本号
configuration.setDefaultEncoding("UTF-8");//设置默认编码
configuration.setNumberFormat("#");
defaultObjectWrapperBuilder = new DefaultObjectWrapperBuilder(version); //用于创建defaultObjectWrapper
}
//生成word
public boolean generateWord(String xmlTemplatePath, String xmlTemplateName, String outWordPath, Map<String,Object> wordParamsMap) throws Exception{
configuration.setDirectoryForTemplateLoading(new File(xmlTemplatePath));
configuration.setObjectWrapper(defaultObjectWrapperBuilder.build());
template = configuration.getTemplate(xmlTemplateName);//获取模版文件
File outFile = new File(outWordPath);
Writer out = null;
FileOutputStream fos = new FileOutputStream(outFile);
out = new OutputStreamWriter(fos, "UTF-8");
template.process(wordParamsMap,out);
out.flush();
out.close();
return false;
}
}