在UReport中显示表单中的图片
目前系统中实现了将存储在文件系统中的表单附件或图片控件的字段信息,在UReport中显示为图片的代码。更多类型的图片集成显示可以参考这篇教程:https://www.w3cschool.cn/ureport/ureport-tha12har.html 或者查看com.redxun.ureport.provider.JpaasImageProvider类的代码。
实现原理
JpaasImageProvider类实现了com.bstek.ureport.provider.image.ImageProvider接口,这个接口有两个方法
public interface ImageProvider {
InputStream getImage(String path);
boolean support(String path);
}
support方法则是根据报表图片控件的“图片来源”参数,判断是否支持该格式的图片;
getImage方法是根据报表图片控件的“图片来源”参数,返回一个输入流;因为JPaaS系统表单中的附件控件和图片控件保存在数据库表中的字段为JSON格式,如下:
[{"fileId":"1455364633169862657","fileName":"aaa.jpg","size":28900},
{"fileId":"1455364634042277889","fileName":"gree.jpg","size":168180}]
getImage方法中实现的就是解析JSON字符串,获取第一个fileId值,然后返回该文件的路径,并构造输入流。如果想返回第2个图片怎么办?自己在表达式中构造一个新的JSON,或者用SQL的表达式计算出一个新的字段;
使用说明
创建带有图片和附件控件字段的表单
我这里字段名分别为tp和fj,建好之后,发布表单方案
为了方便测试,创建数据列表,然后录入数据上传几个图片;我们可以看到图片和附件是以JSON数组的格式存储的
创建报表
新建一个Ureport报表,鼠标右击默认的数据源添加数据集,也可以自己创建一个数据源:
数据集的名称为了便于使用,一般使用英文命名,这里设为attach。默认数据源连接的数据库是jpaas_ureport数据库,如果要查询其他数据库中的表,可以给表名加个数据库名作为前缀(MySQL数据库)。为了绑定到表单方案,需要增加一个为Id的参数,注意Id的第一个字母为大写。 参数还可以设个默认值用来预览数据。
建完数据集之后,可以展开数据集看到下面的字段名称,标红框的是我们要用到的图片和附件字段:
然后使用顶部工具栏中的图片控件,插入图片,并设置图片的来源为表达式,表达式内容为:attach.select(F_TP),说明一下attach为数据集名称,select为查询方法,F_TP为数据集字段名称,就是取数据集某字段值的意思。
注意字段中不要数字,这样表达式可能会报错。如果你的图片字段名为a1,b2这种,可以在SQL查询的时候改为别名,a1 as aa, b2 as bb 这样写。
同理,再插入绑定到附件字段的图片,然后保存并预览就能看到如下结果了。
绑定到表单方案
编辑表单方案,点 “+” 号新增一个按钮,选择按钮类型“报表”,点击后面的“配置”按钮,在弹窗中选中对应的报表,点击确定就可以了。这样在表单的编辑和明细页面就可以打印当前记录对应的报表了!