使用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.java
resources/
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);
因为:
- 它不受当前类的包位置影响
- 在复杂的类加载器环境中(如 Web 应用、OSGi 等)更可靠
- 可以正确处理从 JAR 文件中加载资源的情况
二.模板渲染数据
https://deepoove.com/poi-tl/#_标签,https://deepoove.com/poi-tl/#_引用标签当然还可以自定义,参考https://deepoove.com/poi-tl/#_配置,以及更深层次自定义https://deepoove.com/poi-tl/#_插件
使用POI-TL组件按模板导出word文档的更多相关文章
- 使用Spire.Doc组件利用模板导出Word文档
以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作, ...
- poi根据模板导出word文档
POI结构与常用类 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI ...
- Aspose.Words利用Word模板导出Word文档
今天工作中遇到了导出Word文档的问题,但是在搜索Aspose.Words 导出Word文档时发现网上的方法都是有头没尾的,有的只有一小段实例,让人看着摸不着头脑.借着https://www.cnbl ...
- .NET通过调用Office组件导出Word文档
.NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...
- C#导出Word文档开源组件DocX
1.帮助文档,这东西找了很久,而且它版本很旧,还是英文,W8.1系统上打不开 http://download.csdn.net/detail/zuofangyouyuan/7673573 2.开源网址 ...
- 前台导出Word文档思路步骤总结(freemarker)
1. 需求是导出word带表格,表格列数不变,行数由数据库的值决定: 2. 导出最开始想的是直接前端导出,使用了jquery-wordexport插件,导出后,表格边框全没了,无法使用: 3. 采用了 ...
- C# 导出word文档及批量导出word文档(1)
这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量 ...
- C# 导出word文档及批量导出word文档(4)
接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...
- Java 用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- freemarker导出word文档
使用freemarker导出word文档的过程 **************************************************************************** ...
随机推荐
- JAVA基础-4-.数据类型--九五小庞
练习代码: 1 public class Demo1 { 2 public static void main(String[] args) { 3 System.o ...
- DP 优化 学习笔记
0 参考资料 DP 优化方法大杂烩 II. -- Alex_Wei 算法竞赛进阶指南 -- LYD XMOJ 倾情讲解 -- BYD 1 斜率优化 1.1 斜率优化简介 如果一类最优化问题的 dp 式 ...
- C#性能优化:为何 x * Math.Sqrt(x) 远胜 Math.Pow(x, 1.5)
大家好,今天我们来聊一个由 AI 引发的"血案",主角是我们日常开发中可能不太在意的 Math.Pow 函数. 缘起:一个"烧CPU"的爱好 熟悉我的朋友可能知 ...
- 【攻防世界】simple_transfer
1. 首先下载附件,解压出来之后得到的是一个pcap文件,是一种网络数据包捕获文件,直接丢进wireshark. 2. 先从关键字flag作为突破口进行查询,得到如下搜索结果. 3. 然后右键该数据包 ...
- Adobe2024全家桶大更新, 包含Win/Mac M1 M2 ,安装教程分享
按照以往的惯例每年的10月份下旬将会迎来Adobe一年一度的软件大更新,大家期待已久的 Adobe 2024 全家桶终于来了,这次可以说是不痛不痒的大更新,喜欢尝鲜的小伙伴赶紧安排上! Adobe 2 ...
- RAG检索策略深度解析:从BM25到Embedding、Reranker,如何为LLM选对“导航系统”?
大家好!今天我们来聊聊一个热门技术--RAG(检索增强生成)中至关重要的"检索"环节.如果你正在探索如何让你的大型语言模型(LLM)更智能.回答更靠谱,那这篇文章你可千万别错过. ...
- 网页自动化——VBA和InternetExplorer.Application
网页自动化--VBA和InternetExplorer.Application 转载:http://www.360doc.com/content/18/0223/17/52075843_7317627 ...
- php 四舍五入保留两位小数,自动补齐0
php四舍五入保留两位小数 很简单 方法一 (自动补齐0) echo sprintf("%.2f", $num); 方法2(不补齐0) echo round($num,2); 最近 ...
- dootask支持https的设置
我解决了这个问题,我将反向代理的配置文件改成location / {proxy_http_version 1.1;proxy_pass http://127.0.0.1:1234;proxy_set_ ...
- 如何将ES6转换成ES5?
https://blog.csdn.net/qq_40127119/article/details/126953912 一. 介绍ECMAScript 6(ES6)的发展速度非常之快,但现代浏览器对E ...