easypoi实现ftl转doc文档(循环填充数据)

news2024/11/22 19:27:17

1.pom文件

```java
<dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
 </dependency>```
 <!-- EasyPoi依赖 -->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.1.0</version>
        </dependency>

2.代码实现

@ApiOperation(value = "easypoi导出(模板)ftl转doc")
    @GetMapping("/export3")
    public void export3(HttpServletResponse response) {
        Map<String, Object> res = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<>();
        for (int i = 0; i < 12; i++) {
            Map<String, Object> map2 = new HashMap<>();
            map2.put("name", "张三" + i);
            map2.put("sex", "男");
            map2.put("age", i + "岁");
            map2.put("address", "西安市");
            list.add(map2);
        }
        // datas必须和flt文件<#list>标签中的名称一样
        res.put("datas", list);

        PrintWriter out = null;
        try {
            Configuration configuration = new Configuration();
            configuration.setDefaultEncoding("utf-8");
            configuration.setDirectoryForTemplateLoading(new File("E:\\codeWork\\hmall\\item-service\\src\\main\\resources\\docx")); // 模版文件前缀路径
            String fileName = "测试文档2.doc";
            //以utf-8的编码读取ftl文件
            Template template = configuration.getTemplate("20240828.ftl", "utf-8"); // 模版名称
            response.reset();
            response.setContentType("application/msword");
            response.setHeader("Content-Disposition", "attachment;filename=\"" + new String(fileName.getBytes("GBK"), "iso8859-1") + "\"");
            response.setCharacterEncoding("utf-8");//此句非常关键,不然word文档全是乱码
            out = response.getWriter();
            template.process(res, out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != out) {
                out.close();
            }
        }

    }

在这里插入图片描述

3. 结果

在这里插入图片描述

注意 :

word转xml(ftl)的时候,一定要用xml格式化,不要直接用idea的代码格式化,如果下载的文件有大小,但是打开没东西,则将文件改为xml双击打开,会有具体的报错行数,看缺失的标签的。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】

室内告白表白祝福布置霓虹灯生日视频制作教程AE模板改字生成器 怎么如何做的【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

select epoll搭建并发式服务器

select 在C语言中&#xff0c;使用select函数可以创建一个并发式服务器。select是一个系统调用&#xff0c;它允许服务器同时监视多个文件描述符&#xff08;如套接字&#xff09;&#xff0c;以便知道哪个文件描述符准备好了进行读取或写入操作。这使得服务器能够同时处理多个…

Python简介、发展史

Python简介、发展史 本文目录&#xff1a; 零、时光宝盒 一、Python简介 二、Python设计者 三、Python发展史 四、Python语言的编程语言特性 五、Python现状 六、Python的未来 零、时光宝盒 我家所在的楼是3栋楼连接在一起的建筑&#xff0c;也就是3栋楼楼顶建筑上互通。…

学习笔记——后端项目中的相关技术 【随时更新】

文章目录 1. Session 共享1.0 cookie和session的工作流1.1 Cookie范围1.2 为什么要共享&#xff1f;1.3 如何共享存储1.4 session共享实现 1. Session 共享 1.0 cookie和session的工作流 在 Web 开发中&#xff0c;Cookie 和 Session 是非常常见的&#xff0c;尤其是在处理用…

使用 Java 在 Android 平台上通过 socket 实现进程间通信

引言 Socket是位于应用层和传输层之间的一个抽象层&#xff0c;把TCP/IP层复杂的操作抽象为几个简单的接口&#xff0c;供应用层调用以实现进程在网络中通信。 Socket分为流式套接字和数据包套接字&#xff0c;分别对应网络传输控制层的TCP协议和UDP协议。TCP协议是一种面向连…

Qt之界面优化

目录 前言 QSS基础知识 选择器 样式属性 控件样式⽰例 绘图 接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 前言 Qt 仿照CSS的模式,引⼊了QSS,来对Qt中的控件做出样式上的设定,从⽽允许程序猿写出界⾯更好看 的代码.当然,由于Q…

【面试题系列Vue05】跟其他人不太一样的 Vue生命周期总结

既然要讲 生命周期&#xff0c;那渲染过程得先了解下。 数据绑定 Vue 文本插值 在 Vue 中&#xff0c;最基础的模板语法是数据绑定&#xff0c;例如&#xff1a; <div>{{ data }}</div>这里绑定了一个 msg 的变量&#xff0c;开发者在 Vue 实例 data 中绑定该变…

DataWhale AI夏令营-《李宏毅深度学习教程》笔记-task2

DataWhale AI夏令营-《李宏毅深度学习教程》笔记 第四章 卷积神经网络卷积神经网络构成一个通俗的例子 第四章 卷积神经网络 这部分看书的时候感觉云里雾里的&#xff0c;好在之前学过一些卷积神经网络、全链接、感受野的概念&#xff0c;我就用自己的理解阐述一篇笔记吧&…

idea插件开发(一)合并检查

一、引言 由于代码合并冲突的时候&#xff0c;代码丢失的情况频发&#xff0c;作者研究idea的VFS虚拟文件系统和Git4ide源码&#xff0c;创作idea插件检测代码合并丢失 可以区分主动删除与被动丢失&#xff0c;比如本地或者删除一段代码&#xff0c;合并之后不会被认为是丢失…

华为云 x 容联云|828企业节,助推中国数智产业实力再升级

2024年8月27日&#xff0c;华为第三届828 B2B企业节在2024中国国际大数据产业博览会上正式开幕。 828 B2B企业节是全国首个基于数字化赋能的企业节&#xff0c;由华为联合上万家生态伙伴共同发起&#xff0c;旨在为广大企业尤其是中小企业搭建数字化创新发展平台&#xff0c;融…

C语言基础(二十二)

在C语言中&#xff0c;对链表进行排序涉及到比较链表中的节点值&#xff0c;并根据比较结果重新排列这些节点。由于链表是非连续存储的数据结构&#xff0c;其排序比数组排序要复杂一些。由链表的结构特性可知&#xff0c;插入排序和归并排序更适合链表排序。 测试代码1&#…

力扣之1853.转换日期格式

文章目录 1. 1853.转换日期格式1.1 题干1.2 建表1.3 题解1.4 实现方式1.5 题解1.6 知识总结 1. 1853.转换日期格式 1.1 题干 表: Days ----------------- | Column Name | Type | ----------------- | day | date | ----------------- day 是这个表的主键。 给定一个Days表&…

基于Spring Boot的陶瓷文化网站的设计与实现

毕业设计&#xff08;论文&#xff09; 论文题目&#xff1a;基于Spring Boot的陶瓷文化网站的设计与实现 博主可接毕设论文&#xff01;&#xff01;&#xff01; 摘 要 中国悠久的陶瓷艺术&#xff0c;作为民族文化遗产的重要载体&#xff0c;历经时代的洗礼&#xff0c;其…

kube-scheduler组件的启动流程与源码走读

概述 摘要&#xff1a;kube-scheduler是kubernetes系统中的重要组件&#xff0c;kub-scheduler 的核心职责是为待调度的 pod 寻找一个最合适的 node 节点, 然后进行 bind node 绑定, 后面 kubelet 才会监听到并创建真正的 pod。kub-scheduler本身是一个功能强大且负责的核心组…

使用Axure打造智慧场景下的数据可视化大屏原型

在数字化转型的浪潮中&#xff0c;数据可视化大屏以其直观、动态、高效的特性&#xff0c;成为了智慧社区、智慧城市、智慧工厂、智慧园区等各个领域不可或缺的展示窗口。作为专业的原型设计软件&#xff0c;Axure不仅以其强大的交互设计能力著称&#xff0c;更在数据可视化大屏…

线段树小例题——结合前后缀获得结果

和我今天上午写的那个前后缀太像了&#xff0c;不能说一模一样&#xff0c;但是至少我觉得思路是真的一点没变 上一道题的链接&#xff1a;http://t.csdnimg.cn/pXBnU P4513 小白逛公园 题意&#xff1a;有n个点&#xff0c;每个点都有一个初值&#xff0c;然后有m个操作&am…

SQL慢查询优化方式

目录 一、SQL语句优化 1. 避免使用 SELECT * &#xff0c;而是具体字段 2.避免使用 % 开头的 LIKE 的查询 3.避免使用子查询&#xff0c;使用JOIN 4.使用EXISTS代替IN 5.使用LIMIT 1优化查询 6.使用批量插入、优化INSERT操作 7.其他方式 二、SQL索引优化 1.在查询条件…

Java异常详解(全文干货)

介绍 Throwable Throwable 是 Java 语言中所有错误与异常的超类。 Throwable 包含两个子类&#xff1a;Error&#xff08;错误&#xff09;和 Exception&#xff08;异常&#xff09;&#xff0c;它们通常用于指示发生了异常情况。 Throwable 包含了其线程创建时线程执行堆栈…

分库分表学习笔记(二)

分库分表学习笔记&#xff08;一&#xff09;-CSDN博客 分表分库规则 图源&#xff08;https://zhuanlan.zhihu.com/p/535713197&#xff09; 水平分表 水平分表一般是我们数据库的数据太多了&#xff0c;原大众点评的订单单表早就已经突破两百G。 数据量太多的影响 1. 查询…

linux dma cache和主存数据不一致问题

1、问题原因 根本原因是cache和dma的目的地址存在重叠。 如果DMA的目的地址与Cache所缓存的内存地址访问有重叠&#xff08;如上图所示&#xff09; &#xff0c; 经过DMA操作&#xff0c; 与Cache缓存对应的内存中的数据已经被修改&#xff0c; 而CPU本身并不知道&#xff0c…