ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-09-27 12:00:00  阅读:402  来源: 互联网

标签:java base64 image jasper-reports


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

<parameter name="smileyfaceimage" class="java.lang.String"/>

然后我参考:

<image scaleImage="FillFrame" one rrorType="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,

这是我正在使用的图像

just a random screenshot

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

现在在我的代码中;

>将变量的值设置为based64字符串
>在模板上

>设置参数:< parameter name =“smileyfaceimage”class =“java.lang.String”/>

>然后将图像数据添加到页面:

>

<image scaleImage="FillFrame" one rrorType="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>

我错过了一步吗?

解决方法:

将参数作为String传递使得jasper报告认为它是一个绝对文件路径,因此您需要另一个类.最明显的是java.awt.Image或java.io.InputStream.

我选择java.io.InputStream,因为这将需要更少的代码,所以我们现在需要做的第一件事是解码base64图像字符串.

several个Base64类可以完成这项工作,我选择了org.apache.commons.codec.binary.Base64,因为apache commons-codec.jar已经与jasper报告(dependencies)一起发布.解码将给我们一个字节数组byte [],所以现在我们只需要添加一个ByteArrayInputStream

java代码将是:

InputStream stream = new ByteArrayInputStream(Base64.decodeBase64(smileyfaceimage.getBytes()));

是时候将它传递给jasper报告imageExpression了

<image scaleImage="FillFrame" one rrorType="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>

希望最好并按预览:

Result

重要提示:smileyfaceimage不需要:data:image / png; base64,

编辑:OP(评论)的问题是,使用旧的jasper报告lib(3.0),您需要在imageExpression @see class =“java.io.InputStream”中指定该类,因此该帖子已更新,因为这也有效在6.0.

标签:java,base64,image,jasper-reports
来源: https://codeday.me/bug/20190927/1823765.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有