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: 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
導出文件效果:
? ? ? ? ? ? ? ?
Gitee地址:https://gitee.com/hgm1989/springboot-email.git
IT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識
總結
以上是生活随笔為你收集整理的Java技术:SpringBoot集成FreeMarker生成word文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: logisim优先编码器怎么用_变频电机
- 下一篇: java派生类_我可以使派生类从Java