Criando seus próprios Boletos Bancários com JBoleto
Veja 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.



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)
Olá Fábio!
Descobri o que era… Era a versão do iText…
Mesmo assim obrigado!
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.
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
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
awmaximus achei legal que resolveu seu problema !! mas posta ai qual a biblioteca que uso!! estou com o mesmo problema!!
valeu
Boa tarde galera, blz ?
Após gerar o boleto….como que eu faço para verificar se ele foi pago ? Obrigado.
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)
Deve estar setado o método para poder colocar uma imagem na parte superior do boleto. Veja no código e retire esta linha.
Olá, Fábio. Voce saberia me dizer como é gerado o digito verificador do ‘nosso número’ ?
O digito verificador é gerado a partir da própria biblioteca, você só precisa passar o número normal sem digito.
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…
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.
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
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.
Amigos,não consigo baixar o Jboleto.jar acho que o link esta quebrado.
Se alguem puder me ajudar, desde já obrigado.
Carlos
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 ?
o endereço mudou, esta tudo neste novo site
http://www.jboleto.com.br/blog/
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)