我搜索了一下,发现了一个非常相似的问题,不幸的是不能解决我的问题。
类似的问题:here
我正在使用Jaspert Report 6.6.0和Java 1.8。
我的目标是在报表中插入图片,我不能更改太多的Java代码,并且图片存储为byte []。
所以,我尝试了这个:
<field name="logo" class="java.io.InputStream"/>
// ... other stuff that is displayed properly
<image scaleImage="FillFrame" onErrorType="Blank">
<reportElement style="Column header" x="0" y="-1" width="80" height="75" backcolor="#333333" uuid="80bcba32-4e50-4a3a-949c-39e7c22ddff4"/>
<imageExpression><![CDATA[new java.io.ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($P{logo}.getBytes()))]]></imageExpression>
</image>
使用此Java代码:
//a big bunch of fileds that I managed to display properly
private InputStream logo;
public Constructor(some, stuff, imageAsByteArray) {
// setting lots of things that are displayed properly
this.setLogo(new ByteArrayInputStream(Base64.decodeBase64(imageAsByteArray)));
}
但是,在Jasper Studio中,当我尝试保存jrxml文件时,出现此错误:
对于类型InputStream value = new java.io.ByteArrayInputStream(org.apache.commons.codec.binary.Base
,类型未定义方法getBytes()
我对Jasper不太熟悉,我尝试了几种不同的方法来插入图像,但是发现的最接近的东西是我上面给出的链接。我了解到我无法再设置class="java.io.InputStream"
了,这是问题吗?
任何人都会知道我在这里错过了什么吗?
答案 0 :(得分:1)
好的,感谢@dada67,解决方案实际上非常简单。
首先,我混淆了$ P和$ F,因为在使用字段时,我不得不使用$ F。
然后,解码base64是一个错误,我不需要它。总结起来,正确的代码应该是:
<field name="logo" class="java.io.InputStream"/>
// ... other stuff that is displayed properly
<image scaleImage="FillFrame" onErrorType="Blank">
<reportElement style="Column header" x="0" y="-1" width="80" height="75" backcolor="#333333" uuid="80bcba32-4e50-4a3a-949c-39e7c22ddff4"/>
<imageExpression><![CDATA[$F{logo}]]></imageExpression>
</image>
然后:
//a big bunch of fileds that I managed to display properly
private InputStream logo;
public Constructor(some, stuff, imageAsByteArray) {
// setting lots of things that are displayed properly
this.setLogo(new ByteArrayInputStream(imageAsByteArray));
}
P.S:如果@dada67要发布他的答案,我会删除该帖子,因为所有的积分都是他的。