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

java通过poi-tl导出word实战详细步骤

文章目录

  • 与其他模版引擎对比
  • 1.引入maven依赖包
  • 2.新建Word文档exportWprd.docx模版
  • 3.编写导出word接口代码
  • 4.导出成果

poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性。中文网站

  • 可以通过word模版引擎渲染文本、图片、表格、列表数据
  • 可以渲染条形图(3D条形图)、柱形图(3D柱形图)、面积图(3D面积图)、折线图(3D折线图)、雷达图、饼图(3D饼图)、散点图等图表渲染
  • 可以根据条件隐藏或者显示某些文档内容(包括文本、段落、图片、表格、列表、图表等)
  • 可以根据集合循环某些文档内容(包括文本、段落、图片、表格、列表、图表等)
  • 支持设置书签,文档内锚点和超链接功能
  • 模板即样式,同时代码也可以设置样式
  • 插件化设计,在文档任何位置执行函数

与其他模版引擎对比

在这里插入图片描述

1.引入maven依赖包

(1)引入poi-tl包

<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.2</version>
</dependency>

(2)因为poi-tl依赖于Apache POI5.2.2+,所以必须映入poi依赖包

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.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>5.2.2</version><scope>compile</scope>
</dependency>

(3)继续 引入poi-tl需要的commons-io与log4j-api依赖包(必须引入,否则会报错,报错如下)

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.14.1</version>
</dependency>

不引入会导致报错,报错如下:

在这里插入图片描述

2.新建Word文档exportWprd.docx模版

在静态资源目录下resources/static/templates新建exportWord.docx,编写以下模版内容:
在这里插入图片描述

3.编写导出word接口代码

  @GetMapping("/exportWord")public void exportWord(HttpServletResponse response) throws FileNotFoundException {//存放数据,也就是填充在word里面的值Map<String, Object> params = new HashMap<>();params.put("title","测试使用poi-tl模版导出word");params.put("ceshi","测试使用poi-tl模版导出word");params.put("name","张三");params.put("text","知之为知之不知为不知");//模板路径// String templatePath = "E:\\demo\\word.docx";// 或模板在静态资源的相对路径File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));File templateFile = new File(rootFile, "/static/templates/exportWord.docx");//jar包获取不到文件路径`//URLDecoder.decode() 解决获取中文名称文件路径乱码String templatePath = URLDecoder.decode(templateFile.getPath());//生成文件名String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis();// 导出woldtry {// 导出Word文档为文件XWPFTemplate template = XWPFTemplate.compile(templatePath).render(params);// 将导出的Word文件转换为流response.setContentType("application/octet-stream");response.setHeader("Content-disposition","attachment;filename=\""+fileName+".docx"+"\"");// HttpServletResponse responseOutputStream out = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(out);template.write(bos);bos.flush();out.flush();// 最后不要忘记关闭这些流。PoitlIOUtils.closeQuietlyMulti(template, bos, out);} catch (Exception e) {System.out.println("导出Word文档时出现异常:" + e.getMessage());}}

4.导出成果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器
  • git diff,stash,submodule,format-patch
  • 自定义波形图View,LayoutInflater动态加载控件保存为本地图片
  • 上传图片,base64改为文件流,并转给后端
  • QT 图片处理
  • C#的DllImport使用方法
  • STM32智能空气质量监测系统教程
  • VUE与React的生命周期对比
  • 基于物联网的智慧校园建设与发展
  • 打造你的智能家居指挥中心:基于STM32的多协议(zigbee、http)网关(附代码示例)
  • 【MySQL】4.MySQL 的数据类型
  • jQuery 元素选择器集合
  • 数据结构第25节 深度优先搜索
  • 【算法】无重复字符的最长子串
  • MySql中modify、rename、change的用法和区别
  • 「面试题」如何实现一个圣杯布局?
  • Android单元测试 - 几个重要问题
  • extract-text-webpack-plugin用法
  • Laravel 中的一个后期静态绑定
  • Nodejs和JavaWeb协助开发
  • Odoo domain写法及运用
  • Redis 中的布隆过滤器
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • text-decoration与color属性
  • 彻底搞懂浏览器Event-loop
  • 解决iview多表头动态更改列元素发生的错误
  • 前端
  • 浅谈Golang中select的用法
  • 山寨一个 Promise
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • postgresql行列转换函数
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (4)logging(日志模块)
  • (C++)八皇后问题
  • (十)T检验-第一部分
  • (十五)使用Nexus创建Maven私服
  • (四)Controller接口控制器详解(三)
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (自适应手机端)行业协会机构网站模板
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .gitignore文件_Git:.gitignore
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net 8.0 新的变化
  • .NET CLR Hosting 简介
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET连接MongoDB数据库实例教程
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ C++ ] STL---仿函数与priority_queue
  • [2023-年度总结]凡是过往,皆为序章
  • [2544]最短路 (两种算法)(HDU)