使用POI-TL组件按模板导出word文档

news/2025/10/21 15:33:41/文章来源:https://www.cnblogs.com/tangzeqi/p/19155539

使用POI-TL组件按模板导出word文档

效果展示:

软件说明书付款通知书模板简历

以及更多的效果,可以访问官方文档示例 ····> https://deepoove.com/poi-tl/示例

依赖引入:

<dependencies><!-- poi-tl 核心依赖 --><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.2</version></dependency><!-- Apache POI 核心依赖 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version></dependency><!-- POI OOXML 支持 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.5</version></dependency><!-- POI OOXML Full 支持(处理复杂文档) --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-full</artifactId><version>5.2.5</version></dependency><!-- POI Scratchpad(处理旧版 Word 文档) --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.5</version></dependency>
</dependencies>

编写JAVA导出工具类:

import com.deepoove.poi.XWPFTemplate;
import lombok.extern.slf4j.Slf4j;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Map;/*** poi-tl文旦渲染导出工具* 唐泽齐* @See {https://www.cnblogs.com/tangzeqi}*/
@Slf4j
public class PoitlUtils {/*** 导出渲染后的模板文档** @param templatePath 模板路径,常放于项目resources下如:template/xxx.docx* @param outName      导出文件名,需要与模板文件类型一致* @param data         写入模板的数据,参考 @See {https://deepoove.com/poi-tl}* @param response     流操作,一般来自Controller层Http接口的入参接收*/public static void export(String templatePath, String outName, Map<String, Object> data, HttpServletResponse response) {XWPFTemplate template = null;OutputStream out = null;try {// 设置响应头response.setContentType("application/octet-stream");String fileName = URLEncoder.encode(outName, "UTF-8");response.setHeader("Content-disposition", "attachment;filename=\"" + fileName + "\"");// 编译模板template = XWPFTemplate.compile(ClassLoader.getSystemResourceAsStream(templatePath)).render(data);// 获取输出流out = response.getOutputStream();// 写入响应流
            template.write(out);out.flush();} catch (Exception e) {log.error("导出文档失败", e);throw new RuntimeException("导出文档失败", e);} finally {// 关闭资源if (template != null) {try {template.close();} catch (IOException e) {log.error("关闭模板失败", e);}}// 注意:不要关闭 response 的 OutputStream// Servlet 容器会自动管理这个流
        }}}

调用工具:

PoitlUtils.export("template/XXXX.docx",date+"XXXX.docx",map,response);

代码说明:

一.模板位置获取

ClassLoader.getSystemResourceAsStream(templatePath)

用于查找模板在项目中的位置,假设有项目目录结构如下:

src/main/java/com/example/MyClass.javaresources/templates/template.txt

在工具中:

// 这样可以找到 template.txt
InputStream is1 = this.getClass().getResourceAsStream("/templates/template.txt");// 这样找不到,因为会从 com/example/ 目录下开始查找
InputStream is2 = this.getClass().getResourceAsStream("templates/template.txt");// 使用系统类加载器从 classpath 根目录查找
InputStream is3 = ClassLoader.getSystemResourceAsStream("templates/template.txt");

如果你想要更可靠地加载资源,建议使用:

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(templatePath);

因为:

  1. 它不受当前类的包位置影响
  2. 在复杂的类加载器环境中(如 Web 应用、OSGi 等)更可靠
  3. 可以正确处理从 JAR 文件中加载资源的情况

二.模板渲染数据

https://deepoove.com/poi-tl/#_标签,https://deepoove.com/poi-tl/#_引用标签当然还可以自定义,参考https://deepoove.com/poi-tl/#_配置,以及更深层次自定义https://deepoove.com/poi-tl/#_插件

 

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

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

相关文章

【IEEE出版】2025年智能控制与计算科学国际学术会议 (ICICCS 2025)

2025年智能控制与计算科学国际学术会议 (ICICCS 2025)将于2025年11月14-16日在中国南通举办。ICICCS 2025将汇聚来自全球的学者、研究人员和行业专家,共同探讨智能控制与人工智能领域的最新进展与创新应用。本次会议…

2025 年地铺石厂家最新推荐榜:涵盖生态/仿石/陶瓷等品类,揭秘行业口碑优质企业18厚/火烧/庭院/陶瓷地铺石厂家推荐

引言 当前地铺石市场需求随城市化建设持续增长,但行业乱象却让采购者举步维艰。一方面,产品质量两极分化严重,部分厂商用劣质原料生产的地铺石,抗压、防滑性能不达标,短期内就出现破损、开裂问题,给工程安全与美…

2025-10-20-随感

一晃时间来到了2025年,真真切切成了一个老程序员,还是多记录吧,证明自己还是那么努力过 一:maven编译时强制拉取快照包 需要加上-U 二:tomcat服务下lib包的地址 /web/servers/tomcat/webapps/ROOT/WEB-INF/lib

2025电源适配器厂家推荐,华威仕电子科技专业制造实力企业

2025电源适配器厂家推荐,华威仕电子科技专业制造实力企业 当前电源适配器领域技术挑战与行业现状 随着电子设备市场的持续扩张,电源适配器作为关键配套产品,面临着前所未有的技术挑战。据行业数据显示,全球电源适配…

Jupyter Notebook下载安装启用教程(附安装包,图文并茂)

Jupyter Notebook下载安装启用教程(附安装包,图文并茂)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

语音文字图片工具箱微信小程序:多功能工具与高效变现解决方案

一、概述总结 语音文字图片工具箱微信小程序,是基于微擎系统交付的多功能工具类应用,支持无限多开,兼具实用工具属性与商业变现能力。其核心优势在于整合语音、文字、图片相关高频功能,同时提供流量主广告、微信支…

酷鸭写真分销版小程序系统:AI 驱动的写真变现工具

一、概述总结 酷鸭写真分销版是一款集成微信与抖音小程序的系统,以 AI 技术为核心,提供美颜写真、酷码生成、艺术照片三大核心功能。系统无需用户编写复杂咒语,仅需上传图片即可生成内容,同时支持分销模式,兼顾内…

天天享赚微信小程序:流量主与猜成语结合的变现工具详解

1. 概述总结 “天天享赚” 是一款基于微擎系统交付的微信小程序,核心定位为 “游戏互动 + 流量主变现”。它以 “看图猜成语” 为核心玩法,通过植入普通广告与激励广告实现收益,同时支持功能更新与多版本迭代。 2. …

微信小程序域名查询系统详细介绍

一、概述总结 微信小程序域名查询系统是一款基于微擎系统的实用工具类应用,核心功能是帮助用户在线查询小程序名称的注册状态,目前在微擎应用商城以 “服务套餐” 形式售卖,主打为商家及销售团队提升服务效率。 该系…

TLS1.2 和 TLS1.3的简要区别

TLS1.2 和 TLS1.3的简要区别_tls1.2和tls1.3-CSDN博客

[极客大挑战 2019]Havefun 1 代码审计

题目界面查看网页源代码发现注释代码,使用get参数?cat=dog得到flag

2025粘度计厂家权威推荐:华宇忠宜在线旋转振动多场景精准测量

2025粘度计厂家权威推荐:华宇忠宜在线旋转振动多场景精准测量 在工业生产过程中,粘度测量作为关键工艺参数监测环节,其准确性直接影响产品质量与生产效率。随着工业自动化水平的不断提升,传统离线粘度测量方式已难…

2025 年合肥养老院最新推荐排行榜权威发布:甄选优质机构,深度解析医养结合优势与选择指南合肥智慧/医养结合/社区/瑶海区养老院推荐

引言 当前合肥老龄化进程加快,家庭养老压力递增,养老院成为众多家庭的重要选择。但市场上养老院质量参差不齐,部分机构存在医疗配套不足、服务不规范、设施陈旧等问题,加之信息不对称,家属难辨机构优劣,挑选合适…

程序流程结构

程序流程结构 C/C++支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构 顺序结构:程序按顺序执行,不发生跳转 选择结构:依据条件是否满足,有选择的执行相应功能 循环结构:依据条件是否满足,循环多次执…

oracle查询某一天的数据,即日期条件使用

1.推荐使用范围查询,即 SELECT * FROM your_table WHERE date_column >= TO_DATE(2023-01-31, YYYY-MM-DD) AND date_column < TO_DATE(2023-01-31, YYYY-MM-DD) + 1; 这种方法对于任何日期(包括月末、闰年等…

Redis 哨兵模式搭建教程(基于 Docker,附完整配置与避坑指南)

引言 Redis 哨兵模式(Sentinel)是实现 Redis 高可用的核心方案,能够自动监控主从节点状态,并在主节点故障时完成自动故障转移。本文基于 Docker 环境,详细讲解如何在两台服务器(IP 分别为172.16.126.21和172.16.…

程序内存模型

内存的分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的 全局区:存放全局变量和静态变量以及常量 栈区:由编译器自动分配释放,存放函数的参数值,局部变…

如何从0到1制作一个免费的二维可视化项大屏

在数据驱动决策的时代,二维可视化大屏成为直观呈现数据价值的重要载体。山海鲸可视化作为零代码工具,凭借丰富的组件库与灵活的操作逻辑,让普通用户也能轻松打造专业级大屏。本文将以互联网安全监测大屏为例拆解从 …

2025 年集成电路封装厂家最新推荐榜:甄选技术领先实力厂家,涵盖制造检测测试领域权威名录

引言 2025 年半导体产业加速向先进封装迭代,封装环节作为芯片性能释放的核心载体,直接决定下游产品竞争力。当前市场呈现 “新旧品牌并存、技术层次分化” 格局,传统企业坚守成熟工艺,近五年崛起的新势力则在 Chip…

电商app测试常见问题

为了让您对淘宝APP的常见测试问题有个快速的总体了解,这里用一个表格来汇总主要方面和典型问题:测试维度 常见问题/场景🔧 功能与业务逻辑 优惠券计算与叠加错误、订单状态异常、支付流程失败、秒杀库存不同步📱…