什么是poi-tl

poi-tl(poi template language)是Word模板引擎,使用Word模板和数据创建很棒的Word文档。

在文档的任何地方做任何事情(Do Anything Anywhere)是poi-tl的星辰大海。

文档链接: Poi-tl Documentation

poi-tl的优势

poi-tl 能做什么


poi-tl 使用注意

poi-tl 是基于 Apache POI ,使用时请注意poi的版本依赖冲突问题!!

解决poi版本冲突

排除依赖慎用,请看官方的稳定版本支持的poi版本

        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.7</version><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId></exclusion><exclusion><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></exclusion><exclusion><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></exclusion><exclusion><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId></exclusion></exclusions></dependency>

添加依赖

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

常用场景代码实现

模板截图


使用到的标签介绍

{{name1}} {{name2}} 为文本

{{@img1}} {{@img2}} {{@img3}} … 为图片

{{?dataList}} {{/dataList}} 为区块对

代码实现如下

import com.deepoove.poi.data.TextRenderData;@lombok.Data
public class Data {private String name1;private String name2;/*** 对象里可以使用poi-tl提供的类**/private TextRenderData text;private String img1;private String img2;private String img3;private String img4;private String img5;}
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.TextRenderData;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import com.deepoove.poi.util.PoitlIOUtils;
import com.zm.util.Word2PdfUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 操作word** @author zhou*/
@Slf4j
@RestController
public class PoiController {// http://localhost:8080/poi/tl@GetMapping("/poi/tl")public void poitl(HttpServletResponse response) {// 构建数据Map<String, Object> datas = getDataList();// dataList为要传入模板的 信息listLoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();Configure config = Configure.builder().bind("dataList", policy).build();try (ServletOutputStream out = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(out);//读取模板的文件流,并用datas替换模板标签XWPFTemplate template = XWPFTemplate.compile(new File("C:\\Users\\zhou\\Desktop\\土地供应情况-模板.docx"), config).render(datas);) {String filename = "test.docx";response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));//输出word文件流,输出后关闭流template.write(bos);bos.flush();out.flush();PoitlIOUtils.closeQuietlyMulti(template, bos, out);} catch (IOException e) {e.printStackTrace();}}private Map<String, Object> getDataList() {//将需要替换的内容赋值给datasMap<String, Object> datas = new HashMap<>();List<Data> data = new ArrayList<>();Data data1 = new Data();data1.setName1("地块选址位于【惠城区水口街道鹿岗片区1】,计算指标用地面积约【1111】平方米。");data1.setName2("【红线范围内有一般农地区、林业用地和其他用地区用地规模需调整落实。】");data1.setText(new TextRenderData("000000", "Sayi1"));data1.setImg1("D:/hcqgdxm/img/1.png");data1.setImg2("D:/hcqgdxm/img/2.png");data1.setImg3("D:/hcqgdxm/img/3.png");data1.setImg4("D:/hcqgdxm/img/4.png");data1.setImg5("D:/hcqgdxm/img/5.png");Data data2 = new Data();data2.setName1("地块选址位于【惠城区水口街道鹿岗片区2】,计算指标用地面积约【2222】平方米。");data2.setName2("【红线范围内有一般农地区、林业用地和其他用地区用地规模需调整落实。】");data2.setText(new TextRenderData("000000", "Sayi2"));data2.setImg1("D:/hcqgdxm/img/1.png");data2.setImg2("D:/hcqgdxm/img/2.png");data2.setImg3("D:/hcqgdxm/img/3.png");data2.setImg4("D:/hcqgdxm/img/4.png");data2.setImg5("D:/hcqgdxm/img/5.png");data.add(data1);data.add(data2);datas.put("dataList", data);return datas;}
}

结果展示

注意

使用区块对时,占位符 {{?dataList}} {{/dataList}} 为空格出现时,检查模板 清除占位符 {{?dataList}} {{/dataList}} 的格式,并看看空格是否去掉了

springboot整合poi-tl相关推荐

  1. Springboot整合Poi导出excel(简单版)

    一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...

  2. springboot整合poi(使用EXCEL模板导出导入)

    springboot整合poi 依赖 <!-- poi依赖--><dependency><groupId>org.apache.poi</groupId> ...

  3. springboot整合poi读取数据库数据和图片动态导出excel

    springboot整合poi读取数据库数据和图片动态导出excel 第一次操作 话不多说就直接上代码 实现代码 需要的依赖 <dependency><groupId>org. ...

  4. Springboot整合Poi导出excel(注解版)

    简介 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 上文提到通过poi简单导出Excel后,很多读者反应需要解决导出自适应 ...

  5. Springboot整合poi +vue实现导出导入Excle表格数据展示图形

    工具: idea 数据库: mysql 框架:Springboot 准备工作: 1.导入主要依赖 (poi) <dependency><groupId>org.apache.p ...

  6. springboot -- 整合 poi 解析Excel 更新数据库数据

    目录: 1.建表,实体类,dao层,service层,自行操作 2.Excel–>Poi --> Maven依赖 3.解析Excel --> Poi 工具类 --> Confi ...

  7. springboot整合poi基于excel模板下载的功能实现

    现在网上有很多基于poi的excel导入导出功能实现的代码,大家都写的很好,但好像关于静态资源excel模板导出的却很少.我整理了一下项目中遇到的excel导出的功能代码,展示如下,希望有所帮助,如有 ...

  8. springboot整合POI导出word(文字加图片)

    1.引入Poi依赖 2.设置word模板 3.(工具类)Utils 4.Controller 5.文件放置 6.运行结果 1.引入Poi依赖 <dependency><groupId ...

  9. springboot整合poi解析excel

    1.poi的maven引入 <!-- poi导入导出 --><dependency><groupId>org.apache.poi</groupId>& ...

  10. springboot整合poi-tl根据模板导出word

    springboot整合poi-tl根据模板导出word poi-tl中文文档:http://deepoove.com/poi-tl/ 引入所需包 <dependency><grou ...

最新文章

  1. J. Cheminform. | GraphSol:预测接触图助力蛋白质溶解度预测
  2. sap 判断字串是不是为数字
  3. Cocos2d-x学习笔记(19)(TestCpp源代码分析-3)
  4. 几道偏序问题(数据结构)
  5. linux 用户管理以及其他命令
  6. 基于visual Studio2013解决C语言竞赛题之0505选数
  7. SpringBoot —— @ComponentScan注解
  8. js页面初始化方法只调用一次_跟我学 “Linux” 小程序 Web 版开发(三):云开发相关数据调用
  9. for循环的一个复制算法(Java)
  10. c# Application.run和form.show区别
  11. 厉害!某生鲜电商平台竟然是这样设计监控模块的(已开源)~
  12. LVS负载均衡群集之NAT模型DR模型
  13. 考研408笔试栈和队列问题
  14. SequoiaDB 网络通信三剑客(maxsocketpernode,maxsocketperthread,maxsocketthread)
  15. 租车还能这么玩?快来看看神州租车
  16. Google Earth Engine(GEE)——哥白尼大气监测 (CAMS) 全球气溶胶AOI近实时观测数据集
  17. 大数据权限管理sentry与Kerberos概述
  18. MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)
  19. iframe 高度100%时,出现垂直滚动条
  20. 发那科机器人网段_用PC快速输入FANUC机器人信号文本注释

热门文章

  1. “快乐宝宝”风波始末 (二)
  2. 北漂五年,创业、字节、和阿里,现在回家
  3. 动态生成 iframe;销毁 iframe,释放内存
  4. 作为一等公民的 Python 函数
  5. 15个经典面试问题及回答思路,已拿offer
  6. python与审计底稿关系_刚刚,我在会计师事务所的朋友给了我一份《“四大”审计底稿》!...
  7. 内网渗透学习 day1
  8. 质价比之王!真我11 Pro+发布1999元起售
  9. 开源API网关Kong
  10. [dp][lis] Jzoj P5920 风筝