传递参数为String
使 jasper 报告相信它是绝对文件路径,因此您需要另一个类。最明显的是java.awt.Image
or java.io.InputStream
.
我选择java.io.InputStream
因为这需要更少的代码,所以我们现在要做的第一件事就是decode
the base64
image String
.
有several https://stackoverflow.com/questions/469695/decode-base64-data-in-javaBase64 类可以完成这项工作,我选择org.apache.commons.codec.binary.Base64
自从阿帕奇commons-codec.jar
已随 jasper 报告一起分发(依赖关系 http://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports/6.1.0)。解码会给我们一个字节数组byte[]
,所以现在我们只需要添加一个ByteArrayInputStream
java代码将是:
InputStream stream = new ByteArrayInputStream(Base64.decodeBase64(smileyfaceimage.getBytes()));
是时候将其传递到 jasper 报告中了imageExpression
<image scaleImage="FillFrame" onErrorType="Blank">
<reportElement x="167" y="62" width="363" height="171" backcolor="#333333"/>
<imageExpression class="java.io.InputStream"><![CDATA[new java.io.ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($P{smileyfaceimage}.getBytes()))]]></imageExpression>
</image>
希望最好的结果并按preview:
重要的提醒: The smileyfaceimage
需要是without:data:image/png;base64,
EDIT:OP(评论)的问题是,使用旧的 jasper 报告库(3.0),您需要在imageExpression
@see class="java.io.InputStream"
该帖子已随之更新,因为这也适用于 6.0。