需求

需求:根据 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项目)...相关推荐

  1. Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类

    Java使用ftl模板文件生成Word 一.写在前面 最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊. https://blog.cs ...

  2. java根据模板动态生成word文档

    模板文档 首先,需要创建一个word模板,我的模板例子如下: 动态生成的文档 根据java代码动态的修改模板生成自己想要的文档,结果如下: 具体代码 代码操作如下:其中进行了文本的替换,图片的插入,以 ...

  3. SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)

    本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoo ...

  4. Freemarker - 根据模板动态生成word文档

    文章目录 Freemarker 根据模板动态生成word文档 Freemarker 介绍: Freemarker 使用: freemarker加载模板目录的方法 参考资料 Freemarker 根据模 ...

  5. Java中利用freemarker模板动态生成word含表格

    最近公司有导出word的需求,由于word的样式有的很复杂所以记录一下Java中利用freemarker模板动态生成word含表格,以防以后忘记. 1.word表格的模板 删掉无用的数据留下基础的样式 ...

  6. poi word插入图片_豌豆BI工具看板Word导出技术详解

    Word是最常见的文档编辑工具,当数据分析完成之后,将分析数据的图表在Word中展现,进行汇报或者存档是非常具有现实意义.在此背景之下,全新的Word导出,在豌豆BI 2.1.2 中与大家见面了. 本 ...

  7. springboot 中文文档_比Swagger还好用的自动生成接口文档工具

    JApiDocs是一个无需额外注解.开箱即用的SpringBoot接口文档生成工具. 编写和维护API文档这个事情,对于后端程序员来说,是一件恼人但又不得不做的事情,我们都不喜欢写文档,但除非项目前后 ...

  8. poi向word插入图片_如何使用word裁剪图片图形?如何使用word修整图片?

    Word中使用图片与图形的教程: 将图片添加到文档 Word支持从Internet或本地计算机插入图像.如果您能够复制图像,则可以将其粘贴到文档中.您可以使用计算机上存储的自己的图像,也可以从Inte ...

  9. java插入图片_如何在java窗体程序中添加图片

    打开eclipse,创建一个java工程项目,创建完后在src下新建一个类Window,由于要插入图片,所以还在工程目录下创建一个文件夹imgs,里面放了一张60*60的图片,创建后的工程目录和图片, ...

  10. POI利用word模板动态生成word报表以及动态生成word表格

    目录 核心依赖 动态表格 测试类 工具类 动态数据 测试类 工具类 核心依赖 <dependency><groupId>org.apache.poi</groupId&g ...

最新文章

  1. C语言做一个通讯录程序(在console里面运行)
  2. Android判断是否Root方法
  3. sql语句中as的用法和作用
  4. UDP打洞程序包的源码
  5. mybatis 查询之神坑
  6. python 获取li的内容_Python开发案例:爬取四川省统计局数据Matplotlib绘图
  7. js 一个对象的属性名是一个变量如何设置和获取值
  8. Selenium的一些技巧与错误处理
  9. Hadoop MapReduce编程 API入门系列之wordcount版本3(七)
  10. CentOS通过进程ID查询运行文件的路径方法
  11. memcache的安装和使用
  12. Flash动作补间动画
  13. ArcMap基本操作
  14. 对于三极管饱和状态的一些浅见——与网友的讨论贴
  15. 01背包问题深度理解
  16. return的常见用法
  17. Core Data概述
  18. 阿里巴巴离职DBA 35岁总结的职业生涯(转)
  19. Aurora 8b/10b 协议和IP核设置
  20. c语言年历显示主要思路,c语言程序设计年历显示分析.doc

热门文章

  1. 如何保存ISE综合后的RTL schematic为pdf
  2. centos如何使用nomachine远程连接GNOME桌面(二)
  3. SQLite异常:unsafenativemethods.sqlite3_open_interop
  4. VC通用控件自适应屏幕类
  5. C语言实现数字串转数字
  6. tomcat java.ext.dirs_tomcat classloader 加载class顺序
  7. origin函数绘图_资料|史上最全10套Origin科研必备绘图教学,无需代码
  8. ARM开发7.5.1 基础实训( 5 ) 4×4 矩阵键盘和 2 路 LED 显示系统( 1)--LPC21XX
  9. python xpath爬虫_[爬虫]python下的xpath清洗数据之html数据清洗
  10. php保存上传的音频文件在哪里,php 视频、音频和图片文件上传,该如何解决