SpringBoot 整合 FreeMarker 生成Word文件

引言:

由于项目需求,需要给客户发送邮件的时候带上一个Word附件 这就让我想到了一个模板化的 freemarker 来完成,接下来看下 SpringBoot 整合 freemarker 实现的生成Word文件。

直接撸代码:

1.加入pom依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-freemarker</artifactId>
		</dependency>

2.加入工具类

package com.jt.www.util.mail;

import freemarker.template.Configuration;
import freemarker.template.Template;

import java.io.*;
import java.util.Map;

/**
 * @Description:   生成Word工具类
 * @author: xuxinku
 * @Date: 2019/6/16 9:42
 * @ModifiedDate:
 * @Copyright:XX保险股份有限公司
 */
public class WordUtil {

    /**
     * @Desc:生成word文件
     * @Author:xuxinke
     * @Date:2019/6/16 9:42
     * @param dataMap word中需要展示的动态数据,用map集合来保存
     * @param templateName word模板名称,例如:06test.ftl
     * @param filePath 文件生成的目标路径,例如:D:/wordFile/
     * @param fileName 生成的文件名称,例如:test.doc
     */
    @SuppressWarnings("unchecked")
    public static String createWord(Map dataMap, String templateName, String filePath, String fileName){
        try {
            //创建配置实例
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);

            //设置编码
            configuration.setDefaultEncoding("UTF-8");

            //ftl模板文件统一放至 com.lun.template 包下面
            //  D:\ideas\JTJBW\edu-svc\src\main\resources\templates
            configuration.setClassForTemplateLoading(WordUtil.class,"/");

            //获取模板
            Template template = configuration.getTemplate(templateName);

            //输出文件
            File outFile = new File(filePath+ File.separator+fileName);

            //如果输出目标文件夹不存在,则创建
            if (!outFile.getParentFile().exists()){
                outFile.getParentFile().mkdirs();
            }

            //将模板和数据模型合并生成文件
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));

            //生成文件
            template.process(dataMap, out);

            //关闭流
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        String WJ=filePath+fileName;
        return WJ;
    }
}





我这边实现的思路是 :把创建好的资源放单一个临时目录中 ,然后这个util返回的是文件路径,最后再删除文件,入参搭建看介绍就行

3.创建ftl模板文件

大家可以看到 这个util中引用了ftl模板文件来 实现的模板化操作, 接下来我为大家展示下如何操作。

3.1创建Word文件定义好变量保存为xml格式
SpringBoot 整合 FreeMarker 生成Word文件_第1张图片SpringBoot 整合 FreeMarker 生成Word文件_第2张图片3.2重命名为.ftl文件

SpringBoot 整合 FreeMarker 生成Word文件_第3张图片然后要注意进去文件里面 修改下变量 有可能变量会因为你的Word格式导致乱码 进去修改下位置就行

4.调用工具类生成word文件

        public String wordTest(){

        /** 用于组装word页面需要的数据 */
        Map<String, String> dataMap = new HashMap<String, String>();

       
        dataMap.put("name","测试test");
        dataMap.put("age","666");
        dataMap.put("sex","男");
        //String filePath = "D:/JB/";
        //String filePath =System.getProperty("java.io.tmpdir")+ File.separator;
        String filePath =System.getProperties().getProperty("user.home")+ File.separator;

        System.out.println("查看临时路径=======》"+filePath);
        //文件唯一名称
        String fileOnlyName = "保费支付通知.doc";
        /** 生成word  数据包装,模板名,文件生成路径,生成的文件名*/
         String WJ = WordUtil.createWord(dataMap, "06ZF.ftl", filePath, fileOnlyName);
        
        return WJ;
    }
    

需要注意的是 你们可以把路径打印出来 查看文件路径

生成的Word:
SpringBoot 整合 FreeMarker 生成Word文件_第4张图片成功了 这就是 SpringBoot 集成freemarker 生成Word文档



ps:有个需要注意的地方, 由于freemarker的是用xml来生成的Word , 导致很多手机软件打开是乱码的 ,手机软件不能识别 xml格式的文档, 这个我也很头疼, 有能解决的大神可以私信或者评论下 互相学习。

你可能感兴趣的:(SpringBoot,SpringBoot,freemarker)