当前位置: 首页 > 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.导出成果

在这里插入图片描述

http://www.lryc.cn/news/397247.html

相关文章:

  • 将自签证书添加到Java的可信任证书列表中
  • 一文清晰了解CSS——简单实例
  • 工程师 - 什么是XML文件
  • [AI 大模型] 阿里巴巴 通义千问
  • 关于无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上 解决方法
  • 轻松创建对象——简单工厂模式(Java实现)
  • Docker Dockerfile:构建与优化
  • 开源项目有哪些机遇与挑战?
  • 利用【Python】【线性规划】优化工厂生产:实现智能资源配置与利润最大化的现代解决方案
  • 【spark】Exception in thread “main“ ExitCodeException exitCode=-1073741701
  • 数学建模美赛经验小结
  • 206. 反转链表 (Swift 版本)
  • 海狐外卖O2O商城系统:技术架构与运营模式的深度解析
  • 14-31 剑和诗人5 - 使用 AirLLM 和分层推理在单个 4GB GPU 上运行 LLama 3 70B
  • 风景园林工程设计乙级资质业绩要求案例分析
  • 无人机之飞行规划与管理篇
  • realsense D435l+mid360标定
  • 深度学习中的正则化技术 - 数据集增强篇
  • 【Docker系列】Docker 镜像源:优化你的容器化开发流程
  • 【Linux】Windows环境下配置虚拟机静态IP
  • 完美解决AttributeError: ‘list‘ object has no attribute ‘shape‘的正确解决方法,亲测有效!!!
  • 链接服务器“XX”的OLEDB访问接口“MSOLEDBSQL”返回了消息“登录超时已过期” 解决方法
  • 【AI伦理与社会责任】讨论人工智能在隐私保护、偏见消除、自动化对就业的影响等伦理和社会问题。
  • Qt编程技巧小知识点(1)TCP缓存区数据读取
  • vue 搭建 pinia
  • 什么是CLR
  • Spring MVC -01
  • 山海鲸可视化——天地图画面和热力图
  • Python 利用pandas处理CSV文件(DataFrame的基础用法)
  • c++ 的(引用)和*(指针)