Salve galera, visito o fórum a um tempo já, mas só agora resolvi criar uma conta!
Estou trabalhando em uma aplicação voltada para o ramo da educação onde preciso criar vários arquivos PDF que serão os certificados dos alunos.
Esses arquivos ficarão registrados no BD (por isso é necessário que seja um arquivo para cada aluno).
Consigo criar o arquivo para um aluno perfeitamente, porém quando “tento” criar arquivos em sequência não sai (gera somente um arquivo, do ultimo registro da lista). Estou usando uma estrutura de repetição encadeada para percorrer uma lista de alunos e criar o arquivo para cada um.
Segue o código
Método que monta a lista de alunos a serem impressos
private void geraCertificadoFinalMOPPCIPA() throws CertificacaoServiceException {
lista = certificacaoService.buscarAlunosTurmaImpressaoCertificado(listaMatriculasSelecionadasImpressao, tipoDocumento);
path = "/pages/certificacao/emissao/relatorios/documento_certificado.jasper";
aux = CollectionFactory.newList();
for (CertificadoConsulta documento : lista) {
CertificadoDocumento certificadoDocumento = new CertificadoDocumento(documento);
fileName = "Certificados do Curso " + certificadoDocumento.getNomeEstudante() + ".pdf";
aux.add(certificadoDocumento);
criaDocumentoFisico();
aux.clear();
}
}
metodo que gera o PDF fisicamente
private void criaDocumentoFisico() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) facesContext.getExternalContext().getContext();
String pathRel = servletContext.getRealPath(path);
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
response.setContentType("application/pdf");
//Cria um data source com uma lista dos objetos utilizados para a geração do PDF.
JRDataSource jrDS = new JRBeanCollectionDataSource(aux);
//parametros
Map<String, Object> parametros = new HashMap<String, Object>();
try {
JasperPrint print = JasperFillManager.fillReport(pathRel, parametros, jrDS);
byte[] bytes = JasperExportManager.exportReportToPdf(print);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
facesContext.responseComplete();
} catch (Exception e) {
e.printStackTrace();
}
}
Alguém já conseguiu gerar vários arquivos PDF em sequência?
Agradeço!