Gerar boleto em formato de carnê

Pessoal,

preciso de uma biblioteca para gerar um carnê com boletos em pdf.

Sendo que preciso imprimir 2 por página, orientação paisagem, no formato:

+-----------------------------------------------------------------------------------+
|                                                                                   |
|   +-------------+-------------------------------------------------------------+   |
|   |   recibo    |    banco x               0000000.000000.0000000.0000000     |   |
|   |             |                                                             |   |
|   |             |          restante do boleto com barcode                     |   |
|   |             |                                                             |   |
|   +-------------+-------------------------------------------------------------+   |
|   +-------------+-------------------------------------------------------------+   |
|   |   recibo    |    banco x               0000000.000000.0000000.0000000     |   |
|   |             |                                                             |   |
|   |             |          restante do boleto com barcode                     |   |
|   |             |                                                             |   |
|   +-------------+-------------------------------------------------------------+   |
|                                                                                   |
+-----------------------------------------------------------------------------------+

Me passaram o jboleto. alguém sabe como fazer ele gerar esse formato?

Sabem de outra biblioteca mais facil de fazer isso?

Abraços


O codigo do jBoleto é aberto e pode ser alterado da forma que vc precisa. acho que é mais facil do que fazer um do zero ja que existem uma série de validações, geração de codigo de barra, etc que o jboleto ja faz, já ta testado e muita gente já usa.

Cara, para a geração de boletos tem também o Bopepo do projeto JRimum:

Além de gerar um boleto padrão sem esforço algum…

Se vc quiser personalizar o boleto, ele permite personalização através de templates PDFs.
Você pode usar o OpenOffice para desenhar o boleto e depois exportar para pdf. É simples.

Veja algumas threads a respeito: Layout estilo carnê | Boleto Caixa SIGCB (Estilo Carnê)

Ver tutoriais.

A versão mais atual é a:

http://jrimum-community.googlegroups.com/web/JRimum-Bopepo-SNAPSHOT-20100805.jar

Nessa versão já são suportados 16 bancos, é o mais completo atualmente, estamos só aguardando mais feedback do pessoal para lançar a versão final.

http://www.jrimum.org/bopepo/ticket/47

* #13 - Banco Real
* #14 - Itaú
* #15 - Unibanco
* #17 - Safra
* #18 - Mercantil
* #19 - HSBC
* #20 - BESC
* #21 - Banrisul
* #22 - Nossa Caixa S.A.
* #24 - Banestes
* #25 - BANCO SANTANDER S.A.
* #38 - Banco J. Safra
* #39 - Banco SICREDI
* #40 - CEF
* #48 - Banco Rural
* #56 - Banco Intermedium 

Se precisar de ajuda e tiver dúvidas, chega lá no grupo que o pessoal te ajuda.

Mais informações sobre o andamento do Projeto Bopepo … vc pode ver no Timeline.

Valeu pelas sugestões, mas o problema é que o cliente não aceita que eu modifique bibliotecas de terceiros (estamos em negociação quanto a isso).

Pelo visto, tanto o JBoleto quanto o Bopepo, eu teria que alterar para me atender.

Outra coisa, o banco que preciso é o BNB (004), que nenhum dos 2 possui.

Pelo visto vou ter que ir pro crystal ou jasper.

Caso tenham alguma sugestão, por favor digam.

Muito obrigado.

helders_sa,

Para fazer esse carnê vc não precisa alterar a lib não, vc precisa é passar um arquivo personalizado como parâmetro, ex:

//Informando o template personalizado:
BoletoViewer boletoViewer = new BoletoViewer(boleto, new File("TemplatePersonalizacaoCarne.pdf"));

Vc altera um arquivo ott, odf, etc…, como se mexesse no crystal ou jasper e exporta para pdf uma única vez.

Quanto a implementação do BNB, em um dia o pessoal implementa. É só entrar em contato com o grupo:

http://groups.google.com.br/group/jrimum-community

Complementanto Gilmar, caso vc não queira esperar a gente implementar o BNB, vc mesmo pode extender o componente, basta criar uma classe que implemente a interface CampoLive e passar pro objeto Boleto.

Vídeo de personalização de boletos com Bopepo:

[youtube]http://www.youtube.com/watch?v=0kRa2wprDdQ[/youtube]

Outros tutorias …

http://www.jrimum.org/bopepo/wiki/Componente/Documentacao/Tutoriais

Este vídeo mostra como gerar boletos personalizados através do componente Bopepo do Projeto JRimum. O vídeo foca num dos recursos mais interessantes, que é como adicionar campos dinâmicos, ou seja, campos que podem ter seus valores fornecidos em tempo de execução.

Como a edição do template é a mão-livre, o usuário tem total liberdade para alterar a disposição de informações, adicionar texto, imagens e novos campos, de forma estática ou dinâmica. Com isso é possível também criar outros estilos de boleto, como por exemplo um boleto carnê, envelope, estilo fatura de cartão de crédito etc, adaptando o boleto à sua realidade. Obs: É importante lembrar que alguns regras básicas definidas pela FEBRABAN têm de ser seguidas para que seu boleto possa ser homologado.

A ferramenta utilizada para a edição do template foi o OpenOffice (BR), mas isto não é obrigatório. Você pode usar outras ferramentas que trabalhem com formulários PDF, sem problemas, desde que, ao final do processo seja oferecido um template no formato PDF para o componente.

Mais informações em:
http://www.jrimum.org
http://www.jrimum.org/jrimum/wiki/Projeto/Download
http://www.jrimum.org/bopepo/wiki/Componente/Documentacao

Ferramentas utilizadas:

Eclipse Helios
OpenOffice 3.2 - Writer
JRimum-Bopepo-SNAPSHOT-20101124.jar e suas dependências

Projeto JRimum
Divulgado em 03/12/2010.

[quote=gilmatryx]helders_sa,

Para fazer esse carnê vc não precisa alterar a lib não, vc precisa é passar um arquivo personalizado como parâmetro, ex:

//Informando o template personalizado:
BoletoViewer boletoViewer = new BoletoViewer(boleto, new File("TemplatePersonalizacaoCarne.pdf"));

Vc altera um arquivo ott, odf, etc…, como se mexesse no crystal ou jasper e exporta para pdf uma única vez.

Quanto a implementação do BNB, em um dia o pessoal implementa. É só entrar em contato com o grupo:

http://groups.google.com.br/group/jrimum-community[/quote]

Olá,
montei o ambiente, baixei os .jars necessários, agora preciso do código pronto para mudar os dados para gerar o boleto… Pode me ajudar?

Basta fazer igual a geração de boleto padrão:
http://www.jrimum.org/bopepo/wiki/Componente/Documentacao/Tutoriais/GeracaoDeBoletoPadrao

[code]
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;

import org.jrimum.bopepo.BancosSuportados;
import org.jrimum.bopepo.Boleto;
import org.jrimum.bopepo.view.BoletoViewer;
import org.jrimum.domkee.comum.pessoa.endereco.CEP;
import org.jrimum.domkee.comum.pessoa.endereco.Endereco;
import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa;
import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
import org.jrimum.domkee.financeiro.banco.febraban.Cedente;
import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
import org.jrimum.domkee.financeiro.banco.febraban.Sacado;
import org.jrimum.domkee.financeiro.banco.febraban.SacadorAvalista;
import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo;
import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
import org.jrimum.domkee.financeiro.banco.febraban.Titulo.EnumAceite;

/**

  • Exemplo de código para geração de um boleto simples.

  • Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples.

  • @author Gilmar P.S.L

  • @author Misael Barreto

  • @author Rômulo Augusto

  • @since 0.2

  • @version 0.2
    */
    public class MeuPrimeiroBoleto {

     public static void main(String[] args) {
    
             /*
              * INFORMANDO DADOS SOBRE O CEDENTE.
              */
             Cedente cedente = new Cedente("PROJETO JRimum", "00.000.208/0001-00");
    
             /*
              * INFORMANDO DADOS SOBRE O SACADO.
              */
             Sacado sacado = new Sacado("JavaDeveloper Pronto Para Férias", "222.222.222-22");
    
             // Informando o endereço do sacado.
             Endereco enderecoSac = new Endereco();
             enderecoSac.setUF(UnidadeFederativa.RN);
             enderecoSac.setLocalidade("Natal");
             enderecoSac.setCep(new CEP("59064-120"));
             enderecoSac.setBairro("Grande Centro");
             enderecoSac.setLogradouro("Rua poeta dos programas");
             enderecoSac.setNumero("1");
             sacado.addEndereco(enderecoSac);
    
             /*
              * INFORMANDO DADOS SOBRE O SACADOR AVALISTA.
              */
             SacadorAvalista sacadorAvalista = new SacadorAvalista("JRimum Enterprise", "00.000.000/0001-91");
    
             // Informando o endereço do sacador avalista.
             Endereco enderecoSacAval = new Endereco();
             enderecoSacAval.setUF(UnidadeFederativa.DF);
             enderecoSacAval.setLocalidade("Brasília");
             enderecoSacAval.setCep(new CEP("59000-000"));
             enderecoSacAval.setBairro("Grande Centro");
             enderecoSacAval.setLogradouro("Rua Eternamente Principal");
             enderecoSacAval.setNumero("001");
             sacadorAvalista.addEndereco(enderecoSacAval);
    
             /*
              * INFORMANDO OS DADOS SOBRE O TÍTULO.
              */
             
             // Informando dados sobre a conta bancária do título.
             ContaBancaria contaBancaria = new ContaBancaria(BancosSuportados.BANCO_BRADESCO.create());
             contaBancaria.setNumeroDaConta(new NumeroDaConta(123456, "0"));
             contaBancaria.setCarteira(new Carteira(30));
             contaBancaria.setAgencia(new Agencia(1234, "1"));
             
             Titulo titulo = new Titulo(contaBancaria, sacado, cedente, sacadorAvalista);
             titulo.setNumeroDoDocumento("123456");
             titulo.setNossoNumero("99345678912");
             titulo.setDigitoDoNossoNumero("5");
             titulo.setValor(BigDecimal.valueOf(0.23));
             titulo.setDataDoDocumento(new Date());
             titulo.setDataDoVencimento(new Date());
             titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
             titulo.setAceite(EnumAceite.A);
             titulo.setDesconto(new BigDecimal(0.05));
             titulo.setDeducao(BigDecimal.ZERO);
             titulo.setMora(BigDecimal.ZERO);
             titulo.setAcrecimo(BigDecimal.ZERO);
             titulo.setValorCobrado(BigDecimal.ZERO);
    
             /*
              * INFORMANDO OS DADOS SOBRE O BOLETO.
              */
             Boleto boleto = new Boleto(titulo);
             
             boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em " +
                             "qualquer Banco até o Vencimento.");
             boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor " +
                             "cobrado não é o esperado, aproveite o DESCONTÃO!");
             boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!");
             boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!");
             boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre.");
             boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00");
             boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00");
             boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00");
             boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!");
             boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X.");
    
             /*
              * GERANDO O BOLETO BANCÁRIO.
              */
             // Instanciando um objeto "BoletoViewer", classe responsável pela
             // geração do boleto bancário.
             BoletoViewer boletoViewer = new BoletoViewer(boleto);
    
             // Gerando o arquivo. No caso o arquivo mencionado será salvo na mesma
             // pasta do projeto. Outros exemplos:
             // WINDOWS: boletoViewer.getAsPDF("C:/Temp/MeuBoleto.pdf");
             // LINUX: boletoViewer.getAsPDF("/home/temp/MeuBoleto.pdf");
             File arquivoPdf = boletoViewer.getPdfAsFile("MeuPrimeiroBoleto.pdf");
    
             // Mostrando o boleto gerado na tela.
             mostreBoletoNaTela(arquivoPdf);
     }
    
     /**
      * Exibe o arquivo na tela.
      * 
      * @param arquivoBoleto
      */
     private static void mostreBoletoNaTela(File arquivoBoleto) {
    
             java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
             
             try {
                     desktop.open(arquivoBoleto);
             } catch (IOException e) {
                     e.printStackTrace();
             }
     }
    

}[/code]

Olá, baixei o modelo sugerido, só da erro de compilação porque não consegue encontrar no .jar o

import org.jrimum.bopepo.BancosSuportados;

Será que você pode me passar o .jar correto? Baixe 50 .jars rs e nenhum funcionou/tem essa classe…

[quote=gilmatryx]Basta fazer igual a geração de boleto padrão:
http://www.jrimum.org/bopepo/wiki/Componente/Documentacao/Tutoriais/GeracaoDeBoletoPadrao
[/quote]

Perfeito, estamos avançando rs…

Já tou gerando boleto, só dá erro (mostra numero errado pois estou usando um boleto ja emitido de parametro pra ver se gero um igual) no último bloco:
34191.75009 00079.560645 84738.660004 9 49530000032000

4953 o erro deveria ser
4335.

Percebí que isso é por conta da data de vencimento e do documento há erros do tipo

Exception in thread “main” java.lang.IllegalArgumentException: Para o cálculo do fator de vencimento se faz necessário informar uma data entre 07/10/1997 e 21/02/2025

qdo eu altero…

A data do documento modelo é 18, 6, 2009 (dt do documento) e 20, 8, 2009 (dt do vencimento) mas ele nao aceita!

titulo.setDataDoDocumento(new Date(18, 6, 2009)); titulo.setDataDoVencimento(new Date(20, 8, 2009));

Erro:

Exception in thread "main" java.lang.IllegalArgumentException: Para o cálculo do fator de vencimento se faz necessário informar uma data entre 07/10/1997 e 21/02/2025 at org.jrimum.bopepo.BancoUtil.calculceFatorDeVencimento(BancoUtil.java:150) at org.jrimum.bopepo.CodigoDeBarras.calculateAndSetFatorDeVencimento(CodigoDeBarras.java:285) at org.jrimum.bopepo.CodigoDeBarras.<init>(CodigoDeBarras.java:221) at org.jrimum.bopepo.Boleto.load(Boleto.java:214) at org.jrimum.bopepo.Boleto.<init>(Boleto.java:157) at MeuPrimeiroBoleto.main(MeuPrimeiroBoleto.java:106)

No entanto, se eu deixa só new Date() ele gera só q com o ultimo bloco errado como dito acima…

Resolvido.

Caros senhores, muito obrigado pela ajuda. A solução foi usar uma classe chamada: DDMMYYYY_B usando seu método parse assim fica possível passar
qualquer data. Espero que ajude quem tiver passando por essa dificuldade, tal como sua simplicidade comparando com o Stella Boleto.