当前位置: 首页 > news >正文

SpringBoot-Freemarker导出word

使用word制作模版文件

使用Freemarker插值语法在需要替换的地方设置变量
在这里插入图片描述

把模版文件转换为xml文件保存

在这里插入图片描述

把模版文件复制到项目中并修改后缀.ftl

在这里插入图片描述

pom引入freemarker
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>
编写一个工具类 WordUtils
package com.gsafety.bg.emis.event.service.utils;import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.experimental.UtilityClass;/*** word生成工具类** @author :王建* @since :2023-05-12 15:01*/
@UtilityClass
public class WordUtils {/*** 生成 word 文档方法** @param dataMap      要填充的数据* @param templateName 模版名称* @param fileName     要输出的文件路径* @throws Exception 抛出的异常*/public static void generateWord(Map<String, Object> dataMap, String templateName, String fileName, HttpServletResponse response) throws Exception {// 设置FreeMarker的版本和编码格式Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);configuration.setDefaultEncoding("UTF-8");configuration.setURLEscapingCharset("UTF-8");configuration.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);// 此处把模版文件都放在 resources 下的 templates 中configuration.setClassForTemplateLoading(WordUtils.class, "/templates");// 设置FreeMarker生成Word文档所需要的模板Template tem = configuration.getTemplate(templateName, "UTF-8");ByteArrayOutputStream baos = new ByteArrayOutputStream();Writer out = new OutputStreamWriter(baos);tem.process(dataMap, out);byte[] bytes = baos.toByteArray();response.setCharacterEncoding("utf-8");response.setContentType("application/x-msdownload");fileName = URLEncoder.encode(fileName, "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");response.setHeader("FileName", fileName);response.setContentLength(bytes.length);ServletOutputStream outputStream = response.getOutputStream();outputStream.write(bytes);outputStream.flush();outputStream.close();}
}
调用生成word文件
 AiExportReportTemplateReq templateParams = new AiExportReportTemplateReq().setCurrentTime(DateUtil.format(new Date(), "yyyy年MM月dd日")).setName("xxxxxx");WordUtils.generateWord(BeanUtil.beanToMap(templateParams),"你好.ftl", "你好-01.docx", response);
http://www.dtcms.com/a/268898.html

相关文章:

  • 基于pycharm,python,flask,uniapp,sklearn机器学习,orm,mysql,在线恶意流量检测系统开发
  • python数据结构与算法-递归
  • 当“漏洞”成为双刃剑——合法披露与非法交易的生死线在哪里?
  • Kafka 消费者组再平衡优化实践指南
  • HTTP 重定向
  • python 数据分析 单细胞测序数据分析 相关的图表,常见于肿瘤免疫微环境、细胞亚群功能研究 ,各图表类型及逻辑关系如下
  • Python实现文件夹中文件名与Excel中存在的文件名进行对比,并进行删除操作
  • 护照阅读器在酒店应用场景
  • 【机器学习笔记 Ⅱ】8 多标签和多类别
  • 2. 你可以说一下 http 版本的发展过程吗
  • 【PTA数据结构 | C语言版】计算1~n与1~m每一项相互乘积的和
  • ArcGIS 水文分析升级:基于深度学习的流域洪水演进过程模拟
  • windows安装python环境以及对应编辑器的详细流程
  • 告别数据不一致!Spring Boot+Canal+RocketMQ实现精准的MySQL变更监听
  • 【flutter 在最新版本中已经弃用了传统的 apply from 方式引入 Gradle 插件】
  • 源哈希(sh)解析
  • 如果让计算机理解人类语言- One-hot 编码(One-hot Encoding,1950s)
  • Charles 中文版抓包工具详解:加速 API 调试与网络问题排查
  • tensorflow武林志第三卷第一章:天罗剑网
  • 【Java】switch,case,default,break用法
  • 在线学堂-4.媒资管理模块(三)
  • 技术面试题,HR面试题
  • LastActivityView -查看电脑上的所有操作记录
  • 基于MATLAB的图片和视频时间戳识别与可视化系统
  • 国际数字影像产业园:一站式服务,加速企业成长
  • 国产DSP,QXS320F280049,QXS320F28377D,QXS320F2800137,QXS320F28034
  • unity luban接入
  • Kotlin流操作符简介
  • uniapp三步完成生成一维码图片
  • 在linux 上使用tcpdump监听http 端口的报文并分析