Ireport vários relatorios

Bom dia,

Tenho uma dúvida sobre um um relatorio que eu criei.

Desenvolvi uma nota eletronica no ireport, toda cheia dos retangulos e formas pra separar os campos, como uma nota eletronica tem.
Porém hoje ela funcina perfeitamente com uma nota por vez. Eu trabalho com a conexão de dados por uma lista e não direta a um banco e gostaria de saber se existe como mandar várias listas para imprimir várias notas eletronicas em um único PDF.

Obrigado!

Pessoal, fiz um codigo aqui porém não tem jeito de funcionar, simplesmente parece que o arquivo quando criado ficar corrompido ou algo do tipo e estou precisando muito disso!

Gostaria muito da ajuda de vces!

Visualização e criação do PDF, onde ocorre a montagem e possívelmente o erro

public void visualizaPDF(List<JasperPrint> jasperPrints) {
        byte[] arquivo = new byte[0];
        JasperPrint impressaoTotal = new JasperPrint();
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            List<JRPrintPage> listaRel = new ArrayList<JRPrintPage>();
            CamposRelDacte camposRel = new CamposRelDacte();
            ArrayList<CamposRelDacte> camposR = new ArrayList<CamposRelDacte>();
            for (int i = 0; i < jasperPrints.size(); i++) {
                JasperPrint jasper = jasperPrints.get(i);
                camposRel = new CamposRelDacte();
                camposRel.setJasper(jasper);
                camposR.add(camposRel);
            }

            for (int i = 0; i < camposR.size(); i++) {
                listaRel = camposR.get(i).getJasper().getPages();
                for (JRPrintPage jRPrintPage : listaRel) {
                    impressaoTotal.addPage(jRPrintPage);
                }
            }
            
             arquivo = JasperExportManager.exportReportToPdf(impressaoTotal);
             HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
             response.setContentType("application/pdf");
             response.setContentLength(arquivo.length);
             OutputStream saida = response.getOutputStream();
             saida.write(arquivo, 0, arquivo.length);
             saida.write(arquivo, 0, arquivo.length);
             saida.flush();
             saida.close();

Montagem e ligação dos dados para o relatorio, retornando um JasperPrint

public JasperPrint  criaRelatorioDacte(String relatorio, Map<String, Object> map, List<Object> listaDados) {
        try {
            byte[] arquivo = new byte[0];
            FacesContext context = FacesContext.getCurrentInstance();
            InputStream isJasper = new FileInputStream(getClass().getResource("/RelCooperados/" + relatorio + ".jasper").toString().replace("file:", "").replace("\\", "/"));
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(isJasper);


            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JRBeanCollectionDataSource(listaDados, false));
            return jasperPrint ;
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao visualizar relatório.", ex.getMessage()));
            return null;
        }
    }

Também fiz da seguinte forma

public void geraPDF(byte[] arquivo) throws IOException {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
        response.setContentType("application/pdf");
        response.setContentLength(arquivo.length);
        OutputStream saida = response.getOutputStream();
        saida.write(arquivo, 0, arquivo.length);
        saida.flush();
        saida.close();
    }

e Chamada fica igual ao outro, so que retorna um byte[]

public byte[] criaRelatorioDacte(String relatorio, Map<String, Object> map, List<Object> listaDados) {
        try {
            byte[] arquivo = new byte[0];
            FacesContext context = FacesContext.getCurrentInstance();
            InputStream isJasper = new FileInputStream(getClass().getResource("/RelCooperados/" + relatorio + ".jasper").toString().replace("file:", "").replace("\\", "/"));
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(isJasper);


            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JRBeanCollectionDataSource(listaDados, false));
            arquivo = JasperExportManager.exportReportToPdf(jasperPrint);
            //JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, ConexaoTeste.Conecta());
            return arquivo;
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao visualizar relatório.", ex.getMessage()));
            return null;
        }
    }

a Contatenação do arquivo byte[] fica assim:

byte[] arquivos = null;
if (arquivos == null) {
                            arquivos = funcao.criaRelatorioDacte("Dacte", map, funcao.getTags(tags));
                        } else {
                            byte[] arq = funcao.criaRelatorioDacte("Dacte", map, funcao.getTags(tags));
                            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                            outputStream.write(arquivos);
                            outputStream.write(arq);

                            arquivos = outputStream.toByteArray();
                        }

Essa ultima opçao funciona, mas só imprime um relatorio dentro do pdf, no caso o ultimo, se tiver 5, somente o 5º vai ser impresso, os outros 4 simplesmente não aparece

Alguem tem alguma solução para exportar vários relatorios em um único PDF???

Obrigado

Bom dia,

Alguém por favor consegue me dar uma ajuda nisso, estou precisando muito disso…

Obrigado!