生成word文件
1. 制作word模板
- 打开word文档, 制作word模板(此处用的为office2016), 将变量用 ${变量名} 代替
- 然后将文件另存为xml
- 将 xml 文件改为 ftl 文件格式
- 处理 ftl 文件, 打开 ftl 文件后, 会有些变量格式错乱, 需要手动修改(这里使用IntelliJ IDEA打开)
- 正常为这种情况
- 不正常的是这种
- 需要将 {} 中间除了变量名多余的东西删除
- 对于表格数据处理, 首先找到模板文件里的表格部分
- 在表格外加上list标签
<#list list as item></#list>
, 同时里面的变量添加对象名
- 在外面添加判断list是否为空
<#if list?? && list?size gt 0></#if>
, 不确定对象是否有值, 添加判断为空 ${item.company?if_exists}
<
<
<w:tr w:rsidR="00F95B2E" w:rsidTr="00F95B2E">
<w:tc>
<w:tcPr>
<w:tcW w:w="2765" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00F95B2E" w:rsidRDefault="00F95B2E" w:rsidP="00F95B2E">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${item.company}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2765" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00F95B2E" w:rsidRDefault="00F95B2E" w:rsidP="00F95B2E">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${item.position}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="2766" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00F95B2E" w:rsidRDefault="00F95B2E" w:rsidP="00F95B2E">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${item.content}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</
</
2. 导入maven依赖, 生成word文档
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SendDoc {
public static void main(String[] args) throws IOException, TemplateException {
Map<String, Object> docData = new HashMap<>();
docData.put("name","张三");
docData.put(