1

输入: 1. 具有成员 InputStream 的类

public class Dateien {
...
   private InputStream payload = null;
...
   public InputStream getPayload() {
       return payload;
   }
   public void setPayload(InputStream payload) {
     this.payload = payload;
   }
}
  1. 有效载荷包含带图像的流(jpg 或其他格式)
  2. 带有文本字段的 Jasper 报告 (class=java.lang.String, expression=$F{file.payload}) 在报告中显示了正确的字符串

    java.io.ByteArrayInputStream@6aa27760
    
  3. 但是当我在报告中创建图像字段时(class=java.io.InputStream, expression=$F{file.payload})

  4. 我得到异常

     SEVERE: Servlet.service() for servlet [appServlet] in context with path [/abc] threw exception [Request processing failed; nested exception is
     net.sf.jasperreports.engine.JRException: Image read failed.] with root cause
     net.sf.jasperreports.engine.JRException: Image read failed.
     at net.sf.jasperreports.engine.util.JRJdk14ImageReader.readImage(JRJdk14ImageReader.java:73)
    

我应该怎么做才能解决问题?

顺便说一句:我尝试在浏览器中通过 HTTP 获取图像流,我看到了良好的渲染图像。所以我看到流是好的并且没有损坏。

4

1 回答 1

1

net.sf.jasperreports.engine.util.JRJdk14ImageReader类中引发的异常,第 73 行。

方法源代码JRJdk14ImageReader.readImage(byte[])

public Image readImage(byte[] bytes) throws JRException
{
    InputStream bais = new ByteArrayInputStream(bytes);

    Image image = null;
    try
    {
        image = ImageIO.read(bais);
    }
    catch (Exception e)
    {
        throw new JRException(e);
    }
    finally
    {
        try
        {
            bais.close();
        }
        catch (IOException e)
        {
        }
    }

    if (image == null)
    {
        throw new JRException("Image read failed."); // the line #73
    }

    return image;
}

如我们所见,如果图像仍然为空,则会引发异常。

您应该检查您是否确实将字节数组 ( ) 作为有效负载字段传递byte[]给报告 。

于 2013-07-03T11:43:05.843 回答