如何/我可以在Jasper报告模板中使用base64作为图像源吗?

所以在我的jrxml文件中,我有以下内容:

 

然后我参考:

     

这不正确吗?

无论有没有,我都尝试过base64:

 data:image/png;base64, 

这是我正在使用的图像

只是随机截图

然后我使用https://www.base64-image.de/或任何随机站点来获取base64字符串。 我测试了它产生的字符串,它是有效的。

现在在我的代码中;

  • 将变量的值设置为based64字符串
  • 在模板上
    • 设置参数:
  • 然后将图像数据添加到页面:

    •      

我错过了一步吗?

将参数作为String传递使得jasper报告认为它是一个绝对文件路径,因此您需要另一个类。 最明显的是java.awt.Imagejava.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:

      

我正在使用它来嵌入图像,但它也应该使用变量,字段或参数。