/* * * Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute - Graduate School and Research in Engineering. * See the file license.txt for copyright permission. * */ package relatorio; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletResponse; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import exception.relatorio.RelatorioException; /** * classe que implementa o * * metodo responsavel pelo preenchimento do relatorio, a partir do arquivo jasper compilado, do nome do arquivo pdf, * considerando os dados sob a forma de List e os par�metros */ public class RelatorioPdf { private String caminhoRelatorioPDF; public RelatorioPdf() { } public RelatorioPdf(String pathRelatorioPDF) { this.caminhoRelatorioPDF = pathRelatorioPDF; } /** * metodo responsavel pelo preenchimento do relatorio, a partir do arquivo jasper compilado, do nome do arquivo pdf, * e considerando os dados sob a forma de List e os par�metros (dayse) * * @param nomeArquivo * @param streamRelatorio * @param parametros * @param dados * @throws RelatorioException */ public void download(String nomeArquivo, InputStream streamRelatorio, Map parametros, List dados) throws RelatorioException { String caminhoRelatorio = caminhoRelatorioPDF + nomeArquivo; System.out.println("CAMINHO RELAT�RIO: " + caminhoRelatorio); File relatorio = new File(caminhoRelatorio); byte[] buffer = null; try { FacesContext context = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=\"" + nomeArquivo + "\""); if (parametros == null) { parametros = new HashMap(); } //Neste ponto, a nossa lista preenchida com o modelo � entregue ao Jasper, que cria um DataSource com ela JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dados); //Aqui � onde ocorre de fato o preenchimento do relat�rio, com os par�metros e DataSource passados JasperPrint impressao = JasperFillManager.fillReport(streamRelatorio, parametros, dataSource); //Ponto onde o relat�rio com os dados montados � exportado para o formato PDF JasperExportManager.exportReportToPdfFile(impressao, caminhoRelatorio); FileInputStream fis = new FileInputStream(relatorio); OutputStream os = response.getOutputStream(); int read = 0; buffer = new byte[1024]; while ((read = fis.read(buffer)) != -1) { os.write(buffer, 0, read); } os.flush(); os.close(); fis.close(); FacesContext.getCurrentInstance().responseComplete(); } catch (Throwable ex) { ex.printStackTrace(); throw new RelatorioException(ex); } finally { buffer = null; } } }