所以在我的jrxml文件中,我有以下内容:
<parameter name="smileyfaceimage" class="java.lang.String"/>
Run Code Online (Sandbox Code Playgroud)
然后我参考:
<image scaleImage="FillFrame" onErrorType="Blank">
<reportElement x="167" y="62" width="363" height="171" backcolor="#333333"/>
<imageExpression class="java.lang.String"><![CDATA[$P{smileyfaceimage}]]></imageExpression>
</image>
Run Code Online (Sandbox Code Playgroud)
这不正确吗?
无论有没有,我都尝试过base64:
data:image/png;base64,
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的图像
然后我使用https://www.base64-image.de/或任何随机网站来获取base64字符串.我测试了它产生的字符串,它是有效的.
现在在我的代码中;
<parameter name="smileyfaceimage" class="java.lang.String"/>然后将图像数据添加到页面:
<image scaleImage="FillFrame" onErrorType="Blank">
<reportElement x="167" y="62" width="363" height="171" backcolor="#333333"/>
<imageExpression><![CDATA[new java.io.ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($P{smileyfaceimage}.getBytes()))]]></imageExpression>
</image>
Run Code Online (Sandbox Code Playgroud)我错过了一步吗?
我将图像保存为a byte[],我想将其显示为JasperReport中的图像.我试过从Java方法获取数据:
public InputStream getImage(){
return new ByteArrayInputStream(getImageByteArray());
}
Run Code Online (Sandbox Code Playgroud)
和
public Image getImage() throws IOException{
return ImageIO.read(new ByteArrayInputStream(getImageByteArray()));
}
Run Code Online (Sandbox Code Playgroud)
和
public String getImage(){
return new String((new org.apache.commons.codec.binary.Base64()).encode(getImageByteArray()));
}
Run Code Online (Sandbox Code Playgroud)
但他们似乎都没有工作.
jrxml看起来像这样:
<image hAlign="Center" vAlign="Middle" isUsingCache="true" isLazy="true">
<reportElement positionType="Float" x="0" y="0" width="164" height="32" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" uuid="c63c84a8-41c7-4ca3-8451-751d43fa8a9e"/>
<imageExpression><![CDATA[$P{paramObject}.getImage()]]></imageExpression>
</image>
Run Code Online (Sandbox Code Playgroud)
我尝试的一些东西得到了异常,有些打印了JasperReport但是图像应该是空白的区域.我知道图像数据存在,因为我可以在JSF页面中显示它.图像数据是SVG数据.