我正在尝试导出图像(字节数组)并使用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"。图像表达式占位符显示为空白。
答案 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>