Como gerar vários arquivos PDF com jasper

0 respostas
jasperjava
Rodrigomarden

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;
        }
    }
Criado 12 de julho de 2019
Respostas 0
Participantes 1