Java学习:使用Freemarker导出简单的Word文档
程序员文章站
2022-06-06 10:33:13
...
一、准备工作
-
准备想要导出的word文档的模板
-
准备maven的依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
二、开始写导出Word的功能接口
-
将Word文档转换为xml,直接另存为xml即可
-
然后将文件的后缀名修改为ftl
word模板.xml ---->> word模板.ftl
-
将ftl文件中你需要替换的数据使用${变量名}进行替换,也可以直接在word文档中直接写然后再转换。
比如有一段话是 小明今年9岁。 你想使用不同的人名和年纪来替换,可以这样: ${name}今年${age}岁。 这个可以在ftl文件中修改,也可以直接在word文档中这样写
我不推荐这样,这次我这样写出错了,我还是建议先生成ftl文件然后去手动改。生成的ftl文件会没格式化,去格式化一下即可) -
然后将ftl放到项目的指定路径下,我就放到了resource的word目录下
-
写接口代码
@RequestMapping("/export-word")
public Result exportWord(){
//这个是生成文件的文件名
String fileName = "" + DateUtils.format( new Date(),"yyyyMMddHHmmssSSS") + ".doc";
Writer out = null;
OutputStream outputStream = null;
try {
//拼接生成文件的全路径
String downloadPath = download + fileName;
File desc = new File(downloadPath);
//判断目录是否存在,不存在则创建
if (!desc.getParentFile().exists()) {
desc.getParentFile().mkdirs();
}
//创建输出流
outputStream = new FileOutputStream(downloadPath);
out = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"), 10240);
//这里面存放需要替换的数据
Map<String, Object> data = new LinkedHashMap<>();
//举个例子,放置假数据,这个data里面的数据将会根据key把value设置到文档中去替换${name},${age}
data.put("name","小明");
data.put("age","9");
//创建Freemarker的Configuration对象
Configuration configuration = new Configuration();
//设置默认编码
configuration.setDefaultEncoding("utf-8");
configuration.setClassForTemplateLoading(this.getClass(), "/");
//获取路径下的模板,这个ftl是Word文档转换过来的
Template t = configuration.getTemplate("word/word模板.ftl", "utf-8");
log.info("开始导出word中.....");
t.process(data, out);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//关闭输出流
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return Result.ok(fileName);
}
}
- 访问接口即可,去指定路径下找到输出的文件
三、补充
这只是简单的模板导出,如果有表格的话,只需要在代码中的data中塞入一个需要遍历的列表数据
data.put("列表的变量名字",列表变量名字);
然后在ftl中使用
<#list 列表的变量名字 as 单条的自定义数据变量名称></#list>
例如:<#list employees as employee ></#list>
你的表格中的标签
<w:tbl>
<w:tr>
<w:tc></w:tc>
</w:tr>
</w:tbl>
-------------------
<w:tbl>表格标签类似HTML的<table>,<w:tr>类似HTML的<tr>。<w:tc></w:tc>每一个单元格
使用employee中的属性名将其替换即可,适用多个员工列表数据做成表格
注意:这只是个简单的样子,还是得根据真实的转换结果来修改
<#list employees as employee >
<w:tbl>
<w:tr>
<w:tc>${employee.name}</w:tc>
<w:tc>${employee.age}</w:tc>
<w:tc>${employee.dept}</w:tc>
<w:tc>${employee.cardId}</w:tc>
</w:tr>
</w:tbl>
</#list>
以上就是使用Freemarker导出简单的Word文档的全部内容
新手上路,加个关注
欢迎交流
上一篇: SpringBoot常用注解(复习)
下一篇: 使用FreeMarker导出word文档
推荐阅读
-
Java实现用Freemarker完美导出word文档(带图片)
-
php导出word文档与excel电子表格的简单示例代码
-
FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】
-
使用FreeMarker导出word文档(支持导出图片)
-
使用Java带你打造一款简单的英语学习系统
-
Java使用freemarker导出带图片的word文档
-
使用java2word包中的Document类来创建新文档
-
使用java2word包中的Document类来创建新文档
-
Java 在 Word 文档中使用新文本替换指定文本的方法
-
【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)