Exibir boleto no browser diretamente sem gravar um arquivo boleto.pdf. Tem como?

300 views
Skip to first unread message

Marques

unread,
Nov 16, 2011, 12:27:43 PM11/16/11
to jrimum-c...@googlegroups.com
Olá,

Na minha action tem o seguinte código que grava um arquivo boleto.pdf.
Tem como exibir o boleto diretamente sem precisar gravar o arquivo?
Obs: uso richfaces + seam

Muito obrigado,

Marques

public void printBoleto() {

Boleto boleto = boletoBancarioService.createBoleto(

empresaService.findById(AppConstants.EMPRESA_APP_OWNER),

pedido.getCliente(), pedido.getNumero().toString(),

pedidoService.calculateValorPedido(pedido));

FacesContext context = FacesContext.getCurrentInstance();

HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

try {

BoletoViewer viewer = new BoletoViewer(boleto);

byte[] pdfAsBytes = viewer.getPdfAsByteArray();


response.setContentType("application/pdf");

response.setHeader("Content-Disposition", "attachment; filename=boleto.pdf");


OutputStream output = response.getOutputStream();

output.write(pdfAsBytes);


response.flushBuffer(); 

FacesContext.getCurrentInstance().responseComplete(); 

} catch (Exception e) {

e.printStackTrace();

}

}

Rômulo Augusto

unread,
Nov 16, 2011, 1:10:27 PM11/16/11
to jrimum-c...@googlegroups.com
"Gravar o arquivo" é o mesmo que fazer o download nesse caso?
Se for isso que você quer dizer, basta trocar o "attachment" pelo "inline" no Content-Disposition


response.setHeader("Content-Disposition", "attachment; filename=boleto.pdf");

response.setHeader("Content-Disposition", "inline; filename=boleto.pdf"); 

-------------------------------------------------------------------
Rômulo Augusto
JRimum Developer
www.jrimum.org
P Antes de imprimir, pense em seu compromisso com o meio ambiente



--
Você recebeu esta mensagem porque está inscrito no Grupo "JRimum
Community" nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
jrimum-c...@googlegroups.com
ANTES DE POSTAR... leia:
https://groups.google.com/d/topic/jrimum-community/ULU8QHHgaBs/discussion
Para cancelar a sua inscrição neste grupo, envie um e-mail para
jrimum-communi...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com/group/jrimum-community?hl=pt-BR?hl=pt-BR

Douglas C. R. Paes

unread,
Nov 16, 2011, 1:16:49 PM11/16/11
to jrimum-c...@googlegroups.com
Mas parece que isso não funciona em todos os browsers, certo?

Não me lembro em qual foi exatamente, mas sei que testei no Firefox e no Chrome, e em um deles, a configuração foi ignorada totalmente... só não tenho certeza de em qual foi.

Douglas C. R. Paes

"If today were the last day of my life, would I want to do what I'm about to do today?"
Steve Jobs



2011/11/16 Rômulo Augusto <romul...@gmail.com>

Enio Nunes

unread,
Nov 16, 2011, 1:32:26 PM11/16/11
to jrimum-c...@googlegroups.com
este problema esta relacionado com o que é setado no header, manda pro header "file/pdf" nao tenho certeza da string que deve ser passada, mais é mais ou menos assim, pois a muito tempo fiz isso.

Douglas C. R. Paes

unread,
Nov 16, 2011, 1:33:55 PM11/16/11
to jrimum-c...@googlegroups.com
Li em algum lugar que isso aí depende ainda da configuração do browser, se está pra abrir ou pra fazer download.
Mas não fiz muitos testes


Douglas C. R. Paes

"If today were the last day of my life, would I want to do what I'm about to do today?"
Steve Jobs



2011/11/16 Enio Nunes <enio.a...@gmail.com>

Rômulo Augusto

unread,
Nov 16, 2011, 3:32:44 PM11/16/11
to jrimum-c...@googlegroups.com
É, quanto a funcionar em qualquer browser de fato eu não sei e também não testei em todos, mas funcionou nos que já usei.


-------------------------------------------------------------------
Rômulo Augusto
JRimum Developer
www.jrimum.org
P Antes de imprimir, pense em seu compromisso com o meio ambiente



Misael Barreto de Queiroz

unread,
Nov 17, 2011, 1:14:07 PM11/17/11
to jrimum-c...@googlegroups.com
Olá Douglas,

Segue uma dica presente na thread Como conseguir os campos: CodigoBarras e LinhaDigitável:
https://groups.google.com/d/msg/jrimum-community/Fs9jYHC0f28/RCa4tPSzNuMJ


==========================================================================================

Olá Rafael,

No caso o viewer te devolve um PDF (arquivo, stream, array de bytes), daí você pode definir, na sua aplicação web, se quer exibí-lo ou oferecer o download. Essa definição é feita setando parâmetros de cabeçalho HTML. Exemplo:

Opção de DOWNLOAD

response.setHeader("Content-
Disposition", "attachment;filename=\""+ "meuboleto.pdf" + "\"");

Opção para VISUALIZAR

response.setHeader("Content-
Disposition", "filename=\""+ "meuboleto.pdf" + "\"");


Abaixo te passo um rotina que criamos pra visualizar/baixar arquivos na web. No caso nós trabalhamos com JSF, mas se baseando nela você creio que você vai conseguir resolver o problema.


============================
Chamada a método utiliário
============================

getFile(FileWebOperation.VIEW, "Cobranca.pdf", boletoViewer.getPdfAsByteArray(), FacesUtil.getFacesContext());

==================
Método Utilitário
==================

public enum FileWebOperation {DOWNLOAD, VIEW};
  
public static synchronized void getFile(FileWebOperation fileWebOperation, String filename, byte[] bytesArquivo, FacesContext facesContext) throws IOException {
    // Contexto.
    ExternalContext context = facesContext.getExternalContext();
    HttpServletResponse response = (HttpServletResponse) context.getResponse();
  
    // Obtendo e informando o tipo do arquivo.
    String mimeType = getMimeType(bytesArquivo);
    // Ex: "application/pdf"
    response.setContentType(mimeType);

    String filenameWithExtension = null;
    if (filename.contains(".")) {
        filenameWithExtension =  filename;
    } else {
        filenameWithExtension =  filename + "." + getMimeTypeExtension(bytesArquivo);
    }  
      
    if (fileWebOperation == FileWebOperation.DOWNLOAD) {
        // Informando o header e o nome que vai aparecer no momento do donwload.
        response.setHeader("Content-Disposition", "attachment;filename=\""+ filenameWithExtension + "\"");
    }
    else if (fileWebOperation == FileWebOperation.VIEW) {
        response.setHeader("Content-Disposition", "filename=\""+ filenameWithExtension + "\"");
    }

    // Informando o tamanho do arquivo.
    response.setContentLength(bytesArquivo.length);

    OutputStream out = response.getOutputStream();
    out.write(bytesArquivo);
    out.flush();
    out.close();

    facesContext.responseComplete();
}


==========================================================================================


Espero que te ajude.
Qualquer coisa avisa aí.

Abração.




Misael Barreto
--
Misael Barreto de Queiroz
Analista de Sistemas
Squadra Tecnologia
A serviço do:
Departamento de Desenvolvimento de Sistemas
Tribunal de Justiça do Estado do Rio Grande do Norte
e Conselho Nacional De Justiça
+55 (84) 3616.6200 r6415
+55 (84) 3616.6415

Douglas C. R. Paes

unread,
Nov 21, 2011, 5:17:16 AM11/21/11
to jrimum-c...@googlegroups.com
Legal...

Vou testar depois..

Abraço


Douglas C. R. Paes

"If today were the last day of my life, would I want to do what I'm about to do today?"
Steve Jobs



2011/11/17 Misael Barreto de Queiroz <misael...@tjrn.jus.br>
JRiboyToEmail.png
Reply all
Reply to author
Forward
0 new messages