poi-tl(poi template language)是基于Apache POI的Word模板引擎。纯Java组件,跨平台,代码短小精悍,通过插件机制使其具有高度扩展性。支持DOCX格式的Word模板。

关于poi-tl的入门介绍在官网比较清晰,http://deepoove.com/poi-tl/

下面介绍poi-tl一些其他的需求处理


1,在Word中生成的图片固定原图片比例,防止图片变形

图片模板{{@var}},PictureRenderData 数据模型。

下面使用到生成图片方法的是官方的 // 本地图片byte数据,http://deepoove.com/poi-tl/#_图片模板var

// 本地图片byte数据
byte[] localByteArray = BytePictureUtils.getLocalByteArray(new File("./logo.png"));
put("localBytePicture", new PictureRenderData(100, 120, ".png", localByteArray));

 按原图片比例生成图片,用到ImageIO工具类,https://blog.csdn.net/weixin_41888813/article/details/85043969

File picture = new File(myPath);
byte[] TestPic = BytePictureUtils.getLocalByteArray(picture);
// 获取图片比例
BufferedImage sourceImg = ImageIO.read(new FileInputStream(picture));
params.put("myImg", new PictureRenderData(600, ((sourceImg.getHeight()*600)/sourceImg.getWidth()), ".png", TestPic));
}

2,同一行左右各分布一张图片

      文档模板{{+var}},DocxRenderData 数据模型,可以是另一个docx文档的合并,或者是数据集合针对同一个模板的多个渲染结果的合并。也就是子模板可用于在主模板中循环,但每一次循环的子模板会自动换行,要实现左右分布,需要改动子模板。

子模板(zi.docx),这里是一个隐藏了边框的一行两列的表格

主模板中{{+zi}}即可嵌入子模板

SegmentData实体类

@Data
public class SegmentData {private String imgName;private PictureRenderData img;private String imgName1;private PictureRenderData img1;
}

核心代码

注:

  • 本地测试没问题,打包后应该会有问题,会出现文件找不到,因为classPathResource.getFile()方法会出问题
  • 可以尝试使用临时文件,用于参数传入到DocxRenderData数据模型
                    SegmentData s = new SegmentData();for(int i=1; i<=附件图片的List.size(); i++){File picture = new File(文件的本地保存路径);byte[] localByteArray = BytePictureUtils.getLocalByteArray(picture);// 获取图片比例BufferedImage sourceImg =ImageIO.read(new FileInputStream(picture));PictureRenderData prd = new PictureRenderData(250, (sourceImg.getHeight()*250)/sourceImg.getWidth(), ".png", localByteArray);if(i%2 != 0){s.setImgName(附件图片的List.get(i-1).getFilename());s.setMicroscopeImg(prd);} else{s.setImgName1(附件图片的List.get(i-1).getFilename());s.setMicroscopeImg1(prd);}if(i%2 == 0){segments.add(s);s = new SegmentData();}else if(i == 附件图片的List.size() && 附件图片的List.size()%2 != 0){segments.add(s);}}ClassPathResource classPathResource  = new ClassPathResource("./template/word/zi.docx");DocxRenderData segment = new DocxRenderData(classPathResource.getFile(), segments);params.put("zi", segment);

poi-tl——Word模板引擎应用相关推荐

  1. Word模板引擎poi-tl

    文章目录 ◆ 方案对比 ◆ 版本 ◆ 特性 ◆ 模板 ◆ 数据 ◆ 输出 ◆ 数据模型 ◆ 标签 1. 文本 2. 图片 3. 表格 4. 列表 5. 嵌套 6. 区块对 ◆ SpingEL 2. 单 ...

  2. Java Word模板引擎-Poi-tl

    本文内容从Poi-tl官方文档摘录,poi-tl是一个基于Java POI的Word模板引擎,有着非常强大的功能 此处只摘录了一些我现在需要用到的功能 文章目录 一.简单示例 1.准备一个模板文档 ` ...

  3. Word 模板引擎 poi-tl

    poi-tl基于Microsoft Word模板和数据生成新的Word文档,可能是Java中最好的Word模板引擎 全方位支持Word批注功能 图片支持SVG.Base64,支持自动识别各种图片类型 ...

  4. 排名第一的word模板引擎,到底有多神仙

    hello大家好,今天我要给大家推荐一个非常棒的Word专用的模板引擎,Poi-tl(Poi-template-language).这款引擎基于Apache Poi,可以根据用户输入的内容直接生成相应 ...

  5. apache poi使用例_使用java Apache poi 根据word模板生成word报表例子

    [实例简介] 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持. 使用说明:https://b ...

  6. java word apache poi 操作word模板。

    apache poi 操作word模板. 操作方式: 1.对于固定格,可以遍历格子然后替换其中指定的值例如在要替换的cell写入${example} 这样格式,遍历到之后替换. 2.对于需要增长的表格 ...

  7. 利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  8. 使用java Apache poi 根据word模板生成word报表

    使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...

  9. java word模板poi生成文件_利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

最新文章

  1. Spring Cloud Alibaba - 08 Ribbon 两种方式实现细粒度自定义配置控制微服务的负载均衡策略
  2. vbsedit无法创建空文档_创建恢复驱动器(U盘)
  3. Swift翻译之-Swift语法入门 Swift语法介绍
  4. 检查坏道右键单击盘符/属性/工具中的查错。
  5. 设置密码命名是什么linux,orapwd 工具建立密码文件遵守的命名方法
  6. 链家大数据多维分析引擎实践
  7. 独立站现在好不好做?个人适合做跨境电商独立站吗?
  8. HDU 1024 Max Sum Plus Plus
  9. SQLServer 与 MySQL
  10. 会计初级可以自己报名吗_2019初级会计职称考试报名流程全攻略
  11. 谢尔顿在玩科南时代,哈哈
  12. 第一百二十一天 : varnish
  13. 传奇怎么设置不显示服务器,如何将传奇服务器未知神殿地图修改为不限制进出...
  14. 音符起始点检测(音频节奏检测)(6)
  15. 分区起始位置参数溢出_机械硬盘在4k对齐时勾选了一个主分区,没想到居然提示起始位置参数溢出~后来我不想要这个主分区了重新...
  16. 阿里云国际站和阿里云国内站有什么区别?
  17. NameError: name 'mnist' is not defined
  18. Python:条件判断和逻辑表达式
  19. ffmpegguitool下载不了_FFmpeg GUI Tool
  20. thymeleaf和Jsp或者HTML有什么区别

热门文章

  1. 从程序员到项目经理(三):认识项目经理
  2. 2021年中国尼龙66(聚己二酰己二胺)行业现状分析:产能逐年增长,需求量增高[图]
  3. python扩展库xlwt支持对excel_Python扩展库xlwt支持对Excel2003或更低版本的Excel文件进行写操作。...
  4. Mercurial command in bitbucket
  5. Swift 与 Objective-C:您应该为下一个 iOS 移动应用选择哪个?
  6. 大数据第一阶段学习笔记
  7. 深度学习项目实战——手写数字识别项目
  8. 如何选一款适合企业的进销存软件?这款软件推荐给你
  9. Linux查看内存型号,插槽使用情况,内存频率,内存制造商等信息
  10. 南京邮电大学网络攻防训练平台-密码学-异性相吸