Criação de um pdf com vários boletos com JSF

166 views
Skip to first unread message

José Oquendo

unread,
Jan 12, 2011, 1:30:36 PM1/12/11
to JRimum Community
Resolvi abrir esse novo tópico, já q o assunto é diferente do abordado
anteriormente;

Estou tentando criar um único pdf com vários boletos, já consegui
fazendo com "java.awt.Desktop desktop =
java.awt.Desktop.getDesktop();", no entanto, estou trabalhando com JSF
e preciso que sejam visualizados no navegador do cliente, tentei fazer
da seguinte forma:

private void VariosBoletosEmUmArquivo() {

List<br.com.nordestefomento.jrimum.bopepo.Boleto> boletosJRimum =
getVariosBoletos();
BoletoViewer.groupInOnePDF("boletos.pdf", boletosJRimum, new
File("BoletoCreaTemplate.pdf"));

// BoletoViewer boletoViewer = new BoletoViewer(null);
// byte[] pdfAsBytes = boletoViewer.getPdfAsByteArray();

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

// try {
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;
filename=boletos.pdf");

// OutputStream output = response.getOutputStream();
// output.write(pdfAsBytes);
// response.flushBuffer();

// FacesContext.getCurrentInstance().responseComplete();

// } catch (IOException e) {
//
// Logger.getLogger(BoletoUtil.class.getName()).log(Level.SEVERE,
null, e);
// }

}

dessa forma ele cria um pdf, com tamanho maior que zero byte, mas ao
tentar abrir, é dito q está corrompido, se eu habilito a linha
"FacesContext.getCurrentInstance().responseComplete();" ele também
cria o arquivo mais com 0 byte e consequentemente também com erro.

Já vi o tuturial do site, mas, ele fala da personalização de boletos
para que sejam colocados vários dentro de uma só página e não consegui
adaptá-lo para o meu modo(quero um por página, sendo todos em um único
pdf); na própria página diz:

"Atenção: Não confundir este método exemplo groupInPages com o método
da API groupInOnePDF da classe org.jrimum.bopepo.view.BoletoViewer. O
primeiro tenta agrupar o máximo de boletos, que couber, numa página, e
se não der, encaixa o boleto na página seguinte, enquanto que o
segundo cuida de agrupar vários boletos em um único pdf, um boleto por
página."

Desde já, agradeço a ajuda de todos.

Gilmar P.S.L.

unread,
Jan 12, 2011, 1:36:07 PM1/12/11
to jrimum-c...@googlegroups.com
Em que lugar do seu código vc está enviado os bytes de:

"boletos.pdf"

?
------------------------------------------------------
Gilmar P.S.L.



2011/1/12 José Oquendo <jaoqu...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "JRimum Community" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para jrimum-c...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para jrimum-communi...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/jrimum-community?hl=pt-BR.


Gilmar P.S.L.

unread,
Jan 12, 2011, 1:39:25 PM1/12/11
to jrimum-c...@googlegroups.com
Faça o que disse na outra Thread:

Para usar esse exemplo vc vai precisar de:

http://commons.apache.org/io/download_io.cgi
&
http://jrimum-community.googlegroups.com/web/JRimum-Bopepo-SNAPSHOT-20101124.jar

Cara, utilize o método: groupInOnePDF(List<Boleto> boletos, File destFile, File templateFile)

Assim vc pode fazer uma coisa parecida com:


 private void VariosBoletosEmUmArquivo() {

           List<br.com.nordestefomento.jrimum.bopepo.Boleto> boletosJRimum = getVariosBoletos();
          
           File boletosGerados = new File ("/SeuDiretorioEscolhido/
BoletosGerados.pdf");
          
           BoletoViewer.groupInOnePDF(boletosGerados, boletosJRimum, new File("BoletoCreaTemplate.pdf"));


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

           try {
              
               response.setContentType("application/pdf");
               response.setHeader("Content-Disposition", "attachment;filename=boletos.pdf");

               OutputStream output = response.getOutputStream();
               output.write(org.apache.commons.io.IOUtils.toByteArray(new java.io.FileInputStream(boletosGerados)));

               response.flushBuffer();

               FacesContext.getCurrentInstance().responseComplete();

           } catch (Exception e) {


               Logger.getLogger(BoletoUtil.class.getName()).log(Level.SEVERE,null, e);
           }
    }

A não ser que vc queria criar o arquivo em um diretório para ser baixado por link.

------------------------------------------------------
Gilmar P.S.L.



2011/1/12 Gilmar P.S.L. <gilm...@gmail.com>

José Oquendo

unread,
Jan 12, 2011, 1:44:21 PM1/12/11
to JRimum Community
Olá Gilmar, tudo bem?

Realmente em nenhum lugar, na verdade está comentado o bloco referente
a isso, no caso da impressão de um só boleto, vc trabalha com a
instancia(boletoviewer) de BoletoViewer, fazendo todas as operação a
partir dela, no entanto, não consegui fazer o groupInOnePdf trabalhar
com a instância, já que é um método estático, enquanto o
getPdfAsByteArray não.

Grato pela atenção.

On Jan 12, 3:36 pm, "Gilmar P.S.L." <gilmat...@gmail.com> wrote:
> Em que lugar do seu código vc está enviado os bytes de:
>
> *"**boletos.pdf"
>
> ?
> *
> ------------------------------------------------------
> Gilmar P.S.L.
> *JR**i*mum *D**ev*eloper
>
> http://www.jrimum.orghttp://www.blog.jrimum.orghttp://twitter.com/jrimumhttp://groups.google.com.br/group/jrimum-community
>
> 2011/1/12 José Oquendo <jaoquen...@gmail.com>
> > jrimum-communi...@googlegroups.com<jrimum-community%2Bunsu...@googlegroups.com>
> > .

Gilmar P.S.L.

unread,
Jan 12, 2011, 1:49:24 PM1/12/11
to jrimum-c...@googlegroups.com
Olá José, tudo bem.

A resposta é, como vc faz para enviar um File para o browser?
Independente de onde o file tenha sido criado.

A resposta está no código acima. Adeque ele ao seu ambiente que fica melhor de visualizar.

Atenciosamente

------------------------------------------------------
Gilmar P.S.L.



2011/1/12 José Oquendo <jaoqu...@gmail.com>
Olá Gilmar, tudo bem?
Para cancelar a inscrição nesse grupo, envie um e-mail para jrimum-communi...@googlegroups.com.

José Oquendo

unread,
Jan 12, 2011, 1:56:23 PM1/12/11
to JRimum Community
Gilmar, não tinha visto seu post na thread anterior, desculpe, vou
testar aqui.

Obrigado

On Jan 12, 3:44 pm, José Oquendo <jaoquen...@gmail.com> wrote:
> Olá Gilmar, tudo bem?
>
> Realmente em nenhum lugar, na verdade está comentado o bloco referente
> a isso, no caso da impressão de um só boleto, vc trabalha com a
> instancia(boletoviewer) de BoletoViewer, fazendo todas as operação a
> partir dela, no entanto, não consegui fazer o groupInOnePdf trabalhar
> com a instância, já que é um método estático, enquanto o
> getPdfAsByteArray não.
>
> Grato pela atenção.
>
> On Jan 12, 3:36 pm, "Gilmar P.S.L." <gilmat...@gmail.com> wrote:
>
> > Em que lugar do seu código vc está enviado os bytes de:
>
> > *"**boletos.pdf"
>
> > ?
> > *
> > ------------------------------------------------------
> > Gilmar P.S.L.
> > *JR**i*mum *D**ev*eloper
>
> >http://www.jrimum.orghttp://www.blog.jrimum.orghttp://twitter.com/jri...

José Oquendo

unread,
Jan 12, 2011, 2:58:52 PM1/12/11
to JRimum Community
Gilmar, muito, muito obrigado mesmo, deu tudo certo.

Valeeeeeeeu.

Vcs são 100.

Abraço.

Cezar Augustus (Tropeço)

unread,
Jan 25, 2011, 1:27:33 PM1/25/11
to JRimum Community
Olá pessoal!

Desculpe reviver um tópico um pouco antigo, mas eu tenho uma dúvida
pertinente:

Aqui estou trabalhando com JSF 2.0 (Facelets) + GlassFish 3, e a minha
aplicação não permite armazenamento em pasta...
Fiz algo parecido com o que o José fez, mas com a modificação de que
no lugar de um arquivo, o pdf gerado deve ser encaminhado
ao usuário por um OutputStream diretamente, sem salvar nada no
servidor.

Um jeito que eu vi, olhando os sources do método groupInOnePdf seria
se ele apenas retornasse um byte[] com a linha

"PDFUtil.mergeFiles(boletosEmBytes);"

porém, eu ainda precisaria utilizar o BoletoViewer, que recebe um
objeto boleto como parâmetro. porém, neste caso só possuo
uma lista de boletos. O boleto passado para o BoletoViewer é somente
um modelo para geração, ou é o boleto final à ser incluído
no pdf?

Fiz um "Override" para testar, mas gostaria de saber se existe algo
que atenda esta necessidade, dentro das bibliotecas do JRimum
ou se existe algum tópico no fórum falando sobre o assunto (onde está
o link da thread que voces estavam falando anteriormente?).

Segue o trecho de código:

OutputStream output = response.getOutputStream();
BoletoViewer bv = new BoletoViewer(listaBoletos.get(0)); //
fiz um teste com o primeiro boleto da lista
output.write(groupInOnePDF(listaBoletos, bv)); //método
que fiz um override para retornar um byte[]

response.flushBuffer();
FacesContext.getCurrentInstance().responseComplete();

Desde já, agradeço a atenção.

Abraço!

Rômulo Augusto

unread,
Jan 25, 2011, 3:33:14 PM1/25/11
to jrimum-c...@googlegroups.com
Cezar, no Bopepo não tem ainda. Se você quiser contribuir com seu código manda pra o nosso email!
A gente já vê a possibilidade de integrá-lo.

Valeu


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



--
Você está recebendo esta mensagem porque se inscreveu no grupo "JRimum Community" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para jrimum-c...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para jrimum-communi...@googlegroups.com.

Cezar Augustus (Tropeço)

unread,
Jan 27, 2011, 12:03:32 PM1/27/11
to JRimum Community
Olá Romulo! Já encaminhei ao seu e-mail a classe com o método.

É sempre um prazer poder colaborar com a comunidade (mesmo com uma
colaboração tão pequena como a minha =] )

Abraço!

Gilmar P.S.L.

unread,
Jan 27, 2011, 12:17:03 PM1/27/11
to jrimum-c...@googlegroups.com
Blz Cezar,

Vamos adicionar ao código logo!

Contribuição não tem tamanho! :-)

Grande abraço e parabéns.
------------------------------------------------------
Gilmar P.S.L.



2011/1/27 Cezar Augustus (Tropeço) <cezar....@gmail.com>

Abraço!

Reply all
Reply to author
Forward
0 new messages