PDF que não fonciona neeem por reza. [Jasper + Jsf]

2 respostas
proteus_adi

Eu construi um relatório usando JASPER que é chamado via JSF.
Eu tenho então um botão que gera o relatório e carrega os bytes do relatório.
Então, eu gero uma cópia do relatório para testes em um File, e escrevo na tela também.
Mudo o content-type da página, mas, a página não entende o Content-Type.

O arquivo PDF físico ficou lindo, mas a página fica:

%PDF-1.4 %âãÏÓ 3 0 obj <>stream x? ?ßnÓ0Æïýî`Õ¸X°ãØ?;â?´`ëâ"4I×Ò®]?nåy{1 ?+^?ã?5IY ±¢ÔG ó}?ªsäòzH?¢St?·Cò?¸ôÜ|Ë)?Ë|?K?sòü§ª??<NÍ\?àxp+??I>OjIOµKÓ?$% FGó²¨Ë¨(ÇçÂÂ3Â`??\ij0û?NtFéva×ÕÏ_`?v©ëý???<=Çó÷?9ð|¯Féä~k<Ó?®ç°?YÿJ?;?Nr@ù}ñþa¬?+GÒ91¼òzF.Øù?rLäÏúòOý׳wæ;{?!?[¼+fé¡ú×ëÙ¬£ÿÇF_É@? ^¨ Ð?³WJë?z©¿6ô ¥®½§?×m¨+-j#»¨cú?¨c@=JÖÉíõ$\ÉΨ}Y ÞÕ Pûº6§°?Ñ·?±¨ V?Q+^ ÞÕ P+Y?Ó³?Ñ·?±Ø£þ¹]ù?Q{~?zW·B-ymΦE?èÛB?XTP?Q?¢Cæu+Ô¢¾½4Ýp(jDßjÄP¯?Å?«é÷Ñê[gýî/^j?¼uktëûJÓM?âFômáF,*¸Ügýî/Vj?¬u{dõ½¥éÆCq#ú¶p#?ûC/?6Y?]?7OîVññtÑË®æÇÓ¸?¥7Éÿd`?f\+z8?)D?JG.ò£O)±§]?kêº?*ÎQ¬?úc8?aêÂv2)¤?æ±G??_ÑX´ë?È ?ñ& O?xç-Þìß÷g8 À endstream endobj 1 0 obj<<>/Resources<<>/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/Font<>>>/MediaBox[0 0 595 842]>> endobj 5 0 obj[1 0 R/XYZ 0 854 0] endobj 2 0 obj<> endobj 4 0 obj<> endobj 6 0 obj<> endobj 7 0 obj<> endobj 8 0 obj<> endobj 9 0 obj<> endobj xref 0 10 [telefone removido] 65535 f [telefone removido] 00000 n [telefone removido] 00000 n [telefone removido] 00000 n [telefone removido] 00000 n [telefone removido] 00000 n [telefone removido] 00000 n [telefone removido] 00000 n [telefone removido] 00000 n [telefone removido] 00000 n trailer <<8f4d69c765ea6d04e893dba1f566b345>]/Root 8 0 R/Size 10/Info 9 0 R>> startxref 1409 %%EOF

O relatório é escrito em página usando:
byte conteudo[] = "Relatório PDF gerado pelo JasperReport";

  public void getReport() {
        HttpServletResponse response = 
            (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
        try {
            if (conteudo != null) {
                response.setHeader("Expires", "0");   
                response.setHeader("Pragma", "public");   
                response.setContentType("application/pdf");    
                response.setHeader("Cache-Control", "no-cache");

                response.setContentLength(conteudo.length);
                OutputStream out = response.getOutputStream();
                out.write(conteudo);
                out.flush();
                out.close();
            } else {
                response.setContentType("text/html;charset=windows-1252");
                PrintWriter out = response.getWriter();
                out.println("Erro ao gerar o relatório");
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        FacesContext.getCurrentInstance().responseComplete();
    }

Agora, um fato estranho...
Se eu mudo o response.setContentType("application/pdf"); para response.setContentType("application/msword"); não acontece nada do mesmo jeito.
Eu observei que quando insiro este cabeçalho via Servlet funciona...
O que no JSF me impede de reescrever o content-type?

2 Respostas

furutani

Qual tag vc usa pra chamar o método getReport()?

proteus_adi

O responseComplete(); me garante que eu nao precise chamar o getReport.
Eu tenho um botao q xama uma funcao q xama o getReport(), furando o fluxo de navegacao.
=]

nao existe um .faces xamando o relatorio.

Criado 18 de setembro de 2009
Ultima resposta 19 de set. de 2009
Respostas 2
Participantes 2