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

使用springBoot的freemarker生成按模板生成word

后端操作

引入对应的依赖包

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

生成word代码

public static void main(String[] args) throws Exception {
        // 获取模板文件的数据,按照自己的业务写
        Map<String,Object> dataMap = getWordData();

        // 创建FreeMarker配置类
        Configuration configuration = new Configuration(DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        configuration.setDefaultEncoding("utf-8");
        // 设置模板文件所在的文件夹位置 注意这里不是具体的模板文件 而是模板文件所在目录的位置
        String templateFolder = GenerateDataDictionary.class.getClassLoader().getResource("word-template").getPath();
        FileTemplateLoader fileTemplateLoader = new FileTemplateLoader(new File(templateFolder), true);
        configuration.setTemplateLoader(fileTemplateLoader);

        // 创建要输出的文件
        File file = new File("D:\\Desktop\\aa.doc");

        // 找到对应的模板,即上面设置的模板文件目录下的模板文件全称
        Template template = configuration.getTemplate("数据字典.ftl");
        // 将数据替换到模板的指定位置,生成新的word文件
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file));
        template.process(dataMap, outputStreamWriter);

        outputStreamWriter.flush();
        outputStreamWriter.close();
    }

生成模板

先创建一个word文件,其中动态的数据用占位符${xxx}的格式书写

在这里插入图片描述

将文件另存为.xml格式

在这里插入图片描述

将.xml格式的文件放置到刚才后端指定的模板文件目录下

tips:word另存为后xml文件的格式是乱序的,可以将文件放到idea中,用ctrl+alt+L进行格式化
在这里插入图片描述

获取普通数据

占位符中直接${xxx}获取就行

遍历list

	List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");

        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("testList", list);
<#list testList as item>
${item}
</#list>

遍历map

	List<String> testList = new ArrayList<>();
    testList.add("a");
    testList.add("b");

    Map<String, Object> testMap = new HashMap<>();
    testMap.put("name", "joe");
    testMap.put("testList", testList);

    Map<String, Object> dataMap = new HashMap<>();
    dataMap.put("testMap", testMap);
<#assign testMapKeys=testMap?testMapKeys/>
 ${testMap["name"]}
  <#list testMap["testList"] as item>
      ${item}
      <#-- 如果item是对象,直接用.既可以获取属性 如下-->
      ${item.name}
  </#list>

http://www.kler.cn/a/418689.html

相关文章:

  • Chrome 132 版本新特性
  • C语言之整数转换英文表示
  • linux 安装PrometheusAlert配置钉钉告警
  • 【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)
  • AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构全解析
  • 八大排序--冒泡排序
  • pycharm(一)安装
  • electron学习 渲染进程与主进程通信
  • ArrayList和LinkedList的区别(详解)
  • Mybatis:CRUD数据操作之多条件查询及动态SQL
  • 基于RISC-V 的代理内核实验(使用ub虚拟机安装基本环境)
  • Vivado程序固化到Flash
  • 「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器
  • 【VUE3】【Naive UI】<NCard> 标签
  • Redis 3 种特殊数据类型详解
  • 详解Qt 之QSwipeGesture手势滑动
  • unity中:Unity 中异步与协程结合实现线程阻塞的http数据请求
  • OGRE 3D----2. QGRE + QQuickView
  • 【博主推荐】C#中winfrom开发常用技术点收集
  • 如何在 Ubuntu 16.04 上使用 GitLab CI 设置持续集成流水线
  • 基于ZYNQ-7000系列的FPGA学习笔记3——开发环境搭建点亮一个LED
  • 1.2 算法和算法评价
  • 计算机网络之传输层协议UDP
  • com.intellij.diagnostic.PluginException……[Plugin: hg4idea]
  • RabbitMQ在手动消费的模式下设置失败重新投递策略
  • Spring Data JPA(三) 原理分析