Java-使用poi-tl根据word模板动态生成word

作者wangsz,想写一些关于word的工具,所以就写了这篇文章

1.首先,先导入所需要的依赖(poi相关依赖即可)

<!-- POI --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><!-- poi-tl --><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

2.依赖导入完成后,先了解一些poi基础知识,制作word模板

{{template}}
普通文本,渲染数据为:String或者TextRenderData

{{@template}}
图片,渲染数据为:PictureRenderData

{{#template}}
表格,渲染数据为:TableRenderData
{{*template}}
列表,渲染数据为:NumbericRenderData

3.编写生成word文档代码

 //将图片转换成字节数组public static byte[] getUrlByteArray(String imageUrl) throws IOException {URL url = new URL(imageUrl);try (InputStream inputStream = url.openStream();ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}return outputStream.toByteArray();}}
// 主要工具
public void testPicture(){Map<String, Object> datas = new HashMap() {{//本地图片//     put("photo", new PictureRenderData(100, 116, "C:\\Users\\53129\\Pictures\\Saved Pictures\\111.png") );put("name","王首zhen");//  put("oname","");put("sex","男");put("nation","汉族");put("address","天津市");
//				//本地图片byte数据
//				put("localBytePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getLocalByteArray(new File("src/test/resources/logo.png"))));
//				//网路图片try {put("photo", new PictureRenderData(100, 100, ".png", testPotPi.getUrlByteArray("https://avatars3.githubusercontent.com/u/1394854?v=3&s=40")));} catch (IOException e) {e.printStackTrace();}
//				// java 图片
//				put("bufferImagePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getBufferByteArray(bufferImage)));}};XWPFTemplate template = XWPFTemplate.compile("C:\\Users\\53129\\Desktop\\模板文件.docx").render(datas);FileOutputStream out;try {out = new FileOutputStream("C:\\Users\\53129\\Desktop\\生成文件.docx");template.write(out);out.flush();out.close();template.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

4.测试代码

  public static void main(String[] args) {long l = System.currentTimeMillis();new testPotPi().testPicture();long l1 = System.currentTimeMillis();System.err.println("运行时长"+(l1-l));}

5.封装工具类

   /*tempath :模板文件地址decPath : 生成文件地址*/public static void testPicture(Map<String, Object> datas , String temPath , String decPath){XWPFTemplate template = XWPFTemplate.compile(temPath).render(datas);FileOutputStream out;try {out = new FileOutputStream(decPath);template.write(out);out.flush();out.close();template.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【libGDX】使用Mesh绘制立方体

1 前言 本文主要介绍使用 Mesh 绘制立方体&#xff0c;读者如果对 Mesh 不太熟悉&#xff0c;请回顾以下内容&#xff1a; 使用Mesh绘制三角形使用Mesh绘制矩形使用Mesh绘制圆形 在绘制立方体的过程中&#xff0c;主要用到了 MVP &#xff08;Model View Projection&#xff0…

目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】计算机视觉(最终篇)

目录 知识储备 KITTI数据集 1.KITTI数据集概述 2.数据采集平台 3.Dataset详述 算法原理

GIT无效的源路径/URL

ssh-add /Users/haijunyan/.ssh/id_rsa ssh-add -K /Users/haijunyan/.ssh/id_rsa

windows11上enable WSL

Windows电脑上要配置linux&#xff08;这里指ubuntu&#xff09;开发环境&#xff0c;主要有三种方式&#xff1a; 1&#xff09;在windows上装个虚拟机&#xff08;比如vmware&#xff09;。缺点是vmware加载ubuntu后系统会变慢很多&#xff0c;而且需要通过samba来实现window…

git clone -mirror 和 git clone 的区别

目录 前言两则区别git clone --mirrorgit clone 获取到的文件有什么不同瘦身仓库如何选择结语开源项目 前言 Git是一款强大的版本控制系统&#xff0c;通过Git可以方便地管理代码的版本和协作开发。在使用Git时&#xff0c;常见的操作之一就是通过git clone命令将远程仓库克隆…

【vue2】axios请求与axios拦截器的使用详解

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;当我们在路由跳转前与后我们可实现触发的操作 【前言】ajax是一种在javaScript代码中发请…

低代码开发与IT开发的区别

目录 一、含义不同 二、开发门槛不同 三、两者之间的区别 1、从技术特征来看 2、从目标开发者来看 四、低代码平台使用感受&#xff1f; &#xff08;1&#xff09;自定义模块&#xff0c;满足不同的业务需求 &#xff08;2&#xff09;工作流引擎&#xff0c;简化复杂流程的管…

机器学习实战-第4章 基于概率论的分类方法: 朴素贝叶斯

朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理。最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: 朴素贝叶斯分类。 贝叶斯理论 & 条件概率 贝叶斯理论 …

linux网络之网络层与数据链路层

文章目录 一、网络层 1.IP协议 2.IP协议头格式 3.网段划分 4.特殊ip地址 5.IP地址的数量限制 6.私有ip和公网IP 7.路由 二、数据链路层 1.以太网 2.以太网帧格式 3.MAC地址 4.对比理解MAC地址和IP地址 5.MTU 6.ARP协议 ARP协议的工作流程 ARP数据报的格式 7.DNS 8.ICMP协议 9.N…

839 - Not so Mobile (UVA)

题目链接如下&#xff1a; Online Judge 这道题刘汝佳的解法极其简洁&#xff0c;用了20来行就解决了问题。膜拜…… 他的解法如下&#xff1a;天平&#xff08;UVa839紫书p157&#xff09;_天平 uva 839_falldeep的博客-CSDN博客 我写了两个&#xff08;都很冗长&#xff…

浅谈电气设备的绝缘在线监测与状态维修探究

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;在线监测是控制好电气设备绝缘的重要方式&#xff0c;为电力系统稳定奠定重要基础。在线监测电气设备时&#xff0c;要利用检测技术促进电力系统运行效率提升&#xff0c;让电气设备在具体工作过程中发挥更大作…

升级jdk17过程中,原来的jdk8下的webservice客户端怎样处理

背景&#xff1a;之前jdk8环境下&#xff0c;使用的cxf框架&#xff0c;而且是动态加载解析作为客户端。大家一直相处的很愉快。但是最近升级jdk17&#xff0c;发现cxf不好用了。网上百度&#xff0c;大部分都是说升级cxf版本&#xff0c;并且添加jaxb的相关依赖就可以了。但是…

在线接口测试工具fastmock使用

1、fastmock线上数据模拟器 在平时的项目测试中&#xff0c;尤其是前后端分离的时候&#xff0c;前端人员需要测试调用后端的接口&#xff0c;这个时候会出现测试不方便的情况。此时我们可以使用fastmock平台在线上模拟出一个可以调用的接口&#xff0c;方便前端人员进行数据测…

C/C++---------------LeetCode第2540. 最小公共值

最小公共值 题目及要求哈希算法双指针 题目及要求 给你两个整数数组 nums1 和 nums2 &#xff0c;它们已经按非降序排序&#xff0c;请你返回两个数组的 最小公共整数 。如果两个数组 nums1 和 nums2 没有公共整数&#xff0c;请你返回 -1 。 如果一个整数在两个数组中都 至少…

categraf托管与自升级

categraf支持多种方式进行部署、托管&#xff0c;社区里部署和管理categraf也是五花八门&#xff0c;大家自己使用方便即可。 之前我们觉得大家通过ansible之类的工具批量下发/更新就能很简单地完成任务&#xff0c;最近很多用户咨询我们关于categraf有没有更方便的升级方式&am…

flink和机器学习模型的常用组合方式

背景 flink是一个低延迟高吞吐的系统&#xff0c;每秒处理的数据量高达数百万&#xff0c;而机器模型一般比较笨重&#xff0c;虽然功能强大&#xff0c;但是qps一般都比较低&#xff0c;日常工作中&#xff0c;我们一般是如何把flink和机器学习模型组合起来一起使用呢? fli…

数据结构与算法【B树】的Java实现+图解

目录 B树 特性 实现 节点准备 大体框架 实现分裂 实现新增 实现删除 完整代码 B树 也是一种自平衡的树形数据结构&#xff0c;主要用于管理磁盘上的数据管理&#xff08;减少磁盘IO次数&#xff09;。而之前说的AVL树与红黑树适合用于内存数据管理。存储一个100w的数…

python每日一题——2字母异位词分组

题目 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”…

新的centos7.9安装jenkins—(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 因为是用java8&#xff0c;所以还是要最后java8版本的jenkins&#xff0c;版本号是2.346.3&#xff0c;后…

【Python】批量将PDG合成PDF,以及根据SS号重命名秒传的文件

目录 说明批量zip2pdf批量zip2pdf下载SS号重命名源代码SS号重命名源代码下载附录&#xff0c;水文年鉴 说明 1、zip2pdf是一个开源软件&#xff0c;支持自动化解压压缩包成PDG&#xff0c;PDG合成PDF&#xff0c;笔者在其基础上做了部分修改&#xff0c;支持批量转换。 2、秒…