所以在我的 jrxml 文件中我有以下内容:
<parameter name="smileyfaceimage" class="java.lang.String"/>
然后我引用它:
<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>
这不对吗?
我已经尝试过使用和不使用 base64:
data:image/png;base64,
这是我正在使用的图像
然后我使用 https://www.base64-image.de/ 或任何随机站点来获取 base64 字符串。我测试了它产生的字符串,它是有效的。
现在在我的代码中;
将变量的值设置为 based64 字符串
在模板上
- 设置参数:
<parameter name="smileyfaceimage" class="java.lang.String"/>
- 设置参数:
然后将图像数据添加到页面:
- ”`
<![CDATA[new java.io.ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($P{smileyfaceimage}.getBytes()))]]>
”`
- ”`
我错过了一步吗?
原文由 iCodeLikeImDrunk 发布,翻译遵循 CC BY-SA 4.0 许可协议
将参数传递为
String
使 jasper 报告相信它是绝对文件路径,因此您需要另一个类。最明显的是java.awt.Image
或java.io.InputStream
。I choose
java.io.InputStream
since this will require less code, so the first thing we need to do now is todecode
thebase64
imageString
.有 几个 Base64 类可以完成这项工作,我选择
org.apache.commons.codec.binary.Base64
因为 apachecommons-codec.jar
已经与 jasper 报告( 依赖 项)一起分发。解码会给我们一个字节数组byte[]
,所以现在我们只需要添加一个ByteArrayInputStream
java代码将是:
是时候将它传递到碧玉报告中了
imageExpression
希望最好,然后按 预览:
重要提示:
smileyfaceimage
需要 没有:data:image/png;base64,
编辑:OP(评论)的问题是,使用旧的 jasper 报告库(3.0),您需要在
imageExpression
@seeclass="java.io.InputStream"
中指定类 --- 该帖子已因此更新因为这也适用于 6.0.