Java Jasper报告从字节[]插入图像

Java Jasper报告从字节[]插入图像,java,arrays,image,jasper-reports,Java,Arrays,Image,Jasper Reports,我搜索了一下,发现了一个非常相似的问题,不幸的是,这个问题并没有解决我的问题 类似的问题: 我正在使用Jaspert Report 6.6.0和Java1.8 我的目标是在报告中插入一个图像,我不能更改很多java代码,图像存储为字节[] 所以,我试过这个: <field name="logo" class="java.io.InputStream"/> // ... other stuff that is displayed properly <image scaleImag

我搜索了一下,发现了一个非常相似的问题,不幸的是,这个问题并没有解决我的问题

类似的问题:

我正在使用Jaspert Report 6.6.0和Java1.8

我的目标是在报告中插入一个图像,我不能更改很多java代码,图像存储为字节[]

所以,我试过这个:

<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>
但是,在Jasper Studio中,当我尝试保存我的jrxml文件时,出现以下错误:

对于类型InputStream value=new java.io.ByteArrayInputStream(org.apache.commons.codec.binary.Base),未定义getBytes()方法

我对Jasper不是很熟悉,我尝试了几种不同的方法来插入图像,但我找到的最接近的东西是我上面给出的链接。我知道我不能再在中设置
class=“java.io.InputStream”
,这是问题吗


任何人都会知道我错过了什么?

好的,解决方案其实非常简单,多亏了

首先,我混淆了$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>

附言:如果你想发布他的答案,我会删除这篇帖子,因为所有的积分都是他的。

imageAsByteArray的类型是什么?如果你将图像作为字节数组或输入流,你应该直接将其用作图像表达式。你不需要做任何Base64编码或解码。ImageAsByArray来自get()另一个类对此字段的方法:
private byte[]logoContent;
。你的意思是我应该只使用
$P{logo}
?你的报告将“logo”列为一个字段,因此你应该使用$F{logo}。这也是。我按照你的要求完成了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));
}