BLOB图像未显示在jasper报告pdf中

时间:2013-07-23 07:49:14

标签: jasper-reports

我已将我的oracle数据库中的图像保存为BLOB。我的模型类包含byte []图像;对应于数据库中的BLOB feild。我必须将数据库中的所有图像导出为PDF。在java中我使用了以下代码:




    JasperReport jasperReport = JasperCompileManager.compileReport('jrxml file');
       JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(imageObjList);  
       //imageObjList containing the model 'ImageObj' which contain  byte[] image 
       JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,jasperParameter,ds);
       JasperExportManager.exportReportToPdfStream(jasperPrint,responce.getOutputStream() );

我使用iReport创建jrxml文件

在我的jrxml中,我创建一个字段作为图像,字段类型为java.io.InputStream

在我的Image中,我将Image Expression表示为$ F {image},并将Image Class表达式赋予java.awt.Image。

我无法制作我的pdf报告。

我得到一个例外




    net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression: 
       Source text : $F{image}
       ..... 
       Caused by: java.lang.ClassCastException: [B cannot be cast to java.io.InputStream
       at ImageReport_1374240048064_891215.evaluate(ImageReport_1374240048064_891215:171)

我需要pdf中的图片。

1 个答案:

答案 0 :(得分:1)

错误消息“[B不能转换为java.io.InputStream”意味着字节数组([B]不能转换为InputStream。问题是jrxml文件中图像字段的类型与ImageObj bean中字段的类型不匹配。

根据JasperReports Ultimate Guide,您可以使用以下类型作为图像表达的输入数据:

  • java.lang.String中
  • 的java.io.File
  • 的java.net.URL
  • 的java.io.InputStream
  • java.awt.Image中
  • net.sf.jasperreports.engine.JRRenderable

所以你必须将byte []转换为另一种数据类型。 InputStream是最简单的方法:

将ImageObj中的getter更改为:

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

并将图像类表达式设置为java.io.InputStream。