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);