这几天有个任务,服务端导出word要求从数据库取到多张图片,然后输出到word中,并且说明一共几张,当前是第几张。
网上翻了很久也没有找到示例,不过最终难题还是得到了攻克。
因为之前的代码是有一个导出的map,暂且叫resultMap
,resultMap
中又有一个对象,这里暂且叫exportObj
,我们要加的图片和文字说明都要加在这个exportObj
里面。
怎么获取图片就不说了,各个系统肯定是不一样的,假设已经获取到了图片的url,然后后续代码如下:
// imgUrlList为图片的url集合
// 声明一个存放图片和说明map的list
List<Map<String, Object>> images = Lists.newArrayList();
// 遍历图片url
for (int i = 0; i < imgUrlList.size(); i++) {
// 声明一个存放一对图片+说明的map
Map<String, Object> imageMap = Maps.newHashMap();
// 图片放入map,图片类型自行修改
imageMap.put("imageUrl", Pictures.ofUrl(imgUrlList.get(i), PictureType.PNG).center().fitSize().create());
// 说明放入map
imageMap.put("text", "共" + imgUrlList.size() + "张图片,当前为第" + (i + 1) + "张");
// map放入list
images.add(imageMap);
}
// list放入导出对象
exportObj.setImages(images);
// 导出对象放入最终的结果map
resultMap.put("exportObj", exportObj);
resultMap.put("otherData", ……);
代码这块就完成了,然后模板的配置如下:
{{?exportObj.images}}
{{@imageUrl}}
{{text}}
{{/exportObj.images}}
这样就搞定了。
附上poi-tl的pom依赖:
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0</version>
</dependency>