美文网首页
Java利用freemarker生成word报告

Java利用freemarker生成word报告

作者: 绝尘kinoko | 来源:发表于2021-03-31 16:31 被阅读0次

    需求:项目要求在检测过程完成后可导出相应的检测报告。

    准备ftl模板

    制作过程为:

    1. 将word文档另存为.xml格式
    2. 将xml后缀改为ftl后缀
    3. 修改插值,将变量部分改为${ varName }的格式。

    如下图所示:


    image.png

    注意:

    1. 有可能出现插值变量的{}分割的情况,要手动调整,保证${ varName }在一个标签内
    2. 转储乱码,编码格式不一致,需要转码
    3. 这里只列了单个插值,如果结合到循环判断等语法,需要对标签有一点熟悉程度

    freemarker手册 http://freemarker.foofun.cn/

    将数据导入模板

    数据格式为Map,key就是模板里的插值名称,如果缺少模板里的插值名称,控制台会报错(freemarker的报错一般比较好定位,都会指明原因和位置)。

         /**
         * 将data写入模板
         * @param templetePath:模板文件路径
         * @param templeteName:模板文件名
         * @param filename:目标文件名
         * @param data:要写入模板文件的数据
         */
        public File writeAnnualReport(String templetePath, String templeteName, String filename, Map<String, Object> data) {
    
            /**
             * 加载模板
             */
            File file = new File(filename);
            try {
                //设置模板加载路径
                configuration.setDirectoryForTemplateLoading(new File(templetePath));
                Template templete = configuration.getTemplate(templeteName);
                //构造一个向目标文件写的流
                Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
                //将数据填充到模板并写入目标文件
                templete.process(data, writer);
                //写完关闭流
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TemplateException e) {
                e.printStackTrace();
            }
            return file;
        }
    
    configuration = new Configuration();
    configuration.setDefaultEncoding("UTF-8");
    

    configuration的初始化貌似有新的方法,IDE指出方法过时,不过这样也能用。

    导出报告

    这里已经拿到file内容了,剩下的就是传给前端,项目里有下载文件接口的,也可以把文件放到固定的目录下。
    实现下载接口就不赘述了,就是向response里写入数据,前端接收是Blob数据,下载用隐式a.href = 下载接口完成。

    相关文章

      网友评论

          本文标题:Java利用freemarker生成word报告

          本文链接:https://www.haomeiwen.com/subject/kyxahltx.html