JasperReports API。在报表中使用Image时出错:net.sf.jasperreports.engine.JRException:未找到字节数据

时间:2016-04-06 16:31:50

标签: java jasper-reports

我想通过Java打印 JasperReports 的报告。

所以我写了如下代码

 try {
            String r ="C:\\ireport\\Foods.jrxml";
            JasperReport jr =JasperCompileManager.compileReport(r);
            JasperPrint jp = JasperFillManager.fillReport(jr, null, conn);
            JasperViewer.viewReport(jp);
        } catch(Exception e) {
            System.out.println(e);
        }

但是当我运行该程序时,我得到了以下错误。

net.sf.jasperreports.engine.JRException: Byte data not found at : flower1.png

我在jasper社区搜索了这个错误,但我无法理解他们解释解决方案的方式,因为我是编程的新手。 那么有人可以给我一个解决方案吗?

我的jrxml有以下代码段

<imageExpression><![CDATA["flower1.png"]]></imageExpression>

1 个答案:

答案 0 :(得分:1)

使用report的参数传递图像的好方法。而且我相信将图像作为 BufferedImage 对象传递给你的情况是个不错的选择。

使用样本

Java代码段

Map<String, Object> parameters = new HashMap<>();
try (InputStream inputStream = YourClass.class.getClassLoader().getResourceAsStream("images/flower1.png")) {
    parameters.put("flowerImage", ImageIO.read(new ByteArrayInputStream(JRLoader.loadBytes(inputStream))));
} catch (JRException | IOException e) {
     throw new RuntimeException("Failed to load images", e);
}
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);

jrxml文件的片段

<parameter name="logoImage" class="java.awt.Image"/>
...
<image scaleImage="FillFrame">
    <reportElement x="10" y="0" width="224" height="43"/>
    <imageExpression><![CDATA[$P{flowerImage}]]></imageExpression>
</image>
  1. 有关使用图片的更多信息,请参阅here

  2. 有关使用 Java 读取资源以及存储位置的信息:

  3. 有关如何使用 Java 读取图像的信息: