freemarker学习+集成springboot+导出word

news/2024/12/2 21:41:01/

目录

一 FreeMarker简介

二 集成springboot,实现案例导出

三 常见面试题总结


一 FreeMarker简介

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。

二 集成springboot,实现案例导出

在本地磁盘随便准备一个文件,内容体如下:

内容案例如下:

 代码实现:

 2.1 导入jar

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

2.2 新建FileController.java类,代码实现如下:

package com.yty.system.controller;import com.alibaba.fastjson.JSONObject;
import freemarker.template.Configuration;
import freemarker.template.Template;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.*;@RestController
@RequestMapping("/file")
@Api(tags = "文件管理api")
public class FileController {@GetMapping("exportPDF")@ApiOperation(value = "文件导出到PDF",notes = "文件导出到PDF")public void exportPDF(HttpServletResponse response) throws Exception{try {exportWord(response, "2012001.ftl", "/templates/ftl/");}catch (Exception e) {e.printStackTrace();}}public void exportWord(HttpServletResponse response, String templateName, String templatePath) throws Exception{Configuration configuration = new Configuration(Configuration.getVersion()); // 创建一个Configuration对象configuration.setClassForTemplateLoading(this.getClass(), templatePath);configuration.setDefaultEncoding("utf-8");//必须加此参数,否则任意key的值为空freemark都会报错configuration.setClassicCompatible(true);// 选择模板Template template = configuration.getTemplate(templateName); //加载模板// 导出文件名String fileName = System.currentTimeMillis() + ".doc";// 导出文件路径String path = "D:\\system\\ee\\模板\\" + fileName;// 创建文件File file = new File(path);Writer out = new FileWriter(file);// 填充数据JSONObject jsonObject = new JSONObject();jsonObject.put("surveyPersonName", "孙悟空");jsonObject.put("createTime", "2012-09");//调用模板对象的process方法输出文件template.process(jsonObject, out);// 下载文件downloadFile(response, file, out);}public void downloadFile(HttpServletResponse response, File file, Writer out) throws Exception{// 下载文件byte[] buffer = new byte[1024];response.addHeader("Content-Disposition","attachment;filename=" + new String(file.getName().getBytes(), "ISO-8859-1"));FileInputStream fis = new FileInputStream(file);BufferedInputStream bis = new BufferedInputStream(fis);OutputStream os = response.getOutputStream();int i = bis.read(buffer);while (i != -1) {os.write(buffer, 0, i);i = bis.read(buffer);}// 关闭流os.close();bis.close();fis.close();out.close();file.delete();}
}

直接复制代码,运行结果:

 集成完毕,数据已填充,导出完毕

三 常见面试题总结

待补充...............


http://www.ppmy.cn/news/1078902.html

相关文章

Qt 动态中英文切换

背景&#xff1a; 需要界面实现动态国际化&#xff0c;一键点击切换中英文或其他语言。 前提&#xff1a; 已经完成了整个界面的翻译&#xff0c;拿到匹配的ts翻译文件&#xff0c;注意&#xff1a;要保证界面切换后&#xff0c;翻译的全覆盖&#xff0c;要保证任何需要反应的地…

第P3周:天气识别

一、前期准备 1、设置GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasetsimport os,PIL,pathlibdevice torch.device("cuda" if torch.cuda.is_available() …

一些进程/线程调试经验和基础

查看进程/线程/系统运行状况等的命令 主线剧情02-ARM-Linux基础学习记录_Real-Staok的博客-CSDN博客 里面的 Linux Shell 一节 的 任务后台执行 / 任务&进程查看 部分。 关于Linux下进程的详解【进程查看与管理】 - AshJo - 博客园 (cnblogs.com)。 linux top命令查看内存…

kubevirt虚机创建svc通过NodePort的方式暴露端口

背景 存在kubevit存在的三个虚机&#xff1a; ubuntu-4tlg7 7d22h Running True ubuntu-7kgrk 7d22h Running True ubuntu-94kg2 7d22h Running True 网络没有做透传&#xff0c;pod也不是underlay网络想要通过NodePort方式暴露虚机22端口进行远程登录。 …

【Java 动态数据统计图】动态X轴二级数据统计图思路案例(动态,排序,动态数组(重点推荐:难))八(130)

需求&#xff1a; 1.有一组数据集合&#xff0c;数据集合中的数据为动态&#xff1b; 举例如下&#xff1a; [{province陕西省, city西安市}, {province陕西省, city咸阳市}, {province陕西省, city宝鸡市}, {province陕西省, city延安市}, {province陕西省, city汉中市}, {pr…

Vue实现Antv/X6中的示例,以及一些er图开发场景

通过Vue实现Antv X6中的示例&#xff0c;以及一些开发场景&#xff0c;代码已经丢到仓库里了。 lwstudy/antv-x6-vue-demo: Vue实现Antv X6中的示例&#xff0c;以及一些开发场景 (github.com)learn-antv-x6: antv/X6学习 (gitee.com) 介绍 使用脚手架&#xff08;自动生成接…

【Css】Less和Sass的区别:

文章目录 一、定义&#xff1a;【1】Less【2】Sass 二、相同之处:三、区别:【1】实现方式&#xff1a;【2】实现方式&#xff1a;【3】混合(Mixins)&#xff1a;【4】解析方式&#xff1a;【5】变量的作用域&#xff1a;【6】比起Less 一、定义&#xff1a; 【1】Less Less 是…

简述SpringMVC

一、典型的Servlet JSP JavaBean UserServlet看作业务逻辑处理&#xff08;Controller&#xff09;User看作模型&#xff08;Model&#xff09;user.jsp看作渲染&#xff08;View&#xff09; 二、高级MVC 由DispatcherServlet对请求统一处理 三、SpringMVC MVC与Spr…