显示在JasperReports中作为字节数组导出的图像

时间:2016-11-29 10:45:14

标签: java groovy jasper-reports

我正在尝试导出图像(字节数组)并使用iReport以PDF格式显示。 Groovy代码:

public String getCurrentDay(){

    String daysArray[] = {"Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday", "Saturday"};

    Calendar calendar = Calendar.getInstance();
    int day = calendar.get(Calendar.DAY_OF_WEEK);

    return daysArray[day];

}

在iReport中我正在使用:

        InvoiceVO invoiceVO = new InvoiceVO()
        invoiceVO.kms = 5
         ..............
        invoiceVO.image = currentUser.profile.image // byte array

但它不起作用。字段图像的类型为" java.lang.object"还试过" java.lang.byte"。图像表达式占位符显示为空白。

1 个答案:

答案 0 :(得分:1)

JasperReports API 6.x net.sf.jasperreports.engine.util.JRImageLoader.loadImage(byte [])方法不存在(已废弃)。< / p>

您应该将 java.awt.Image 对象传递给报表。

byte[]转换为java.awt.Image可以在链中完成。

Java 代码:

try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("images/smile.png")) {
    params.put("smileImage", ImageIO.read(new ByteArrayInputStream(JRLoader.loadBytes(inputStream))));
} catch (JRException | IOException e) {
    throw new RuntimeException("Failed to load image", e);
}

jrxml 文件:

<parameter name="logo" class="java.awt.Image"/>
<summary>
    <band height="150">
        <image >
            <reportElement x="20" y="20" width="50" height="50"/>
            <imageExpression><![CDATA[$P{smileImage}]]></imageExpression>
        </image>