Nao consigo exibir um relatorio(JasperReport) na pagina web

4 respostas
Jorge_Almeida
Estou tentando exibir um relatorio gerado pelo JasperReport. Estou usando JavaServer Faces e quando chamo o codigo abaixo, nao consigo exibir o relatorio (.pdf) no browser:
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) facesContext.getExternalContext().getContext();
File reportFile = new File(servletContext.getRealPath("/reports/produtos.jasper"));
InputStream reporte = null;
ServletOutputStream ouputStream = null;

	try {
		reporte = new FileInputStream(reportFile);
			
		HashMap param = new HashMap();

                //o metodo createReportDataSource esta retornando uma lista de objetos a serem exibidos
		JasperPrint jp = JasperFillManager.fillReport(reporte, param, this.createReportDataSource());
		byte[] bytes = JasperExportManager.exportReportToPdf(jp);
			
		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
		response.setContentType("application/octet-stream");
		response.addHeader("Content-Disposition", "attachment; filename=produtos.pdf");  
		
		ouputStream = response.getOutputStream();
		
		JRPdfExporter exporterPdf = new JRPdfExporter();
		 exporterPdf.setParameter(JRPdfExporterParameter.JASPER_PRINT ,jp);
		 exporterPdf.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, ouputStream);
		 exporterPdf.exportReport();
			 
		 facesContext.responseComplete();
		 ouputStream.flush();
			 
			 
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (JRException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		try {
			if (ouputStream != null) ouputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

O grande problema eh que quando executo no IE nada eh exibido no browser, mas quando uso o FireFox
a tela exibe uma pagina em branco com dados estranhos.

4 Respostas

L

Cara eu tive um problema parecido uma vez e o problema era no ContentType…

Experimente usar no lugar de:

response.setContentType("application/octet-stream");

por:

response.setContentType("application/pdf");

Tente lá, espero que dê certo…

=)

Cabazzo

Muda essa linha:

response.setContentType("application/octet-stream");

por esta:

response.setContentType("application/pdf");
Cabazzo

Cheguei atrasado… :stuck_out_tongue:

carolino

Noss a minha salvação foi achar esse post!
vlw galera

Criado 16 de junho de 2008
Ultima resposta 26 de abr. de 2010
Respostas 4
Participantes 4