后端操作
引入对应的依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
生成word代码
public static void main(String[] args) throws Exception {
// 获取模板文件的数据,按照自己的业务写
Map<String,Object> dataMap = getWordData();
// 创建FreeMarker配置类
Configuration configuration = new Configuration(DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
configuration.setDefaultEncoding("utf-8");
// 设置模板文件所在的文件夹位置 注意这里不是具体的模板文件 而是模板文件所在目录的位置
String templateFolder = GenerateDataDictionary.class.getClassLoader().getResource("word-template").getPath();
FileTemplateLoader fileTemplateLoader = new FileTemplateLoader(new File(templateFolder), true);
configuration.setTemplateLoader(fileTemplateLoader);
// 创建要输出的文件
File file = new File("D:\\Desktop\\aa.doc");
// 找到对应的模板,即上面设置的模板文件目录下的模板文件全称
Template template = configuration.getTemplate("数据字典.ftl");
// 将数据替换到模板的指定位置,生成新的word文件
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file));
template.process(dataMap, outputStreamWriter);
outputStreamWriter.flush();
outputStreamWriter.close();
}
生成模板
先创建一个word文件,其中动态的数据用占位符${xxx}的格式书写
将文件另存为.xml格式
将.xml格式的文件放置到刚才后端指定的模板文件目录下
tips:word另存为后xml文件的格式是乱序的,可以将文件放到idea中,用ctrl+alt+L进行格式化
获取普通数据
占位符中直接${xxx}获取就行
遍历list
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("testList", list);
<#list testList as item>
${item}
</#list>
遍历map
List<String> testList = new ArrayList<>();
testList.add("a");
testList.add("b");
Map<String, Object> testMap = new HashMap<>();
testMap.put("name", "joe");
testMap.put("testList", testList);
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("testMap", testMap);
<#assign testMapKeys=testMap?testMapKeys/>
${testMap["name"]}
<#list testMap["testList"] as item>
${item}
<#-- 如果item是对象,直接用.既可以获取属性 如下-->
${item.name}
</#list>