Galera, eu uso JSF, e preciso disponibilizar um relatório para download. Eu, seguindo algumas dicas até aqui do forum, criei o relatório na memória. Agora só tem um problema. Como eu faço aparecer a telinha de download???
o código do meu método é esse:
String caminho_arquivo = new File("").getAbsolutePath() + "/caminho";
String nome_arquivo = "relatorio.jasper";
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(caminho_arquivo + nome_arquivo);
Map parameters = new HashMap();
parameters.put("Caminho", caminho_arquivo);
//----------------------------------------------------------------------------------
//this.bytes = JasperRunManager.runReportToPdf(jasperReport,parameters,this.getRelatorioBois());
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, this.getRelatorioBois());
ByteArrayOutputStream pdfStream = new ByteArrayOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, pdfStream);
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=myPDF.pdf");
response.setContentLength(pdfStream.size());
try{
ServletOutputStream sos = response.getOutputStream();
pdfStream.writeTo(sos);
System.out.println("pdsStream - "+pdfStream); //->ele imprime o conteúdo do relatório, mas codificado pois é pdf.
sos.flush();
sos.close();
pdfStream.close();
pdfStream = null;
}catch(IOException e){
e.printStackTrace();
}
return "";
}catch(JRException e){
System.out.println("entrou no catch geraReportBois");
e.printStackTrace();
}
return null;
Alguém pode me dar uma mãozinha??? Eu queria que no final desse método ele fizesse aparecer a tela de download para o cliente.
obrigado!