poi向word插入图片_【工作应用】Java根据word模板动态生成word文档(SpringBoot项目)...
需求
需求:根据 word 模板,动态填充模板内容,生成新的 word。实现:获取数据库数据,根据 word 模板填充内容,生成新的 word 文档。
“
应用场景:笔者的应用场景是生成客户合同,根据用户提交的具体合同内容,填充进合同模板内,生成新的 word 即填充了内容的完整合同。
”
使用技术
1、poi-tl
poi-tl(poi template language)是基于 Apache POI 的 Word 模板引擎,纯 Java 组件,跨平台,代码短小精悍,通过插件机制使其具有高度扩展性。官方文档:poi-tl 官方文档(http://deepoove.com/poi-tl/)
2、poi-tl 的优点
根据官方文档介绍,poi-tl 具有以下优点:A、支持动态填充文本、图片、表格、列表、文档B、支持 DOCX 格式,所有的模板标签都是以 {{开头,以}} 结尾,模板标签可以出现在任何非文本框的位置,包括页眉,页脚,表格内部等等。C、poi-tl 的一个核心特点是数据模型与样式的分离,同样的数据模型可以用来渲染各种不同样式的模板。D、文档的样式继承模板标签的样式,即如果模板 {{title}} 是蓝色微软雅黑加粗四号字体,则替换后的文本也是蓝色微软雅黑加粗四号字体。
具体应用
1、依赖
com.deepoovepoi-tl1.5.0
2、Java 类
import com.deepoove.poi.XWPFTemplate;import com.deepoove.poi.data.PictureRenderData;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.util.Assert;
import java.io.File;import java.util.Date;import java.util.HashMap;import java.util.Map;
/** * @author Jerry * @Title: WordUtil * @Description: Word工具类 * @date 219/10/6 9:09 */public class WordUtil {
private static Logger logger = LoggerFactory.getLogger(WordUtil.class);
/** * 根据模板填充内容生成word * 调用方法参考下面的main方法,详细文档参考官方文档 * Poi-tl模板引擎官方文档:http://deepoove.com/poi-tl/ * * @param templatePath word模板文件路径 * @param fileDir 生成的文件存放地址 * @param fileName 生成的文件名,不带格式。假如要生成abc.docx,则fileName传入abc即可 * @param paramMap 替换的参数集合 * @return 生成word成功返回生成的文件的路径,失败返回空字符串 */ public static String createWord(String templatePath, String fileDir, String fileName, Map paramMap) { Assert.notNull(templatePath, "word模板文件路径不能为空"); Assert.notNull(fileDir, "生成的文件存放地址不能为空"); Assert.notNull(fileName, "生成的文件名不能为空"); // 生成的word格式 String formatSuffix = ".docx"; // 拼接后的文件名 fileName = fileName + formatSuffix; // 生成的文件的存放路径if (!fileDir.endsWith("/")) { fileDir = fileDir + File.separator; } File dir = new File(fileDir);if (!dir.exists()) { logger.info("生成word数据时存储文件目录{}不存在,为您创建文件夹!", fileDir); dir.mkdirs(); } String filePath = fileDir + fileName; // 读取模板templatePath并将paramMap的内容填充进模板,即编辑模板+渲染数据 XWPFTemplate template = XWPFTemplate.compile(templatePath).render(paramMap); try { // 将填充之后的模板写入filePath template.writeToFile(filePath); template.close(); } catch (Exception e) { logger.error("生成word异常", e); e.printStackTrace();return ""; }return filePath; } public static void main(String[] args) { Map params = new HashMap<>(); // 渲染文本 params.put("projectName", "XXX工程"); ... // 渲染图片 params.put("picture", new PictureRenderData(120, 120, "D:\\wx.png")); // TODO 渲染其他类型的数据请参考官方文档 String templatePath = "D:\\zdd.docx"; String fileDir = "D:\\template"; String fileName = "zdd2"; String wordPath = WordUtil.createWord(templatePath, fileDir, fileName, params); System.out.println("生成文档路径:" + wordPath); }}
3、word 模板格式
4、最终生成 word 的效果
开发时遇到的问题
poi-tl 依赖的是 poi 3.16 版本,包括 poi-ooxml、poi、poi-ooxml-schemas 三个依赖,如果项目中有这三个依赖的其他版本可能会导致上面的代码报错,因此最好是使用 3.16 版本的这三个依赖。
作者:Jerry_1998
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
来源链接:
https://blog.csdn.net/weixin_44605704/article/details/102571324
poi向word插入图片_【工作应用】Java根据word模板动态生成word文档(SpringBoot项目)...相关推荐
- Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类
Java使用ftl模板文件生成Word 一.写在前面 最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊. https://blog.cs ...
- java根据模板动态生成word文档
模板文档 首先,需要创建一个word模板,我的模板例子如下: 动态生成的文档 根据java代码动态的修改模板生成自己想要的文档,结果如下: 具体代码 代码操作如下:其中进行了文本的替换,图片的插入,以 ...
- SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)
本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoo ...
- Freemarker - 根据模板动态生成word文档
文章目录 Freemarker 根据模板动态生成word文档 Freemarker 介绍: Freemarker 使用: freemarker加载模板目录的方法 参考资料 Freemarker 根据模 ...
- Java中利用freemarker模板动态生成word含表格
最近公司有导出word的需求,由于word的样式有的很复杂所以记录一下Java中利用freemarker模板动态生成word含表格,以防以后忘记. 1.word表格的模板 删掉无用的数据留下基础的样式 ...
- poi word插入图片_豌豆BI工具看板Word导出技术详解
Word是最常见的文档编辑工具,当数据分析完成之后,将分析数据的图表在Word中展现,进行汇报或者存档是非常具有现实意义.在此背景之下,全新的Word导出,在豌豆BI 2.1.2 中与大家见面了. 本 ...
- springboot 中文文档_比Swagger还好用的自动生成接口文档工具
JApiDocs是一个无需额外注解.开箱即用的SpringBoot接口文档生成工具. 编写和维护API文档这个事情,对于后端程序员来说,是一件恼人但又不得不做的事情,我们都不喜欢写文档,但除非项目前后 ...
- poi向word插入图片_如何使用word裁剪图片图形?如何使用word修整图片?
Word中使用图片与图形的教程: 将图片添加到文档 Word支持从Internet或本地计算机插入图像.如果您能够复制图像,则可以将其粘贴到文档中.您可以使用计算机上存储的自己的图像,也可以从Inte ...
- java插入图片_如何在java窗体程序中添加图片
打开eclipse,创建一个java工程项目,创建完后在src下新建一个类Window,由于要插入图片,所以还在工程目录下创建一个文件夹imgs,里面放了一张60*60的图片,创建后的工程目录和图片, ...
- POI利用word模板动态生成word报表以及动态生成word表格
目录 核心依赖 动态表格 测试类 工具类 动态数据 测试类 工具类 核心依赖 <dependency><groupId>org.apache.poi</groupId&g ...
最新文章
- C语言做一个通讯录程序(在console里面运行)
- Android判断是否Root方法
- sql语句中as的用法和作用
- UDP打洞程序包的源码
- mybatis 查询之神坑
- python 获取li的内容_Python开发案例:爬取四川省统计局数据Matplotlib绘图
- js 一个对象的属性名是一个变量如何设置和获取值
- Selenium的一些技巧与错误处理
- Hadoop MapReduce编程 API入门系列之wordcount版本3(七)
- CentOS通过进程ID查询运行文件的路径方法
- memcache的安装和使用
- Flash动作补间动画
- ArcMap基本操作
- 对于三极管饱和状态的一些浅见——与网友的讨论贴
- 01背包问题深度理解
- return的常见用法
- Core Data概述
- 阿里巴巴离职DBA 35岁总结的职业生涯(转)
- Aurora 8b/10b 协议和IP核设置
- c语言年历显示主要思路,c语言程序设计年历显示分析.doc
热门文章
- 如何保存ISE综合后的RTL schematic为pdf
- centos如何使用nomachine远程连接GNOME桌面(二)
- SQLite异常:unsafenativemethods.sqlite3_open_interop
- VC通用控件自适应屏幕类
- C语言实现数字串转数字
- tomcat java.ext.dirs_tomcat classloader 加载class顺序
- origin函数绘图_资料|史上最全10套Origin科研必备绘图教学,无需代码
- ARM开发7.5.1 基础实训( 5 ) 4×4 矩阵键盘和 2 路 LED 显示系统( 1)--LPC21XX
- python xpath爬虫_[爬虫]python下的xpath清洗数据之html数据清洗
- php保存上传的音频文件在哪里,php 视频、音频和图片文件上传,该如何解决