java项目源码springboot(Java技术SpringBoot集成FreeMarker生成word文件)
java项目源码springboot(Java技术SpringBoot集成FreeMarker生成word文件)Gitee地址:https://gitee.com/hgm1989/springboot-email.git导出文件的效果:<!--freemarker制作Html邮件模板依赖包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> 2、application.yml 配置freemarkerfreemarker: cache: false #是否启用缓存,开发环境不建议启动因为涉及经常修改模板调试 settings: classic_compatible: true

今天给大家分享SpringBoot集成freemarker模板引擎生成word文件的用法,感兴趣的可以学一下,完整源码地址在文章末尾处,欢迎互相沟通交流!
一、什么是FreeMarker?FreeMarker 是一款开源的模板引擎: 是一种基于模板和要动态填充的数据,可以用来动态渲染生成输出文本(HTML网页,Word文档,电子邮件,配置文件,源代码等)的通用技术。
模板编写为FreeMarker Template Language (FTL):它是简单的,专用的语言, 不是像PHP那样拥有完整成熟的编程语言。所以它主要专注于如何展现数据,具体要展示什么数据那就需要成熟的编程语言来实现(Java、C#、Python)等。
FreeMarker原理图如下:

<!--freemarker制作Html邮件模板依赖包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2、application.yml 配置freemarker
    
freemarker:
  cache: false #是否启用缓存,开发环境不建议启动因为涉及经常修改模板调试
  settings:
    classic_compatible: true
  suffix: .html #一般格式tpl居多
  charset: UTF-8
  template-loader-path: classpath:/templates/ #模板路径,一般都是这个
3、新建IExportService.java 类
    
package com.springboot.email.email.service;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
public interface IExportService {
    /**
     * 导出word文件到指定目录
     */
    void exportDocFile(String fileName  String tplName  Map<String  Object> data) throws Exception;
    /**
     * 导出word文件到客户端
     */
    void exportDocToClient(HttpServletResponse response  String fileName  String tplName  Map<String  Object> data) throws Exception;
}
4、新建IExportService.java接口实现类ExportServiceImpl.java
    
package com.springboot.email.email.service.impl;
import com.springboot.email.email.service.IExportService;
import freemarker.template.Template;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;
@Service
public class ExportServiceImpl implements IExportService {
    private String encoding;
    private String exportPath = "D:\\export\\";
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;
    public Template getTemplate(String name) throws Exception {
        return freeMarkerConfigurer.getConfiguration().getTemplate("test.html");
    }
    /**
     * 导出本地文件到指定的目录
     */
    @Override
    public void exportDocFile(String fileName  String tplName  Map<String  Object> data) throws Exception {
        //如果目录不存在,则创建目录
        File exportDirs = new File(exportPath);
        if (!exportDirs.exists()) {
            exportDirs.mkdirs();
        }
        Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(exportPath   fileName)  encoding));
        getTemplate(tplName).process(data  writer);
    }
    /**
     * 导出word文件到浏览器客户端
     */
    @Override
    public void exportDocToClient(HttpServletResponse response  String fileName  String tplName  Map<String  Object> data) throws Exception {
        response.reset();
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/msword");
        response.setHeader("Content-Disposition"  "attachment; filename="    URLEncoder.encode(fileName   "UTF-8"));
        // 把本地文件发送给客户端
        Writer out = response.getWriter();
        Template template = getTemplate(tplName);
        template.process(data  out);
        out.close();
    }
}
5、新建模板文件test.html
    
具体文件参考源码,模板文件的制作方式,新建word文件调整格式后→另存为xml格式的文件→局部调整文件循环标记→然后格式保存为html格式的文件 放在项目当中去。
如果有不清楚的可以留言交流。
6、新建测试类ExportController.java@RestController
@requestMapping("/export")
public class ExportController {
    @Autowired
    private IExportService exportService;
    @RequestMapping(value = "/testWord"  method= RequestMethod.GET)
    public void exportWord(HttpServletRequest request  HttpServletResponse response) throws Exception {
        String fileName = "测试word导出.doc"; //文件名称
        // 设置头部数据
        Map<String Object> dataMap = new HashMap<>();
        dataMap.put("name" "小明");
        dataMap.put("regAddress" "苏州");
        // 设置表格数据
        List<ScoreVo> list=new ArrayList<>();
        ScoreVo vo1=new ScoreVo();
        vo1.setCourseName("英语");
        vo1.setScore(95);
        vo1.setRank(3);
        ScoreVo vo2=new ScoreVo();
        vo2.setCourseName("数学");
        vo2.setScore(100);
        vo2.setRank(1);
        list.add(vo1);
        list.add(vo2);
        dataMap.put("courseList" list);
        exportService.exportDocToClient(response  fileName  "test.html"  dataMap);
    }
}
    
访问地址:http://localhost:8080/export/testWord
导出文件的效果:

Gitee地址:https://gitee.com/hgm1989/springboot-email.git




