SpringBoot-Freemarker导出word

使用word制作模版文件

使用Freemarker插值语法在需要替换的地方设置变量

把模版文件转换为xml文件保存
把模版文件复制到项目中并修改后缀.ftl
pom引入freemarker
xml 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
编写一个工具类 WordUtils
java 复制代码
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文件
java 复制代码
 AiExportReportTemplateReq templateParams = new AiExportReportTemplateReq()
              .setCurrentTime(DateUtil.format(new Date(), "yyyy年MM月dd日"))
              .setName("xxxxxx");

WordUtils.generateWord(BeanUtil.beanToMap(templateParams),"你好.ftl", "你好-01.docx", response);
相关推荐
mOok ONSC3 小时前
SpringBoot项目中读取resource目录下的文件(六种方法)
spring boot·python·pycharm
lay_liu3 小时前
springboot 文件下载
java·spring boot·后端
smileNicky5 小时前
Spring AI系列之Tool Calling实战指南
人工智能·spring boot·spring
m0_380113846 小时前
SpringBoot创建动态定时任务的几种方式
java·spring boot·spring
weyyhdke7 小时前
基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践
java·spring boot·spring
ILYT NCTR7 小时前
【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
java·spring boot·spring
项目帮8 小时前
Java毕设选题推荐:基于springboot区块链的电子病历数据共享平台设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
java·spring boot·课程设计
helx829 小时前
SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
spring boot·后端·pdf
rOuN STAT9 小时前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
赵丙双11 小时前
spring boot 排除自动配置类的方式和原理
java·spring boot·自动配置