
背景
今天,项目经理飞哥一步三蹦地来找我,看样子心情不错 , 他对我说:“小米,运营团队那边对咱们的努力很是认可啊,这季度奖金大大的有!你小子好样的~”,我心想老大来找我不应该是这个原因,还是要有任务安排给我,但嘴上说着:“哪里哪里,都是老大的功劳”……果不其然,飞哥笑了一会儿又跟我说:“刚才财务部的马总找我,跟我说现在咱们系统中的报销单很麻烦,需要根据系统上的数据 , 手动一个一个字的录入到word中,他希望系统新增一个按钮【生成报销单】直接自动导出一个报销单,小米 , 你觉得从技术上能实现不?”我说:“保证完成任务!”
需求


报销单由两部分组成:
- 第一部分是由基础数据汇总的表格,详细说明每一笔费用及审批流情况
- 第二部分是由报销单附带的发票数量(上面两个图)
POM引入

关键词说明
- 段落:一个文档包含多个段落,一个段落包含多个Runs,一个Runs包含多个Run , Run是文档的最小单元 。XWPFRun代表具有相同属性的一段文本 。
- 表格:一个文档包含多个表格,一个表格包含多行 , 一行包含多列(单元格),每一单元格的内容相当于一个完整的文档 。

创建document对象

加入标题1样式

标题处理
在这里我把标题也理解为是一个段落,代码如下:
申请人和申请时间
申请人和申请时间也是一个段落,代码如下:
费用明细
费用明细首先是从数据库中查询出来,然后通过遍历费用集合,生成相应的表格,代码如下:
审核情况和费用明细是相同的处理,不做赘述 。
报销单附件
报销单附件是先传到oss上,oss给我们的是一个url地址 , 所以我们需要通过从url中获取BufferedImage对象,然后把它转化为流对象,放入到“段落”中 , 代码如下:
至此,一个复杂的word文档搞定,我长长的呼出一口气……
