Estou gerando um relatório utilizando jasperReports e iReport.
Os dados são carregados a partir de um JRDataSource e aparentemente está tudo ok.
Quando clico no ícone para gerar meu PDF ele é criado perfeitamente, porém se tento fazer isso uma segunda fez é gerado um PDF em branco.
Alguém tem ideia do que pode ser?
.xhtml
<h:commandLink style="margin-left:47%">
<p:fileDownload value="#{contratoEmpenhoBean.arquivoRetorno}"></p:fileDownload>
<p:graphicImage library="img" name="PDF.png" title="Gerar PDF"/>
</h:commandLink>
bean
public StreamedContent getArquivoRetorno() {
String nomeRelatorioSaida = contratoEmpenho.getContrato();
InputStream caminhoArquivoJasper = getClass().getResourceAsStream( "/contratoEmpenho.jasper" );
Map parametros = new HashMap();
ReportUtils reportUtils = new ReportUtils();
try {
this.arquivoRetorno = reportUtils.geraRelatorio(nomeRelatorioSaida, caminhoArquivoJasper, parametros, ContratoEmpenhoJRDataSourceFactory.createDataSource(this.contratoEmpenho));
} catch (Exception e) {
e.printStackTrace();
return null;
}
return arquivoRetorno;
}
ReportUtil
[code]public StreamedContent geraRelatorio(String nomeRelatorioSaida, InputStream caminhoArquivoJasper, Map parametros, JRDataSource dataSource ){
StreamedContent arquivoRetorno = null;
try {
JasperPrint impressoraJasper = JasperFillManager.fillReport(caminhoArquivoJasper, parametros, dataSource );
String caminhoArquivoRelatorio = String.valueOf(getClass().getResourceAsStream("/"+nomeRelatorioSaida+".pdf"));
File arquivoGerado = new File(caminhoArquivoRelatorio);
JRExporter tipoArquivoExportado = new JRPdfExporter();
tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT, impressoraJasper);
tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE, arquivoGerado);
tipoArquivoExportado.exportReport();
arquivoGerado.deleteOnExit();
InputStream conteudoRelatorio = new FileInputStream(arquivoGerado);
arquivoRetorno = new DefaultStreamedContent(conteudoRelatorio, "application/"+".pdf", nomeRelatorioSaida+".pdf");
} catch (JRException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return arquivoRetorno;
}[/code]