打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java技术:SpringBoot集成FreeMarker生成word文件

       

                今天给大家分享SpringBoot集成FreeMarker模板引擎生成word文件的用法,感兴趣的可以学一下,完整源码地址在文章末尾处,欢迎互相沟通交流!

一、什么是FreeMarker?

FreeMarker 是一款开源的模板引擎:是一种基于模板和要动态填充的数据,可以用来动态渲染生成输出文本(HTML网页,Word文档,电子邮件,配置文件,源代码等)的通用技术。

模板编写为FreeMarker Template Language (FTL):它是简单的,专用的语言, 不是像PHP那样拥有完整成熟的编程语言。所以它主要专注于如何展现数据,具体要展示什么数据那就需要成熟的编程语言来实现(Java、C#、Python)等。

FreeMarker原理图如下:

       

       

二、示例代码

1、导入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;
@Servicepublic 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

IT技术分享社区

个人博客网站:https://programmerblog.xyz

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java利用freemarker生成html静态页面
​SpringBoot整合freemarker、thymeleaf模版引擎
试用FreeMarker
FreeMarker如何生成静态页面
springboot项目 web+freemarker
Spring发送邮件简单实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服