JasperReports, Exceção com "Image read failed" ao resultar mais de uma página de conteúdo

Olás,

Estou trabalhando com um report que contém duas imagens no PageHeader, e quando eu tenho conteúdo suficiente para ultrapassar uma página, dá este erro:

net.sf.jasperreports.engine.JRException: Image read failed.
at net.sf.jasperreports.engine.util.JRJdk14ImageReader.readImage(JRJdk14ImageReader.java:77)
at net.sf.jasperreports.engine.util.JRImageLoader.loadImage(JRImageLoader.java:248)
at net.sf.jasperreports.engine.JRImageRenderer.getImage(JRImageRenderer.java:330)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:1008)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:586)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:554)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:519)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:285)
at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdf(JasperExportManager.java:188)
at net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:404)

Se eu enviar dados que irão gerar somente uma página de relatório, o report é gerado normalmente e funciona perfeitamente. Mas se for mais de uma página, dá problema. Estou usando as imagens através de parâmetros que estes então, utilizam InputStream. Estou usando iReport 3.0.0 e jasperreports-4.0.1. Alguém pode me ajudar a solucionar??

Desde já agradeço.

Rafael.

Opa,

Não consegui saber o “por que?” disso, mas achei uma solução que foi, utilizar a imagem estática durante todo o Report. Para isso, nas propriedades da imagem (em “Expressão da imagem”) eu informei “…\logo\logo.png” e funcionou.

Alguém que souber se puder me explicar o por que deste erro, ficarei agradecido. :slight_smile:

Abraços.

Opa,

Me parece que, a resposta para esta questão, é de que ao utilizar InputStream para qualquer objeto, é necessário que sempre tenha fluxo de dados para o que se está utilizando, ou seja, no meu caso, todas as vezes que o Report precisar do dado, tem de estar preenchido o que eu utilizo com InputStream. A solução que este sujeito achou foi a de MANTER EM CACHE a imagem que necessita. Na verdade deve-se manter em cache o dado que é necessário para utilizar várias vezes pelo Report, já que ele não será enviado o tempo todo.

Nas propriedades da image (iReport 3.0.0) marque um checkbox abaixo de “Alinhamento Vertical” chamado “Cache”, para outras versões do iReport modifica-se o valor desta propriedade para “Using Cache = TRUE”.

Abraços.

Muito bom Rafael, estava com o mesmo problema e foi só marcar o checkbox Using Cache que ele já foi solucionado!

Muito Obrigado!!! :slight_smile:

Completando o tópico já resolvido e antigo… mas acabou de acontecer comigo o mesmo problema. Chequei as propriedades do componente imagem do meu relatório e já estava marcado o check “use cache”. Mas logo depois dele tem um outro… is Lazy. Marquei também e o problema se resolveu. A versão do iReports que usei aqui foi a 4.5.1