如何在JasperReport中将svg字节数组显示为图像?

 

问题描述:

我有一个另存为的图像byte[],我想在JasperReport中将其显示为图像。我尝试从Java方法获取数据:

public InputStream getImage(){
  return new ByteArrayInputStream(getImageByteArray());
}

public Image getImage() throws IOException{
    return ImageIO.read(new ByteArrayInputStream(getImageByteArray()));
}

public String getImage(){
  return new String((new org.apache.commons.codec.binary.Base64()).encode(getImageByteArray()));
}

但它们似乎都没有起作用。

jrxml看起来像这样:

<image hAlign="Center" vAlign="Middle" isUsingCache="true" isLazy="true">
   <reportElement positionType="Float" x="0" y="0" width="164" height="32" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" uuid="c63c84a8-41c7-4ca3-8451-751d43fa8a9e"/>
   <imageExpression><![CDATA[$P{paramObject}.getImage()]]></imageExpression>
</image>

我尝试的某些事情会出现异常,有些会打印JasperReport,但是应该在其中显示图像的区域为空白。我知道图像数据在那里,因为我可以在JSF页面中显示它。图像数据是SVG数据。


 

第 1 个答案:

假设你的图像字节编码为base64,则可以使用以下代码

<image>
    <reportElement/>
    <imageExpression>
        <![CDATA[javax.imageio.ImageIO.read(new java.io.ByteArrayInputStream(new sun.misc.BASE64Decoder().decodeBuffer("/9j/4AAQ .... "))) ]]>
    </imageExpression>
</image>

这样做时Stream.of(1, 32, 12, 15, 23).map(Integer::toString);我收到一个模棱两可的类型错误。可以理解的是,编译器无法确定我是指toS ...