Criando seus próprios Boletos Bancários com JBoleto

JBoletoVeja como é fácil criar os seus próprios boletos de cobrança, sem complicações.

Este artigo é voltado para programadores Java que pretendem incluir o recurso de gerar boletos bancários dentro do seu sistema proprietário. Este artigo irá introduzir o desenvolvedor a criar um pequeno código que o ajudará a criar boletos de cobrança. Boa parte dos programadores passam pelo menos uma vez em sua carreira com a terrível tarefa de fazer o seu sistema gerar boletos bancários.

A inclusão de um sistema de emissão, envio e impressão de boleto de cobrança em um sistema interno de uma empresa é fundamental e requer um trabalhoso levantamento de dados para para gerar alguns campos (código de barras e a linha digitável por ex.), ainda mais se o sistema tiver que ter a opção de gerar boletos de cobrança para mais de um banco, pois cada banco tem uma forma de trabalhar diferente com esses números.

Introdução
O sistema de boleto bancário é indispensável para qualquer atividade comercial. O pagamento via boleto é muito prático e seguro para o consumidor e pouco oneroso para o empresário, se comparado ao cartão de crédito que tem uma taxa de juros muito maior, pois no boleto bancário é cobrado uma taxa fixa para cada boleto, esta taxa é negociada com o gerente do seu banco, a média desta taxa é mais ou menos de R$ 2,50, enquanto o cartão de crédito é uma porcentagem em cima do valor cobrado.

Para este artigo usaremos um componente OpenSouce feito em Java para geração de boletos bancários.
O JBoleto é um excelente componente de fácil instalação e utilização, bastando incluir no CLASSPATH do projeto que em poucos minutos, você estará gerando os seus boletos de cobrança.

Além disso o programador poderá contar com o suporte oferecido pelo próprio site do JBoleto (www.jboleto.org), onde você poderá encontrar manuais e enviar e-mails diretamente para o criador do projeto (eu mesmo).
O artigo foi desenvolvido utilizando as seguintes recursos:
Java SE 6
Componente JBoleto
iText

Obtendo a biblioteca JBoleto
A biblioteca Jboleto é a responsável por realizar todas lógicas para se gerar um boleto de cobrança.
Para obter o pacote da biblioteca JBoleto basta baixar o pacote no seguinte link http://jboleto.org/arquivos/jboleto.jar. Salve o arquivo dentro da pasta CLASSPATH do Java.

Obtendo a biblioteca iText
A biblioteca iText é a responsável por gerar os boletos de cobrança no formato PDF da Adobe.
Para obter o pacote da biblioteca iText basta acessar o site http://www.lowagie.com/iText/download.html e baixar o arquivo itext-2.0.4.jar e salva-lo na mesma pasta onde foi salvo o Jboleto.

Código da aplicação:


package boleto;

import org.jboleto.JBoleto;
import org.jboleto.JBoletoBean;
import org.jboleto.control.Generator;
import org.jboleto.control.PDFGenerator;
import org.junit.Assert;
import org.junit.Test;

public class GeraBoletoItau {

    public static void main (String args[]) {

        try {

            JBoletoBean jBoletoBean = new JBoletoBean();

            jBoletoBean.setDataDocumento("05/07/2009");
            jBoletoBean.setDataProcessamento("05/07/2009");

            jBoletoBean.setCedente("Notícias Geek");

            jBoletoBean.setNomeSacado("Fabio Souza");
            jBoletoBean.setEnderecoSacado("Rua Geek 010101");
            jBoletoBean.setBairroSacado("Freguesia");
            jBoletoBean.setCidadeSacado("Rio de Janeiro");
            jBoletoBean.setUfSacado("RJ");
            jBoletoBean.setCepSacado("22750-000");
            jBoletoBean.setCpfSacado("00000000000");

            jBoletoBean.setImagemMarketing("original_template_logo.gif");

            jBoletoBean.setDataVencimento("10/08/2009");
            jBoletoBean.setInstrucao1("APOS O VENCIMENTO COBRAR MULTA DE 2%");
            jBoletoBean.setInstrucao2("APOS O VENCIMENTO COBRAR R$ 0,50 POR DIA DE ATRASO");
            jBoletoBean.setInstrucao3("");
            jBoletoBean.setInstrucao4("");

            jBoletoBean.setCarteira("175");
            jBoletoBean.setAgencia("2971");
            jBoletoBean.setContaCorrente("08690");
            jBoletoBean.setDvContaCorrente("1");

            jBoletoBean.setNossoNumero("34556",8);
            jBoletoBean.setNoDocumento("34556");
            jBoletoBean.setValorBoleto("300.00");

            Generator generator = new PDFGenerator(jBoletoBean, JBoleto.ITAU);
            JBoleto jBoleto = new JBoleto(generator, jBoletoBean, JBoleto.ITAU);

            jBoleto.addBoleto();
            jBoleto.closeBoleto("itau.pdf");
        }
        catch (Exception ex) {

            ex.printStackTrace();
        }
    }
}

Considerações Finais
Após o término deste artigo, o programa deve ser capaz de gerar um boleto de cobrança do banco Itaú no formato PDF.
Claro que o nosso pequeno programa, não é para fazer um controle total de boletos, e sim para dar uma idéia do que se pode fazer com o componente.

Até a próxima matéria.

Tags: , , , , ,

19 Comentários

  1. Olá Fábio!
    Parabéns pelo artigo!

    Estou com o seguinte problema. Se puder me ajudar…
    Obtive esse erro ao executar sua classe.

    com.lowagie.text.exceptions.IllegalPdfSyntaxException: Unbalanced begin/end text operators.
    at com.lowagie.text.pdf.PdfContentByte.beginText(Unknown Source)
    at org.jboleto.control.PDFGenerator.addBoleto(PDFGenerator.java:169)
    at org.jboleto.JBoleto.addBoleto(JBoleto.java:110)
    at GeraBoletoItau.main(GeraBoletoItau.java:47)
    com.lowagie.text.exceptions.IllegalPdfSyntaxException: Unbalanced begin/end text operators.
    at com.lowagie.text.pdf.PdfContentByte.sanityCheck(Unknown Source)
    at com.lowagie.text.pdf.PdfContentByte.reset(Unknown Source)
    at com.lowagie.text.pdf.PdfContentByte.reset(Unknown Source)
    at com.lowagie.text.pdf.PdfWriter.resetContent(Unknown Source)
    at com.lowagie.text.pdf.PdfDocument.initPage(Unknown Source)
    at com.lowagie.text.pdf.PdfDocument.newPage(Unknown Source)
    at com.lowagie.text.pdf.PdfDocument.close(Unknown Source)
    at com.lowagie.text.Document.close(Unknown Source)
    at org.jboleto.control.PDFGenerator.closeBoleto(PDFGenerator.java:323)
    at org.jboleto.JBoleto.closeBoleto(JBoleto.java:120)
    at GeraBoletoItau.main(GeraBoletoItau.java:48)

  2. Olá Fábio!
    Descobri o que era… Era a versão do iText…
    Mesmo assim obrigado! :-)

  3. Opa, desculpe a demora, que bom que descobriu rápido também :)
    Em breve estarei incluindo uma série de tutoriais legais usando boletos e arquivos de remessa.

  4. Olá Fábio,

    Muito interessante seu projeto, eu baixei os pacotes e fiz a instalação como em seu tutorial no jboleto.org., só que tem um probleminha que ainda não resolvi.

    A pagina de geração do boleto faz request para gerar o boleto, porém o boleto nao é gerado. Será que é apenas um problema de permissão?

    Dá um toque aí …

    Abraço

  5. Olá pessoal, estou mando este para dizer que o link para a realização do download do arquivo Jboleto.jar esta quebrado,(http://jboleto.org/arquivos/jboleto.jar) estou precisando urgentemente desse arquivo para fazer a impressão de boletos da empresa onde trabalho, se for possível vcs me enviar via e-mail esse arquivo ficaria grato.
    Desde já agradeço.

    fabricio

  6. awmaximus achei legal que resolveu seu problema !! mas posta ai qual a biblioteca que uso!! estou com o mesmo problema!!
    valeu

  7. Boa tarde galera, blz ?

    Após gerar o boleto….como que eu faço para verificar se ele foi pago ? Obrigado.

  8. Olá amigo! Quando mando executar essa classe para gerar o boleto dá o seguinte erro:

    java.io.FileNotFoundException: D:\nf_desktop\original_template_logo.gif (O sistema não pode encontrar o arquivo especificado)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(FileInputStream.java:106)
    at java.io.FileInputStream.(FileInputStream.java:66)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
    at java.net.URL.openStream(URL.java:1009)
    at com.lowagie.text.Image.getInstance(Image.java:370)
    at com.lowagie.text.Image.getInstance(Image.java:689)
    at org.jboleto.control.PDFGenerator.(PDFGenerator.java:102)
    at boleto.GeraBoleto.main(GeraBoleto.java:47)
    java.lang.NullPointerException
    at com.lowagie.text.pdf.PdfContentByte.addImage(PdfContentByte.java:972)
    at org.jboleto.control.PDFGenerator.addBoleto(PDFGenerator.java:126)
    at org.jboleto.JBoleto.addBoleto(JBoleto.java:110)
    at boleto.GeraBoleto.main(GeraBoleto.java:50)
    ExceptionConverter: java.io.IOException: The document has no pages.
    at com.lowagie.text.pdf.PdfPages.writePageTree(PdfPages.java:119)
    at com.lowagie.text.pdf.PdfWriter.close(PdfWriter.java:1233)
    at com.lowagie.text.pdf.PdfDocument.close(PdfDocument.java:942)
    at com.lowagie.text.Document.close(Document.java:520)
    at org.jboleto.control.PDFGenerator.closeBoleto(PDFGenerator.java:323)
    at org.jboleto.JBoleto.closeBoleto(JBoleto.java:120)
    at boleto.GeraBoleto.main(GeraBoleto.java:51)

  9. Deve estar setado o método para poder colocar uma imagem na parte superior do boleto. Veja no código e retire esta linha.

  10. Olá, Fábio. Voce saberia me dizer como é gerado o digito verificador do ‘nosso número’ ?

  11. O digito verificador é gerado a partir da própria biblioteca, você só precisa passar o número normal sem digito.

  12. Só pra constar para quem ainda estiver procurando solução, eu estava com o mesmo problema do “awmaximus”(com.lowagie.text.exceptions.IllegalPdfSyntaxException: Unbalanced begin/end text operators.) , para resolver tive que setar o método descricao (jBoletoBean.setDescricoes(new Vector());) e pronto.

    awmaximus
    08/07/2009 • 1:45 PM

    Olá Fábio!
    Parabéns pelo artigo!

    Estou com o seguinte problema. Se puder me ajudar…
    Obtive esse erro ao executar sua classe.

    com.lowagie.text.exceptions.IllegalPdfSyntaxException: Unbalanced begin/end text operators…

  13. Oi
    Alguem poderia me ajudar.
    Estou tendo problemas com o generator quando eu tento importar ele para o projeto ele nao aparece , estou com a versão (0.9.7).
    Preciso disto para gerar o codigo de barras da conta correto pois ele consegue gerar mas o codigo de barras e sempre o mesmo.

  14. Oi

    Nao sei se o ultim envio foi porque o computador esta travando entao.
    Alguem poderia me ajudar.
    Estou tendo problemas com o generator quando eu tento importar ele para o projeto ele nao aparece , estou com a versão (0.9.7).
    Preciso disto para gerar o codigo de barras da conta correto pois ele consegue gerar mas o codigo de barras e sempre o mesmo.

    PS:acho que o site esta com algum problema , nao consigo localizar nada la dentro pois todos os links dão em propagandas

  15. Oi
    Alguem poderia me ajudar ?
    Sempre que eu altero o Codigo de barras ele retorna ao padrão de
    “35391.30033 49802.000007 00002.730034 8 48920000077400″
    E ao tentar mudar ele retorna ao original.
    Fora isso o generator nao aparece na importação nao sei porque , estou usando a versão 0.9.7 que foi a que achei.
    E por ultimo o site do jboleto é meio confuso se alguem souber como utilizar-lo avise.

  16. Amigos,não consigo baixar o Jboleto.jar acho que o link esta quebrado.
    Se alguem puder me ajudar, desde já obrigado.
    Carlos

  17. A conta aonde hospedava a biblioteca foi retirada do ar. Alguem que tenha a biblioteca poderia fazer a gentileza e enviar o jboleto.jar para algum 4shared e compartilhar com o pessoal ?

  18. o endereço mudou, esta tudo neste novo site
    http://www.jboleto.com.br/blog/

  19. Bom dia!
    Estou tendo problema na geranção de boleto da caixa economica,
    no campo onde vai a carteira eu coloco SR ( sem registro ),porem da o seguinte erro.
    Erro: For imput string: “S”
    obs: esse erro nao ocorre quando coloco numeros

    Alguem pode me ajudar?
    desde ja agradeço.

    Segue o erro que aparece no console…

    java.lang.NumberFormatException: For input string: “S”
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:449)
    at java.lang.Integer.parseInt(Integer.java:499)
    at org.jboleto.JBoletoBean.getDigitoCodigoBarras(JBoletoBean.java:812)
    at org.jboleto.bancos.CaixaEconomica.getCampo4(CaixaEconomica.java:88)
    at org.jboleto.bancos.CaixaEconomica.getCodigoBarras(CaixaEconomica.java:105)
    at org.jboleto.JBoleto.addBoleto(JBoleto.java:96)
    at san.FINANCEIRO.RECEBE.BOLETOS.ProcessaBoleto.boletCaixa_A4(ProcessaBoleto.java:195)
    at san.FINANCEIRO.RECEBE.BOLETOS.DialogoImpressaoBoleto.imprimirA4(DialogoImpressaoBoleto.java:311)
    at san.FINANCEIRO.RECEBE.BOLETOS.DialogoImpressaoBoleto.imprimir(DialogoImpressaoBoleto.java:772)
    at san.FINANCEIRO.RECEBE.BOLETOS.DialogoImpressaoBoleto.jButton1ActionPerformed(DialogoImpressaoBoleto.java:729)
    at san.FINANCEIRO.RECEBE.BOLETOS.DialogoImpressaoBoleto.access$200(DialogoImpressaoBoleto.java:47)

Deixe um comentário