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

SpringBoot项目使用POI-TL动态生成Word文档

        近期项目工作需要动态生成Word文档的需求,特意调研了动态生成Word的技术方案。主要有以下两种:

  • 第一种是FreeMarker模板来进行填充;
  • 第二种是POI-TL技术使用Word模板来进行填充;

以下是关于POI-TL的官方介绍

重点关注:word模版一定、一定、一定要使用Microsoft Word来进行生成,不能使用WPS或其他工具生成。

本例按一下步骤进行讲解

1、准备Word模版文件

2、创建SpringBoot工程并配置pom.xml文件

       <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.7</version></dependency>

3、创建实体对象

Device.java

@Data
@ApiModel
public class Device {@ApiModelProperty(value = "设备ID",name = "deviceId")private Long deviceId ;/** 装备名称 */@ApiModelProperty(value = "设备名称",name = "deviceName")private String deviceName ;/** 装备类型 */@ApiModelProperty(value = "设备类型",name = "deviceType")private String deviceType ;/** 装备型号 */@ApiModelProperty(value = "设备型号",name = "deviceModel")private String deviceModel ;/** 装备用途 */@ApiModelProperty(value = "设备用途",name = "deviceUse")private String devicetUse ;/** 生产厂家 */@ApiModelProperty(value = "生产厂家",name = "manufacturer")private String manufacturer ;/** 采购日期 */@JsonFormat(pattern = "yyyy-MM-dd")@ApiModelProperty(value = "采购日期(yyyy-MM-dd)",name = "purchaseDate")private Date purchaseDate ;

3、编写数据渲染逻辑

            String templateTargetPath = "D:"+ File.separator + "P" + RandomUtil.randomNumbers(10) + ".docx";File templateTargetFile = new File(templateTargetPath);Map<String, Object> mapData = new HashMap();mapData.put("deviceList", deviceList);mapData.put("pipeList", pipeList);mapData.put("taskName", "测试任务"); //渲染数据LoopRowTableRenderPolicy loopRowTableRenderPolicy = new LoopRowTableRenderPolicy();Configure configure = Configure.builder().bind("deviceList", loopRowTableRenderPolicy).bind("pipeList", loopRowTableRenderPolicy).build();//读取模板文件InputStream inputStream = new FileInputStream(new File(templatePath+ File.separator + "方案信息.docx"));XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(mapData);//目标文件template.writeToFile(templateTargetPath);template.close();

注:LoopRowTableRenderPolicy 是一个特定场景的插件,根据集合数据循环表格行。

表格动态内容填充,POI-TL提供了3种方式。

  • 表格行循环
  • 表格列循环
  • 动态表格。

相关文章:

SpringBoot项目使用POI-TL动态生成Word文档

近期项目工作需要动态生成Word文档的需求&#xff0c;特意调研了动态生成Word的技术方案。主要有以下两种&#xff1a; 第一种是FreeMarker模板来进行填充&#xff1b;第二种是POI-TL技术使用Word模板来进行填充&#xff1b; 以下是关于POI-TL的官方介绍 重点关注&#xff1…...

java高效实现爬虫

一、前言 在Web爬虫技术中&#xff0c;Selenium作为一款强大的浏览器自动化工具&#xff0c;能够模拟真实用户操作&#xff0c;有效应对JavaScript渲染、Ajax加载等复杂场景。而集成代理服务则能够解决IP限制、地域访问限制等问题。本文将详细介绍如何利用JavaSelenium快代理实…...

YOLOv3深度解析:多尺度特征融合与实时检测的里程碑

一、YOLOv3的诞生&#xff1a;继承与突破的起点 YOLOv3作为YOLO系列的第三代算法&#xff0c;于2018年由Joseph Redmon等人提出。它在YOLOv2的基础上&#xff0c;针对小目标检测精度低、多类别标签预测受限等问题进行了系统性改进。通过引入多尺度特征图检测、残差网络架构和独…...

uniapp-商城-60-后台 新增商品(属性的选中和页面显示)

前面添加了属性&#xff0c;添加属性的子级项目。也分析了如何回显&#xff0c;但是在添加新的商品的时&#xff0c;我们也同样需要进行选择&#xff0c;还要能正常的显示在界面上。下面对页面的显示进行分析。 1、界面情况回顾 属性显示其实是个一嵌套的数据显示。 2、选中的…...

虹科技术 | 简化汽车零部件测试:LIN/CAN总线设备的按键触发功能实现

汽车零部件测试领域对操作的便捷性要求越来越高&#xff0c;虹科Baby-LIN-RC系列产品为这一需求提供了完美的解决方案。从基础的按键设置到高级的Shift键应用&#xff0c;本文将一步步引导您了解虹科Baby-LIN-RC系列产品的智能控制之道。 虹科Baby-LIN-3-RC 想象一下&#xff0…...

单片机ESP32天气日历闹铃语音播报

自制Arduino Esp32 单片机 可以整点语音播报&#xff0c;闹铃语音播报&#xff0c;农历显示&#xff0c;白天晚上天气&#xff0c;硬件有 Esp32&#xff0c;ST7789显示屏&#xff0c;Max98357 喇叭驱动&#xff0c;小喇叭一枚。有需要源码的私信我。#单片机 #闹钟 #嵌入式 #智能…...

如何解决LCMS 液质联用液相进样器定量环漏液问题

以下是解决安捷伦1260液相色谱仪为例的进样器定量环漏液问题的一些方法&#xff1a;视频操作 检查相关部件 检查定量环本身&#xff1a;观察定量环是否有破损、裂纹或变形等情况。如果发现定量环损坏&#xff0c;需及时更换。检查密封垫&#xff1a;查看进样阀的转子密封垫、计…...

服务器内部可以访问外部网络,docker内部无法访问外部网络,只能docker内部访问

要通过 iptables 将容器中的特定端口请求转发到特定服务器&#xff0c;你需要设置 DNAT&#xff08;目标地址转换&#xff09;规则。以下是详细步骤&#xff1a; 假设场景 容器端口: 8080&#xff08;容器内服务监听的端口&#xff09;目标服务器: 192.168.1.100&#xff08;请…...

机器学习中的特征工程:解锁模型性能的关键

在机器学习领域&#xff0c;模型的性能往往取决于数据的质量和特征的有效性。尽管深度学习模型在某些任务中能够自动提取特征&#xff0c;但在大多数传统机器学习任务中&#xff0c;特征工程仍然是提升模型性能的关键环节。本文将深入探讨特征工程的重要性、常用方法以及在实际…...

JAVA:Spring Boot 集成 RDF4J 实现欺诈检测的技术指南

1、简述 在大数据、知识图谱和金融风控等领域,RDF(Resource Description Framework) 是一种用于表示和查询关联数据的强大工具。RDF4J 是一个流行的 Java 库,用于操作 RDF 数据集,并支持 SPARQL 查询,能够帮助我们进行复杂的欺诈检测。 项目的核心功能: RDF 数据存储:…...

spring boot 注解

spring boot 注解 spring 会把被注解Controller、Service、Repository、Component 标注的类 纳入Spring容器中进行管理。 第7章会讲解 IoC 容器。 Controller。 它用于标注控制器层&#xff0c;在MVC 开发模式中代表C&#xff08;控制器)。 Model View Controller Controlle…...

Spring框架的事务管理

配置文件的方式 <!--第二种写法:使用提供标签的方式--> <context:property-placeholder location"classpath:jd.properties"/><!--加载属性的文件&#xff08;使用开源连接池&#xff09;--> <bean id"dataSource" class"com.a…...

Spring MVC 中请求处理流程及核心组件解析

在 Spring MVC 中&#xff0c;请求从客户端发送到服务器后&#xff0c;需要经过一系列组件的处理才能最终到达具体的 Controller 方法。这个过程涉及多个核心组件和复杂的映射机制&#xff0c;下面详细解析其工作流程&#xff1a; 1. 核心组件与请求流程 Spring MVC 的请求处…...

PCIe Switch 问题点

系列文章目录 文章目录 系列文章目录完善PCIe Retimer Overview Document OutlineSwitch 维度BroadComMicroChipAsmedia 祥硕Cyan其他 完善 Functional block diagram&#xff0c;功能框图Key Features and Benefits&#xff0c;主要功能和优点Fabric 链路Multi-root PCIe Re…...

开源轻量级地图解决方案leaflet

Leaflet 地图&#xff1a;开源轻量级地图解决方案 Leaflet 是一个开源的 JavaScript 库&#xff0c;用于在网页中嵌入交互式地图。它以轻量级、灵活性和易用性著称&#xff0c;适用于需要快速集成地图功能的项目。以下是关于 Leaflet 的详细介绍和使用指南。 1. Leaflet 的核心…...

Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件

目录 1. 创建Flutter项目 1.1使用Android Studio创建Flutter项目 1.2 使用命令行创建Flutter项目 2. Flutter项目介绍 2.1所有代码都在lib目录下编写 2.1 pubspec.yaml 依赖库/图片的引用 ​编辑 3. 运行项目 4. 编写mian.dart文件 4.1 使用MaterialApp 和 Scaffold两个组件…...

如何实现金蝶云星空到MySQL的数据高效集成

金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化建设中&#xff0c;数据的高效流动和准确处理是关键。本文将聚焦于一个具体的系统对接集成案例&#xff1a;金蝶云星空的数据集成到MySQL&#xff0c;方案名称为“xsck-2金蝶销售出库-->mysql”。通过这一案例&#x…...

Web性能优化的未来:边缘计算、AI与新型渲染架构

一、边缘计算与性能优化深度整合 1.1 边缘节点计算卸载策略 • 智能任务分割:将非关键路径计算卸载到边缘节点 // 客户端代码 const edgeTask = new EdgeTask(image-processing); edgeTask.postMessage(imageData, {transfer...

院校机试刷题第四天:1911反转公约数、1702十六进制不进位加法

一、1911反转公约数 1.题目描述 2.解题思路 两个关键点&#xff1a;1.如何把数字反转&#xff0c;2.如何求最大公约数。 反转&#xff1a;用字符串形式存储&#xff0c;定义一个新的字符串倒序存储反转之后的字符串&#xff0c;将字符串按位转换位数字。 求最大公约数&…...

java输入输出类

父类 子类--->System.in(实例类) InputStream(抽象类,所有输入流的父类)|--->FileInputStream---->System.out(实例类&#xff09; OutpustStream(抽象类&#xff0c;所有输出流的父类)|----> FileOutputStream----&…...

Redis解析

Redis解析 一、单线程模型 redis在io层面是多线程的&#xff0c;在数据处理层面是单线程的。 多线程一般用于&#xff1a; 关闭连接删除/淘汰内存网络IO 1.1 io多路复用 redis使用nio&#xff08;select、poll、epoll&#xff09;的方式处理socket 主线程负责接收建立连接…...

golang -- 认识channel底层结构

channel channel是golang中用来实现多个goroutine通信的管道&#xff08;goroutine之间的通信机制&#xff09;&#xff0c;底层是一个叫做hchan的结构体&#xff0c;定义在runtime包中 type hchan struct {qcount uint // 循环数组中的元素个数&#xff08;通道…...

2025年Ai写PPT工具推荐,这5款Ai工具可以一键生成专业PPT

上个月给客户做产品宣讲时&#xff0c;我对着空白 PPT 页面熬到凌晨一点&#xff0c;光是调整文字排版就改了十几版&#xff0c;最后还是被吐槽 "内容零散没重点"。后来同事分享了几款 ai 写 PPT 工具&#xff0c;试完发现简直打开了新世界的大门 —— 不用手动写大纲…...

对称二叉树的判定:双端队列的精妙应用

一、题目解析 题目描述 给定一个二叉树&#xff0c;检查它是否是镜像对称的。例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的&#xff1a; 1/ \2 2/ \ / \ 3 4 4 3而 [1,2,2,null,3,null,3] 则不是镜像对称的&#xff1a; 1/ \2 2\ \3 3问题本质 判断一棵二叉…...

使用Python实现简单的人工智能聊天机器人

最近研学过程中发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...

React 播客专栏 Vol.11|Plain CSS 如何在 React 中优雅登场?

&#x1f44b; 欢迎回到《前端达人 React 播客书单》第 11 期&#xff08;正文内容为学习笔记摘要&#xff0c;音频内容是详细的解读&#xff0c;方便你理解&#xff09;&#xff0c;请点击下方收听 今天我们进入前端样式化的第一课&#xff0c;用最传统的方式 —— Plain CSS…...

css:倒影倾斜效果

这是需要实现的效果&#xff0c;平时用的比较多的是添加阴影&#xff0c;是box-shadow&#xff0c;而添加倒影是box-reflect&#xff0c;需要注意的是box-reflect需要添加浏览器前缀&#xff0c;比如我用的谷歌浏览器&#xff0c;要加-webkit-才能生效。 -webkit-box-reflect:…...

spring学习->sprintboot

spring IoC(控制翻转): 控制:资源的控制权(资源的创建&#xff0c;获取&#xff0c;销毁等) 反转:和传统方式不一样(用上面new什么)&#xff0c;不用new让ioc来发现你用什么&#xff0c;然后我来给什么 DI:(依赖注入) 依赖:组件的依赖关系。如newsController依赖NewsServi…...

语音识别——通过PyAudio录入音频

PyAudio 是一个用于处理音频的 Python 库&#xff0c;它提供了录制和播放音频的功能。通过 PyAudio&#xff0c;可以轻松地从麦克风或其他音频输入设备录制音频&#xff0c;并将其保存为文件或进行进一步处理。 安装 PyAudio 在使用 PyAudio 之前&#xff0c;需要先安装它。可…...

五月月报丨MaxKB在教育行业的应用进展与典型场景

在2025年的3月和4月的“用户应用月度报告”中&#xff0c;MaxKB开源项目组相继总结了MaxKB开源项目在政府、公共事业、教育、医疗以及企事业单位的应用情况。毫无疑问&#xff0c;在DeepSeek等国产大模型被各行各业的用户广泛接受之后&#xff0c;AI应用建设并运营的步伐也在显…...