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

文章目录

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

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

与其他模版引擎对比

1.引入maven依赖包

(1)引入poi-tl包

xml 复制代码
<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.12.2</version>
</dependency>

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

xml 复制代码
<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依赖包(必须引入,否则会报错,报错如下)

xml 复制代码
<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接口代码

java 复制代码
  @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();
      // 导出wold
      try {
          // 导出Word文档为文件
          XWPFTemplate template = XWPFTemplate.compile(templatePath).render(params);
          // 将导出的Word文件转换为流
          response.setContentType("application/octet-stream");
          response.setHeader("Content-disposition","attachment;filename=\""+fileName+".docx"+"\"");
          // HttpServletResponse response
          OutputStream 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.导出成果

相关推荐
Han.miracle31 分钟前
数据结构——二叉树的从前序与中序遍历序列构造二叉树
java·数据结构·学习·算法·leetcode
北冥湖畔的燕雀1 小时前
C++泛型编程(函数模板以及类模板)
开发语言·c++
Le1Yu2 小时前
分布式事务以及Seata(XA、AT模式)
java
寒山李白2 小时前
关于Java项目构建/配置工具方式(Gradle-Groovy、Gradle-Kotlin、Maven)的区别于选择
java·kotlin·gradle·maven
QX_hao3 小时前
【Go】--map和struct数据类型
开发语言·后端·golang
你好,我叫C小白3 小时前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
无妄无望3 小时前
docker学习(4)容器的生命周期与资源控制
java·学习·docker
MC丶科3 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
千码君20164 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
跳动的喵尾巴4 小时前
Endnote | word中加载项消失不见,如何处理?
word