打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
JAVA根据word模板动态生成word(SpringBoot项目)

一、需求(实现功能)

需求:根据word模板,动态填充模板内容,生成新的word。

实现:获取数据库数据,根据word模板填充内容,生成新的word文档。

应用场景:笔者的应用场景是生成客户合同,根据用户提交的具体合同内容,填充进合同模板内,生成新的word即填充了内容的完整合同。

二、使用技术

1、poi-tl

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

官方文档:poi-tl官方文档

2、poi-tl的优点

根据官方文档介绍,poi-tl具有以下优点:

A、支持动态填充文本、图片、表格、列表、文档

B、支持DOCX格式,所有的模板标签都是以 {{ 开头,以 }} 结尾,模板标签可以出现在任何非文本框的位置,包括页眉,页脚,表格内部等等。

C、poi-tl的一个核心特点是数据模型与样式的分离,同样的数据模型可以用来渲染各种不同样式的模板。

D、文档的样式继承模板标签的样式,即如果模板{{title}}是蓝色微软雅黑加粗四号字体,则替换后的文本也是蓝色微软雅黑加粗四号字体。

三、具体应用

1、依赖    com.deepoove    poi-tl    1.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版本的这三个依赖。

个人笔记:http://note.youdao.com/noteshare?id=e45282913259ab8043d823f2ec883299

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Poi-tl Documentation(JAVA处理WORD)
Java模板生成word文档/POI生成Excel【面试+工作】
Java程序对Office文档的处理
poi
使用POI给word中的表格增加行
利用poi操作word文档
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服