900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > poi向word插入图片_【工作应用】Java根据word模板动态生成word文档(SpringBoot项目)...

poi向word插入图片_【工作应用】Java根据word模板动态生成word文档(SpringBoot项目)...

时间:2019-05-26 17:33:05

相关推荐

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 官方文档(/poi-tl/)

2、poi-tl 的优点

根据官方文档介绍,poi-tl 具有以下优点:A、支持动态填充文本、图片、表格、列表、文档B、支持 DOCX 格式,所有的模板标签都是以 {{开头,以}} 结尾,模板标签可以出现在任何非文本框的位置,包括页眉,页脚,表格内部等等。C、poi-tl 的一个核心特点是数据模型与样式的分离,同样的数据模型可以用来渲染各种不同样式的模板。D、文档的样式继承模板标签的样式,即如果模板 {{title}} 是蓝色微软雅黑加粗四号字体,则替换后的文本也是蓝色微软雅黑加粗四号字体。

具体应用

1、依赖

com.deepoovepoi-tl1.5.0

2、Java 类

importcom.deepoove.poi.XWPFTemplate;

importcom.deepoove.poi.data.PictureRenderData;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;

importorg.springframework.util.Assert;

importjava.io.File;

importjava.util.Date;

importjava.util.HashMap;

importjava.util.Map;

/**

*@authorJerry

*@Title:WordUtil

*@Description:Word工具类

*@date219/10/69:09

*/

publicclassWordUtil{

privatestaticLoggerlogger=LoggerFactory.getLogger(WordUtil.class);

/**

*根据模板填充内容生成word

*调用方法参考下面的main方法,详细文档参考官方文档

* Poi-tl模板引擎官方文档:/poi-tl/

*

*@paramtemplatePathword模板文件路径

*@paramfileDir生成的文件存放地址

*@param fileName 生成的文件名,不带格式。假如要生成abc.docx,则fileName传入abc即可

*@paramparamMap替换的参数集合

*@return生成word成功返回生成的文件的路径,失败返回空字符串

*/

publicstaticStringcreateWord(StringtemplatePath,StringfileDir,StringfileName,MapparamMap){

Assert.notNull(templatePath,"word模板文件路径不能为空");

Assert.notNull(fileDir,"生成的文件存放地址不能为空");

Assert.notNull(fileName,"生成的文件名不能为空");

//生成的word格式

StringformatSuffix=".docx";

//拼接后的文件名

fileName=fileName+formatSuffix;

//生成的文件的存放路径if(!fileDir.endsWith("/")){

fileDir=fileDir+File.separator;

}

Filedir=newFile(fileDir);if(!dir.exists()){

logger.info("生成word数据时存储文件目录{}不存在,为您创建文件夹!",fileDir);

dir.mkdirs();

}

StringfilePath=fileDir+fileName;

//读取模板templatePath并将paramMap的内容填充进模板,即编辑模板+渲染数据

XWPFTemplatetemplate=pile(templatePath).render(paramMap);

try{

//将填充之后的模板写入filePath

template.writeToFile(filePath);

template.close();

}catch(Exceptione){

logger.error("生成word异常",e);

e.printStackTrace();return"";

}returnfilePath;

}

publicstaticvoidmain(String[]args){

Mapparams=newHashMap<>();

//渲染文本

params.put("projectName","XXX工程");

...

//渲染图片

params.put("picture",newPictureRenderData(120,120,"D:\\wx.png"));

//TODO渲染其他类型的数据请参考官方文档

StringtemplatePath="D:\\zdd.docx";

StringfileDir="D:\\template";

StringfileName="zdd2";

StringwordPath=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版权协议,转载请附上原文出处链接和本声明。

来源链接:

/weixin_44605704/article/details/102571324

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。