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

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

一、什么是FreeMarker?

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

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

FreeMarker原理图如下:

       24d349e2eaad2d937dafbe47031a1e70.png        

二、示例代码

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: truesuffix: .html #一般格式tpl居多charset: UTF-8template-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\\";@Autowiredprivate FreeMarkerConfigurer freeMarkerConfigurer;public Template getTemplate(String name) throws Exception {return freeMarkerConfigurer.getConfiguration().getTemplate("test.html");}/*** 导出本地文件到指定的目录*/@Overridepublic 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文件到浏览器客户端*/@Overridepublic 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 {@Autowiredprivate 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

导出文件效果:

       26edaf66b667093c7742a46ebfa2693c.png        

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑技巧:Win10自带远程控制软件介绍

Win10本身就自带了远程协助功能&#xff01;这在Win10中叫做“快速助手”&#xff0c;你是不是从来没有注意到呢&#xff1f; Win10的快速助手使用非常简单。通过搜索功能&#xff0c;直接就可以找到它。 通过搜索可以找到快速助手 说明&#xff1a;快速助手使用的是Windows的远…

网络技巧:手机信号满格,上网却很慢,教你关闭双频优选开关,网速飞快

目前大部分家里都安装了宽带&#xff0c;大家最常用的就是百兆千兆的宽带网络&#xff0c;但是也避免不了家里面使用WiFi上网的时候&#xff0c;网络会时好时坏&#xff0c;有些时候就算是我们手机信号显示的是满格&#xff0c;但是上网的速度也还是很慢&#xff0c;今天小编就…

玩转HTML5+跨平台开发[4] HTML表格标签

表格标签 在过去表格标签用的非常非常的多, 绝大多数的网站都是使用表格标签来制作的, 也就是说表格标签是一个时代的代表 http://2004.sina.com.cn作用:以表格形式将数据显示出来, 当数据量非常大的时候, 表格这种展现形式被认为是最为清晰的一种展现形式格式: table定义表格t…

硬件知识:如何快速挑选一款好的固态硬盘?

固态硬盘作为目前旗舰电脑必备的存储设备&#xff0c;可以大幅度提高电脑的运行速度&#xff0c;拥有一块好的固态硬盘&#xff0c;还是十分有必要的&#xff0c;今天小编给大家分享如何挑选一款好的固态硬盘&#xff0c;希望对大家能有所帮助&#xff01; 1、跑分 大家可以直…

你知道CDN是什么吗?本文带你搞明白CDN

最近在了解边缘计算&#xff0c;发现我们经常听说的CDN也是边缘计算里的一部分。那么说到CDN&#xff0c;好像只知道它中文叫做内容分发网络。那么具体CDN的原理是什么&#xff1f;能够为用户在浏览网站时带来什么好处呢&#xff1f;解决这两个问题是本文的目的。 CDN概念 CD…

Swift - 警告提示框(UIAlertController)的用法

import UIKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()}override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {// 创建let alertController UIAlertController(title: "提示",…

运维笔记:Windows下如何实现nginx服务自启动

目录 下载Windows Service Wrapper nginx-service.exe 拷贝到nginx的根目录当中 创建配置文件 管理员身份运行安装Nginx服务命令 Nginx作为有每一个两三年工作经验的程序员来说都不陌生&#xff0c;基本上每个线上部署的项目都需要用到&#xff0c;Nginx常用的功能有负载均衡、…

你知道三地五中心吗

两地三中心这个架构&#xff0c;如下图&#xff1a; 这种架构具备容灾能力&#xff0c;比如生产数据中心停电了&#xff0c;那么可以把所有流量都切到同城灾备中心或异地灾备中心&#xff0c;那么现在的问题是假如真到了停电的那一天&#xff0c;你敢把所有的流量都切到灾备中心…

Win10操作系统隐藏6个实用小功能

目录 功能一、分屏 功能二、录屏 功能三、截图 功能四、便签功能 功能五、视频剪辑 功能六、计算器 功能一、分屏 Win10操作系统其实是自带分屏功能的&#xff0c;这个功能对我来说真的太喜欢了&#xff0c;尤其是核对文档的时候&#xff0c;真的是太方便了&#xff01; 操作方…

面试一口气说出Spring的声明式事务@Transactional注解的6种失效场景

一、Spring事务管理的两种方式 事务管理在系统开发中是不可缺少的一部分&#xff0c;Spring提供了很好事务管理机制&#xff0c;主要分为编程式事务和声明式事务两种。 编程式事务&#xff1a;是指在代码中手动的管理事务的提交、回滚等操作&#xff0c;代码侵入性比较强&…

JAVA断点调试

1、条件断点&#xff0c;点击添加条件 2、异常断点&#xff0c;点击添加异常 转载于:https://www.cnblogs.com/binbang/p/6378897.html

操作系统:Win10如何彻底卸载自带的Flash软件

Win10操作系统中&#xff0c;Flash功能是系统自带的&#xff0c;我们无法直接通过应用管理来找到Flash&#xff0c;所以也不能从系统设置或者控制面板中卸载它。当然如果你是后期自己安装的话&#xff0c;可以通过控制面板找到Flash然后直接卸载它。 Flash的路径为“C:\Windows…

Java运行时异常和非运行时异常

1.Java异常机制 Java把异常当做对象来处理&#xff0c;并定义一个基类java.lang.Throwable作为所有异常的超类。Java中的异常分为两大类&#xff1a;错误Error和异常Exception&#xff0c;Java异常体系结构如下图所示 2.Throwable Throwable类是所有异常或错误的超类&#xf…

办公技巧:如何快速提取办公文档里面的所有图片

针对一个比较大的办公文档里面有很多图片&#xff0c;有些时候我们需要提取文档里面的所有图片信息&#xff0c;当然你打开文档一个个复制保存就可以了&#xff0c;不过这样太过于繁琐了&#xff0c;有没有更加快速的方法呢&#xff1f;今天给大家分享快速提取办公文档里面的所…

ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)

ELKFilebeatKafkaZooKeeper 构建海量日志分析平台 参考&#xff1a;http://www.tuicool.com/articles/R77fieA 我在做ELK日志平台开始之初选择为ELKRedis直接构建&#xff0c;在采集nginx日志时一切正常&#xff0c;当我采集我司业务报文日志类后&#xff0c;logstash会报大量的…

Spring回滚事务类型

Spring默认抛出了未检查unchecked异常&#xff08;继承自 RuntimeException的异常&#xff09;或者 Error才回滚事务&#xff0c;其他异常不会触发回滚事务。

操作系统:Win10操作系统内置的备份功能介绍

今天给大家分享Win10操作系统内置的系统备份功能&#xff0c;感兴趣的可以了解一下&#xff01;。 Win10的备份&#xff1a;由“旧版备份与还原”、“还原点”和“文件历史记录”三个部分组成。 旧版备份与还原&#xff1a;主要用于系统备份与还原 还原点&#xff1a;还原点 文…

spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

如上&#xff1a; 当我们需要在事务控制的service层类中使用try catch 去捕获异常后&#xff0c;就会使事务控制失效&#xff0c;因为该类的异常并没有抛出&#xff0c;就不是触发事务管理机制。怎样才能即使用try catch去捕获异常&#xff0c;而又让出现异常后spring回滚呢&am…

电脑软件:推荐一款本地文档搜索神器,赶快下载试试吧!

1、前言大家在日常办公的时候&#xff0c;经常会涉及各种各样的文档&#xff0c;时间久了文件会越来越多&#xff0c;有时候需要快速找到一个半年前文档可能会耗费你的大量时间&#xff0c;毕竟每个人的大脑记忆都是有限的&#xff0c;不可能每个细节都能够靠大脑记忆&#xff…