Bean Gerenciavel

6 respostas
J

Bom Dia, Galera eu fiz um relatorio no IReport agora eu to exportando ele para pdf. porem eu naum consigo abrir ele numa
url, como que faço para qndo clicar do botao ele dispachar para abrir no navegador por exemplo?

try {
            long start = System.currentTimeMillis();
            Connection conn = SingleConnection.getInstance().getConnection();
            Map parameters = new HashMap();

            JasperFillManager.fillReportToFile("C:\\Users\\RelatorioEgressos.jasper", parameters, conn);
            JasperPrint jasperPrint = JasperFillManager.fillReport("C:\\Users\\RelatorioEgressos.jasper", parameters, conn);
          

  JasperViewer.viewReport(jasperPrint); // AQUI ABRE O VISUALIZADOR DO IREPORT.
            
            JasperExportManager.exportReportToPdfFile("C:\\Users\\RelatorioEgressos.jrprint");


            /******************************************************************************************/
            /******************************************************************************************/
            System.err.println("Filling time : " + (System.currentTimeMillis() - start));
        } catch (JRException ex) {
            Logger.getLogger(ControladorJSF.class.getName()).log(Level.SEVERE, null, ex);
        }

então seria assim, ao inves de abrir com esse código:

JasperViewer.viewReport(jasperPrint); // AQUI ABRE O VISUALIZADOR DO IREPORT.
eu quero q ele abra no navegador.

grato.

6 Respostas

Alexandre_Saudate

Modifique para ficar assim:

try {
            long start = System.currentTimeMillis();
            Connection conn = SingleConnection.getInstance().getConnection();
            Map parameters = new HashMap();

            JasperFillManager.fillReportToFile("C:\\Users\\RelatorioEgressos.jasper", parameters, conn);
            JasperPrint jasperPrint = JasperFillManager.fillReport("C:\\Users\\RelatorioEgressos.jasper", parameters, conn);
            
            byte[] relatorio = JasperExportManager.exportReportToPdf(jasperPrint);

            //Descomente essa linha se quiser disponibilizar para download
            //response.addHeader("Content-disposition", "attachment; filename=relatorio.pdf"); 
            response.setContentType("text/pdf");

            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(relatorio);
            outStream.flush();
            outStream.close();

                  } catch (JRException ex) {
            Logger.getLogger(ControladorJSF.class.getName()).log(Level.SEVERE, null, ex);
        }
J

asaudate, funcionou para baixar tudo certinho, porem o relatorio vem com 0bits, ou seja, ele naum ta gerando corretamente o relatorio, oq pode ser?

Alexandre_Saudate

Uma das causas pode ser que a consulta não retornou dados. A outra, é que o arquivo .jasper está errado.

[]´s

J

asaudate, a consulta ta retornando dados sim, ta gerando o
jasperPrint corretamente, o problema ta sendo na exportacao para pdf…
ou tambem pode ser na saida do relatorio… tem alguma sugestao?

grato.

R

Bom dia
Caso não tenha ainda resolvido,esse exemplo funciona:

public void gerarRelatorio()throws Exception{
		ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
		File f = new File(ctx.getRealPath("/imagens/topo.jpg"));
		BufferedImage logo = ImageIO.read(f);
        Map parameters = setaParametrosRelatorio();
    	parameters.put("logo", logo);
		parameters.put("periodo",periodo.getDescricao());
		String path = ctx.getRealPath("/reports/estatisticas.jasper");
		Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/xpto","postgres","postgres");

		byte[] bytes = JasperRunManager.runReportToPdf(path, parameters, conn);
		HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
		response.setContentType("application/pdf");
		response.setHeader("content-disposition", "attachment;filename=Movimentacao");
		response.setContentLength(bytes.length);
		ServletOutputStream servletStream = response.getOutputStream();
		servletStream.write(bytes, 0, bytes.length);
		servletStream.flush();
		servletStream.close();
		FacesContext.getCurrentInstance().responseComplete();
	}
J
long start = System.currentTimeMillis();
            Connection conn = SingleConnection.getInstance().getConnection();
            Map parameters = new HashMap();

            JasperFillManager.fillReportToFile("C:\\RelatorioEgressos.jasper", parameters, conn);
            JasperPrint jasperPrint = JasperFillManager.fillReport("C:\\RelatorioEgressos.jasper", parameters, conn);
            JasperViewer.viewReport(jasperPrint);


// ATÉ AQUI FUNCIONA PERFEITAMENTE, CONSIGO VER O RELATORIO NO IREPORT ATRAVES DO          JasperViewer.viewReport(jasperPrint);
//dAQUI PARA BAIXO NÃO FUNCIONA, O RELATORIO É DISPONIBILIZADO PARA DOWNLOAD, MAIS NÃO ABRE APOS O DOWNLOAD. DIZ QUE OCORREU UM ERRO
E Q O ARQUIVO CONTEM 0 BYTES

            byte[] relatorio = JasperExportManager.exportReportToPdf(jasperPrint);


            response.addHeader("Content-disposition", "attachment; filename=relatorio.pdf");
            response.setContentType("text/pdf");

            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(relatorio);
            outStream.flush();
            outStream.close();

Problema comentado acima…
grato.

Criado 8 de setembro de 2010
Ultima resposta 9 de set. de 2010
Respostas 6
Participantes 3