freemarker word模板_如何使用java代码导出word

前言:

导出word的需求其实在日常工作中用到的地方还不少,于是想写一篇文章好好记录一下,在导出之前,需要了解一下关于浏览器如何处理servlet的后台数据。具体可以了解一下http通信下载行为在servlet的实现。

导出的工具类代码来源于网络,如有侵权可以联系我删除文章

个人使用ftl作为word导出模板引擎,有很多模板引擎可以选,个人经过查阅资料发现ftl用的比较多,所以选择这一种

码云地址:

文章牵扯代码比较多,如果要看具操作可以查看我自己瞎弄的一个码云地址:

https://gitee.com/lazyTimes/interview.git

效果演示:

给了一个测试页面,临时写了一些脚本,可以作为参考(后续会贴Html代码进去)

20ea82e99b9847a674fe230835cfc809.png

点击提交,导出内容, 导出word报告

08fba663ff7f887a0dda7cb16a0e1e6c.png

导出之后,打开word内容为:

e02bfc4a34ab2241a5ebb78352944168.png

实现步骤 - 制作word模板

第一步 新建word,制作成果样板

将需要导出word的内容,先粘贴到一个新建的word文件里面

8a43c7fe91d89884130eef4f7bc99e0f.png

第二步 转存格式 -> xml

选择文件“另存为”,将格式设置为xml格式

d30cbf9b32cca896ba8f42f3b78e75fe.png

第三步 格式化文件

将文件放到idea或者支持格式化的软件里面,进行格式化,保存:

注意占位符要匹配

b377019b05e5605b03281ad99a778b6e.png

第四步:模板数据替换占位符

在word页面将需要导入数据的地方,替换占位符

需要注意内容处理的时候: ${ filename} 有可能被切割为多个部分,我们需要把多个切割部分,改为下面的样式

36aa3c329d33c60e8c1dce9b0e9a1a08.png

一定记得所有的改动之后,马上打开xml格式的word,确认是不是改崩了

上面的步骤完成,说明有一个word模板做好了

第五步:制作ftl文件,word模板成型

在项目里面新建一个ftl文件,同时需要在工具类中配置,同时把做好站位符操作的xml内容贴进去

代码实现 - 导出代码

  1. 工具类的配置如下:

WordGeneratorUtil.java

 /**     * 模板常量类配置     */public static final class FreemarkerTemplate {
        public static final String REPORT = "report";    public static final String REC_RECOMMEND = "recRecommend";    // 增加你的模板文件名称:}

在静态的代码块里面,需要注入对应的模板配置

 // 注意初始化要载入对应模板allTemplates.put(FreemarkerTemplate.REPORT, configuration.getTemplate(FreemarkerTemplate.REPORT + ".ftl"));allTemplates.put(FreemarkerTemplate.REC_RECOMMEND,configuration.getTemplate(FreemarkerTemplate.REC_RECOMMEND + ".ftl"));
  1. 在配置完成之后,导出的时候就可以找到对应的文件了

  2. 建立一个通用的导出方法:

 /**     * 创建doc 文档     * dataMap 数据,需要对应模板的占位符,否则会出错     * @param dataMap 数据     * @param wordName  word 报表的名称     * @param freemarkerTemplateName  指定需要使用哪个freemarker模板     * @return     */public static File createDoc(String freemarkerTemplateName, String wordName, Map<String, String> dataMap) {
        try {
            File f = new File(wordName);        Template t = allTemplates.get(freemarkerTemplateName);        // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开        Writer w = new OutputStreamWriter(new FileOutputStream(f), StandardCharsets.UTF_8);        t.process(dataMap, w);        w.close();        return f;    } catch (Exception ex) {
            ex.printStackTrace();        throw new RuntimeException("生成word文档失败");    }}

工具类完整代码:

 package com.zxd.interview.export;import freemarker.template.Configuration;import freemarker.template.Template;import org.springframework.util.CollectionUtils;import java.io.*;import java.nio.charset.StandardCharsets;import java.util.HashMap;import java.util.Map;/** *  * 从网络上根据资料找到的一个工具类 * 主要以freemarker 为核心的模板生成word
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值