Poi-tl职场应用案例

本文介绍了如何在Java项目中使用poi-tl库来操作Word模板,包括从Maven仓库下载依赖,定义和读取模板文件,处理数据,以及将数据渲染到模板中。示例中展示了如何根据数据动态修改模板内容,如根据企业类型映射文字,处理时间格式,并输出到Word文档。此外,还提及了模板中的条件判断和图片、图表的插入方法。
摘要由CSDN通过智能技术生成

poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,那么在实际的工作中,我们首先要通过maven仓库下载远程工具包:

<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.12.1</version>
</dependency>

 接下来可以按照官网:Poi-tl Documentation进行学习,而小编在这里主要为大家提供一些实际工作中对word打印模版的特殊用法,希望可以给各位小伙伴们一些帮助。

首先我们要定义我们word文档存放的位置和文档名称:
//这里我们定义文档存放的目录(可以在项目下新建文件夹用来存储)

private static final String TEMPLATEFILEPATH = "template/%s.docx";


//定义文档的名称

private static final String TEMPLATE = "test";


//读入word模板

ClassPathResource classPathResource =
new ClassPathResource(String.format(TEMPLATEFILEPATH, TEMPLATE));


//这里选择用流的方式来读入
 

InputStream inputStream = classPathResource.getInputStream();

//读取数据 可以是map、或者实体实体对象
Test test= TestService.queryById(id);
//获取当前用户信息
 

User user = userService.selectUserById(Test.getUserId());
test.setNickName(user.getNickName());
test.setEmailNum(user.getEmail());
test.setTelNum(user.getTelephone());

//定义map集合复制Test实体的属性和值
 

Map<String, Object> data = BeanCopyUtils.copyToMap(test);

//数据库存储的值通常用1234来代表我们的类型分类,我们可以通过判断来转化为数字所代表的类型用于后续的打印输出,并将转化后的值传入map集合中,方便后续的判断:
 

if (data.get("enterpriseType") != null) {
if (data.get("enterpriseType").toString().equals("1")) {
data.put("enterpriseType", "国有企业");
} else if (data.get("enterpriseType").toString().equals("2")) {
data.put("enterpriseType", "集体所有制");
} 

需要打印时间则需要对时间进行处理:
 

String dateStr = DateUtil.format(test.getCreateTime(), "yyyy年MM月dd日");

转换成我们需要的日期,然后开始处理和渲染数据:

//渲染数据
XWPFTemplate template = XWPFTemplate.compile(inputStream).render(map);
//设置响应内容类型
// response.setContentType("application/msword;charset=UTF-8");
response.setContentType("application/octet-stream;charset=UTF-8");
//设置响应头 注意:英文文件名输出没有问题,中文需要转字符集
response.addHeader("Content-Disposition", "attachment;filename=" + DateUtil.format(new Date(), "yyyyMMddHHmmss") + ".docx");
//输出流
OutputStream outputStream = response.getOutputStream();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
//写入输出流
template.write(outputStream);
//冲刷
bufferedOutputStream.flush();
outputStream.flush();
PoitlIOUtils.closeQuietlyMulti(template, bufferedOutputStream, outputStream);
//关闭流
bufferedOutputStream.close();
outputStream.close();

接下来咱们看看word中需要怎么加入我们的元素:

 咱们可以用{{}}来传入map集合中key的值,我们还可以对参数进行判断,这样可以让我们的word模版灵活起来,如:

{{?announce==true}}
投诉单位(人):{{UserName}}
投诉单位联系方式:{{telephone}}
投诉单位联系地址:{{address}}
{{/announce==true}}

 对于图片、图表的插入以及参数控制,可以根据官网教程进行一步步操作就可以实现。

以上是小编对poi-tl的学习应用心得,希望给各位小伙伴们带来帮助,望各位小伙伴们多多支持,点点赞!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫玥筱筱

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值