Estou trabalhando em uma aplicação que preciso gerar vários arquivos PDFs, só que está gerando apenas um.
É chamado o método abaixo para cada item da lista.
for (int i = 0; i < getSelectedResObras().size(); i++) {
geraRelatorioDemonstrativoCalculo(getSelectedResObras().get(i));
}
public void geraRelatorioDemonstrativoCalculo(ResObra resObraDemonstrativo) {
RelatorioFacade relatorio = new RelatorioFacade();
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("INTERESSADO", resObraDemonstrativo.primeiroInteressado());
map.put("PROJETO", resObraDemonstrativo.getProjeto());
map.put("ODEX", resObraDemonstrativo.getOdex());
map.put("CLASSIFICACAOPROJETO", resObraDemonstrativo.getClassificacaoProjeto());
map.put("MUNICIPIO", resObraDemonstrativo.getResMunicipio().getMunicipio());
map.put("DATAUNIVERSALIZACAO", resObraDemonstrativo.getAtualizacaoFinanceira().getDataUniversalizacao());
map.put("DATALIGACAO", resObraDemonstrativo.getDataLigacao());
map.put("VALORENEL", resObraDemonstrativo.getValorEnel().doubleValue());
if(resObraDemonstrativo.getValorCliente() != null) {
map.put("VALORCLIENTE", resObraDemonstrativo.getValorCliente().doubleValue());
} else {
map.put("VALORCLIENTE", 0.00);
}
if(resObraDemonstrativo.getValorErd() != null) {
map.put("VALORERD", resObraDemonstrativo.getValorErd().doubleValue());
} else {
map.put("VALORERD", 0.00);
}
map.put("VALORRECONHECIDO", resObraDemonstrativo.getValorReconhecido().doubleValue());
map.put("DATAATUALIZACAO", dataAtualizacao);
map.put("IGPM0DATACOMISS", resObraDemonstrativo.getAtualizacaoFinanceira().getIgpm0DataComiss());
map.put("IGPM1VENCIMENTOREG", resObraDemonstrativo.getAtualizacaoFinanceira().getIgpm1VencimentoReg());
map.put("IGPM1MESPAGTO", resObraDemonstrativo.getAtualizacaoFinanceira().getIgpm1MesPagto());
map.put("VALORATUALIZADO1", resObraDemonstrativo.getAtualizacaoFinanceira().getValorAtualizado1());
map.put("JUROS05", resObraDemonstrativo.getAtualizacaoFinanceira().getJuros05());
map.put("VALORATUALIZADO2", resObraDemonstrativo.getAtualizacaoFinanceira().getValorAtualizado2());
map.put("VALORATUALIZADO3", resObraDemonstrativo.getAtualizacaoFinanceira().getValorAtualizado3());
map.put("MULTA", resObraDemonstrativo.getAtualizacaoFinanceira().getMulta());
map.put("JUROS1", resObraDemonstrativo.getAtualizacaoFinanceira().getJuros1());
map.put("SUMMULTAJUROS1", resObraDemonstrativo.getAtualizacaoFinanceira().getMulta()+resObraDemonstrativo.getAtualizacaoFinanceira().getJuros1());
map.put("SUMVALORATUALIZADO3MULTAJUROS1", resObraDemonstrativo.getAtualizacaoFinanceira().getValorAtualizado3()+resObraDemonstrativo.getAtualizacaoFinanceira().getMulta()+resObraDemonstrativo.getAtualizacaoFinanceira().getJuros1());
map.put("IMAGE_SRC", "/br/com/celg/relatorio/");
String name = resObraDemonstrativo.getOdex() + " - " + resObraDemonstrativo.primeiroInteressado() + ".pdf";
relatorio.imprimirWithOutColletion(FacesContext.getCurrentInstance(), map, "/DemonstrativoDeCalculo.jasper", name);
}
O arquivo referente ao primeiro item da lista é gerado normalmente, mas os próximos não vão e nem aparece erro. Alguém saberia me ajudar?
public void imprimirWithOutColletion(FacesContext ctx, HashMap<String, Object> map, String path, String name) {
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
ServletOutputStream out = null;
InputStream input = ctx.getExternalContext().getResourceAsStream("/WEB-INF/classes/br/com/celg/relatorio" + path);
try {
response.resetBuffer();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=\""+name+"\"");
out = response.getOutputStream();
JasperRunManager.runReportToPdfStream(input, out, map, new JREmptyDataSource());
} catch (JRException ex) {
Logger.getLogger(RelatorioFacade.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(RelatorioFacade.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (out != null) {
try {
out.flush();
out.close();
} catch (IOException ex) {
Logger.getLogger(RelatorioFacade.class.getName()).log(Level.SEVERE, null, ex);
}
}
ctx.renderResponse();
ctx.responseComplete();
response = null;
}
}