如何/我可以在Jasper报告模板中使用base64作为图像源吗?
所以在我的jrxml文件中,我有以下内容:
然后我参考:
这不正确吗?
无论有没有,我都尝试过base64:
data:image/png;base64,
这是我正在使用的图像
然后我使用https://www.base64-image.de/或任何随机站点来获取base64字符串。 我测试了它产生的字符串,它是有效的。
现在在我的代码中;
- 将变量的值设置为based64字符串
- 在模板上
- 设置参数:
- 设置参数:
-
然后将图像数据添加到页面:
-
我错过了一步吗?
将参数作为String
传递使得jasper报告认为它是一个绝对文件路径,因此您需要另一个类。 最明显的是java.awt.Image
或java.io.InputStream
。
我选择java.io.InputStream
因为这将需要更少的代码,所以我们现在要做的第一件事是decode
base64
图像String
。
有几个 Base64类可以完成这项工作,我选择了org.apache.commons.codec.binary.Base64
因为apache commons-codec.jar
已经与jasper报告( 依赖项 )一起分发。 解码将给我们一个字节数组byte[]
,所以现在我们只需要添加一个ByteArrayInputStream
java代码将是:
InputStream stream = new ByteArrayInputStream(Base64.decodeBase64(smileyfaceimage.getBytes()));
是时候将它传递给jasper报告imageExpression
希望最好并按下预览 :
重要提示 : smileyfaceimage
不需要 : data:image/png;base64,
编辑 :OP(评论)的问题是,使用旧的jasper报告lib(3.0),您需要在imageExpression @see class="java.io.InputStream"
指定该类,因此该post已更新,因为这也有效在6.0。
你需要以某种方式解码图像,例如使用imageExpression:
我正在使用它来嵌入图像,但它也应该使用变量,字段或参数。