SpringBoot整合FreeMarker生成word表格文件(使用FTL模板)

这篇具有很好参考价值的文章主要介绍了SpringBoot整合FreeMarker生成word表格文件(使用FTL模板)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,什么是FreeMarker,FTL模板?
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
freemarker ftl模板,SpringBoot专栏,word,spring boot,java
二,生成FTL模板文件
freemarker ftl模板,SpringBoot专栏,word,spring boot,java

  1. 创建一个word文件,按照要要导出的数据进行页面排版和布局,动态的信息可以设置为先设置为{xxx}这种格式
  2. 把文件另存为xml文件,然后把里面动态信息{xxx}前面加上$ , 变为 ${xxx}。
  3. 把文件重命名为 .ftl 结尾的文件。
  4. 把文件放入resources/templates 目录下

三,引入freemarker依赖

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

四,工具类

package cn.iocoder.yudao.module.tjl.util.word;


import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;

/**
 * @ClassName: ExportWord
 * @Description: 导出word工具类
 * @Authror: XQD
 * @Date: 2023/6/16 15:59
 */
public class ExportWord {

    private Configuration configuration;
    private String encoding;
    private String exportPath = "D:\\data";

    /**
     * 构造函数
     * 配置模板路径
     * @param encoding
     */
    public ExportWord(String encoding) {
        this.encoding = encoding;
        configuration = new Configuration();
        configuration.setDefaultEncoding(encoding);
        configuration.setClassForTemplateLoading(this.getClass(), "/templates");
    }

    /**
     * 导出word文档到客户端
     * @param response
     * @param fileName
     * @param tplName
     * @param data
     * @throws Exception
     */
    public void exportDoc(HttpServletResponse response, String fileName, String tplName, Map<String, Object> data, FreeMarkerConfigurer freeMarkerConfigurer) throws Exception {
        response.reset();
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=" +  URLEncoder.encode(fileName , "UTF-8"));
        // 把本地文件发送给客户端
        Writer writer = response.getWriter();
        Template template = getTemplate(tplName, freeMarkerConfigurer);
        template.process(data, writer);
        writer.close();
    }

    /**
     * 导出word文档到指定目录
     * @param fileName
     * @param tplName
     * @param data
     * @throws Exception
     */
    public 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);
    }

    /**
     * 获取模板 打成jar包后获取不到模板的方式 freeMarkerConfigurer
     * @param name
     * @return
     * @throws Exception
     */
    public Template getTemplate(String name, FreeMarkerConfigurer freeMarkerConfigurer) throws Exception {
        freemarker.template.Configuration configuration = freeMarkerConfigurer.getConfiguration();
        freemarker.template.Template template = configuration.getTemplate(name);
        return template;
    }

    /**
     * 获取模板
     * @param name
     * @return
     * @throws Exception
     */
    public Template getTemplate(String name) throws Exception {
        return configuration.getTemplate(name);
    }
}

五,实例演示

    @Autowired
    FreeMarkerConfigurer freeMarkerConfigurer;

 /**
     * 导出word
     */
    @Override
    public void exportNewValvePressure1(HttpServletResponse response) throws Exception {
        // TODO 获取数据源,查询需要动态加入的数据
       
        // 添加表单的抬头信息
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        String today = format.format(new Date());
        String fileName = today + ".doc";
        Map<String, Object> dataMap = new HashMap<>();
        // 这里的key要与FTL模板中设置的${xxx}的值对应。
        dataMap.put("name", "尼古拉斯");
        dataMap.put("sex", "男");
        dataMap.put("dizhi", "宇宙的尽头");
        dataMap.put("phone", "1666666666");
        new ExportWord("UTF-8").exportDoc(response, fileName, "xinxi.ftl", dataMap, freeMarkerConfigurer);
    }

六,效果图
freemarker ftl模板,SpringBoot专栏,word,spring boot,java
补充:如果导出到表格的内容需要换行,可已在内容中加入 “<w:br/>”文章来源地址https://www.toymoban.com/news/detail-842969.html

到了这里,关于SpringBoot整合FreeMarker生成word表格文件(使用FTL模板)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 根据模板动态生成word(一)使用freemarker生成word

    @ 目录 一、准备模板 1、创建模板文件 2、处理模板 2.1 处理普通文本 2.2 处理表格 2.3 处理图片 二、项目代码 1、引入依赖 2、生成代码 三、验证生成word 首先先建立一个word文件,输入模板内容freemaker的内容,下面是本次演示的word文件。 然后将word文件另存为 .xml 文件,然后再

    2024年02月13日
    浏览(75)
  • freemarker模板生成的word文档优化

    使用压缩工具打开docx模板,取出document.xml,如下图: 将用压缩工具打开后的docx文档里面的document.xml复制出来,并将document.xml后缀改为.ftl,然后进行参数预设。 将内容格式化后修改需要替换的内容为freemarker标签,对document.ftl进行参数预设,如下图: 文件准备好后存放到某个

    2024年02月02日
    浏览(40)
  • freemarker学习+集成springboot+导出word

    目录 一 FreeMarker简介 二 集成springboot,实现案例导出 三 常见面试题总结 FreeMarker  是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。 在本地磁盘随便准备一个文件,内容体如下

    2024年02月10日
    浏览(34)
  • 基于Java+freemarker实现动态赋值以及生成Word文档

    有一个需求就是给定一个正确格式的 Word 文档模板,要求通过动态赋值方式,写入数据并新生成 该模板格式的 Word 文档。这很明显使用 Java+freemarker 方式来实现颇为简单。 (1)准备好一个正确格式的 Word 文档(测试文档 - 原版.docx) (2)将其另存为xml文件(测试文档 - 原版

    2024年02月09日
    浏览(37)
  • JAVA利用Freemarker模版动态生成并导出word文档(全网最详细)

    公司的某个需求,需要根据接口的信息生成一份word接口文档信息并支持导出功能。以前没做过这种需求,于是搜罗各种资料,最终发现java利用freemarker模版可以实现这个功能。 1、需要的环境 2、创建模板 1)展示word文档如下所示: 2)将word文档动态的参数替换成占位符,如下

    2024年02月16日
    浏览(33)
  • vue 使用docx库生成word表格文档

            在Vue.js中生成Word表格文档,可以通过前端库来实现。这些库可以帮助我们轻松地将HTML表格转换为Word文档(通常是.docx格式)。以下是一些流行的前端库,它们可以用于在Vue项目中生成Word表格文档:                  docx是一个流行的JavaScript库,用于在浏览

    2024年02月21日
    浏览(43)
  • 使用POI生成word文档的table表格

    //生成一行一列的table XWPFTable table = document.createTable(); //添加列 table.getRow(0).addNewTableCell(); //添加行(添加的新行默认就是总共的列数) table.createRow(); 测试Demo:CreateTableDemo1.java 生成结果: //生成3行5列的table XWPFTable table2 = document.createTable(3, 5); 测试Demo: 生成结果: 创建的两

    2024年01月25日
    浏览(35)
  • freemarker 使用word模板赋值

    这里贴上自己测试的ftl文件 生成的效果 参考: https://blog.csdn.net/weixin_46174854/article/details/116855252 https://blog.csdn.net/weixin_45853881/article/details/129298494 https://blog.csdn.net/qq_42851623/article/details/122879852 https://blog.csdn.net/weixin_45103378/article/details/118395284 https://www.cnblogs.com/ayueC/p/15118381.html

    2024年02月11日
    浏览(32)
  • 使用freemarker,数据导出word并下载

    1.1 项目背景 最近在开发一个项目,需要导出一些数据,然后写入到word文档中,然后再导出到本地,这个需求是比较常见的,但是我在网上找了很多资料,都没有找到一个比较好的解决方案,所以就自己写了一个,这里分享给大家,希望能帮助到大家。 项目中使用的技术栈:

    2024年02月05日
    浏览(30)
  • Freemarker:生成HTML文本文件

    前置工作参考: Freemarker:基本使用_moreCalm的博客-CSDN博客   1、修改application.yml配置文件 2、在test下创建测试类 FreemarkerTest 3、查看结果  

    2024年02月14日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包