最近在做的项目中,需要输出很多报表类文档,于是选择用jasper来帮助完成。
使用jasper studio的版本是 :TIB_js-studiocomm_6.12.2_windows_x86_64。有显示图片需求的,可以参考本博客。
1.我采用的是json数据源。就是把所有需要往报表中传递的数据,全部封装到一个大的json文件中。稍后会另写一篇关于如何使用json数据源的博客。
2.现在说显示图片的事。json文件中要显示一个图片该怎么做呢。把图片通过转换工具,转换为base64字符串,或svg串。
我例子中,pic1为svg串,pic2为base64字符串。稍后会把这个json文件贴上去。此处注意,base64字符串不带图片格式这段(”data:image/png;base64,“),有的话记得去掉
3.新建一个jsper report,这些就不细说了。我把其他band都删除了,就留下一个detail 的band
4.从右侧得Palette的Basic Elements中拖一个image元素
5.就先选默认的这个,稍后会修改图片显示的表达式。
6.得到了如图的这个效果
7.现在修改表达式,点击图片,会在右下找到修改图片属性的地方,如图
8.如果想显示base64字符串的图片的话,点击Expression行,最右侧那个按钮,step 7 中第二个红框处 了。
9.框中很长的表达式,是重点,其中$F{pic2}是下方Fields中的第二个了。这个怎么来,之后会讲解。其实就是读取json数据源获取到的。
重点部分我贴出来,方便复制:new ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($F{pic2}.getBytes()))
10.点击Main report 下方,第三个按钮Preview来看效果。出不来的联系我 445196491@qq.com
11.如果想显示svg字符串的图片的话,点击Expression行,最右侧那个按钮,step 7 中第二个红框处 了。
重点内容我贴出来,方便大家复制 net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromText($F{pic1})
12.同样点击预览看效果。有困难的,出不来的联系我。445196491@qq.com