word生成工具类
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import lombok.extern.log4j.Log4j2;
import java.io.*;
import java.util.Map;
import java.util.Objects;
@Log4j2
public class WordExportUtil {
private static Configuration configuration = new Configuration(new Version("2.3.0"));
// 加载模板信息
private static Template readWord() {
configuration.setDefaultEncoding("UTF-8");
configuration.setClassicCompatible(true);
configuration.setClassForTemplateLoading(WordExportUtil.class, "/tem/");
Template tempWord = null;
try {
// 获取模板信息
tempWord = configuration.getTemplate("systemWord.ftl", "utf-8");
if (Objects.isNull(tempWord)) {
log.error("文件不存在");
}
} catch (IOException e) {
e.printStackTrace();
}
return tempWord;
}
// 创建新word文档
public static void createWord(Map<String, Object> dataMap) {
File dir = new File("/mnt");
if (!dir.exists()) {// 判断目录是否存在
dir.mkdir();
}
// 文档输出目录
File outFile = new File("/mnt/download/systemWord.doc");
try (Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)))) {
//获取模板
// 模板填充后,输出到指定目录
readWord().process(dataMap, out);
} catch (Exception e) {
e.printStackTrace();
}
}
}
模板
先创建word 模板,以${} 方式回填所需字段
另存为xml,
更名ftl文件
通过 foxechs.exe 工具对生成的ftl文件存在问题的地方进行修正,
依赖
<!--freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>