「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
对于图片模版和列表模版相对就简单了,可以参考帮助文档,下边我也只做简单的介绍了
对于文档中的饼状图、柱状图,我是在导入数据的时候,直接根据数据生成了相应的图片,然后保存在文件服务器,并把路径保存到数据库中
图片模版:{{@var}}
图片
{{@var}}
-
和文本不同的是多了一个@符号,我的
office-multip中对图片的定义语法也是@符号,这是不是说明英雄所见略同呢? -
关于图片其实和上面文本处理解析是一样的,图片我们可以理解成针对文本的图片化解析,在
poi-tl中对应的是PictureRenderData -
通过idea的diagrams来看类关系图我们能够发现,之前提到的
TextRenderData,HyperLinkTextRenderData都是RenderData的实现类。同样针对图片的处理解析PictureRenderData也是RenderData的实现类之一。后面我们会一一讲解其他的实现类,敬请期待哦
@Test
public void pictureTest() throws FileNotFoundException {
String name = "picture";
Map<String, Object> map = new HashMap<>();
// 本地图片
map.put("local", new PictureRenderData(80, 100, this.getClass().getResource("/local.png").getPath()));
// 图片流
map.put("localbyte", new PictureRenderData(80, 100, ".png", this.getClass().getResourceAsStream("/input.png")));
// 网络图片(注意网络耗时对系统可能的性能影响)
map.put("urlpicture", new PictureRenderData(50, 50, ".png", BytePictureUtils.getUrlBufferedImage("http://deepoove.com/images/icecream.png")));
// java 图片
map.put("bufferimage", new PictureRenderData(80, 100, ".png", ImageUtil.getDefault(50,50,1)));
init(name,map);
}
- 上面通过四种图片形式进行填充,都是经过
PictureRenderData处理的。
-
上面源码表示实际上接受的无非是两种图片,一种是图片路径,这里应该是本地和远程都可以的,另外一种是直接接受图片二进制数据。
-
该处理方式很简单,需要注意的是图片的大小都需要我们自己控制,和
office-multip相比还是有些不足的,在office-multip中我们只需要在模板中设置图片格式就可以了。但是这里需要在代码层面控制,无疑也是工作量的体现。
- 官网中也明确说明了
PictureRenderData是无法处理环绕形式的图片的。作为一个成熟的框架并不会告诉你不行。这里他也提出了解决方案可以通过引用标签来解决,啥叫引用标签先按下不表