JSP + Jboleto - Problema na implementação do código de barra

[code]<%@ page import=“java.io.OutputStream” %>
<%@ page import=“java.util.Vector” %>
<%@ page import=“org.jboleto.Banco” %>
<%@ page import=“org.jboleto.JBoletoBean” %>
<%@ page import=“org.jboleto.bancos.BancoBrasil” %>
<%@ page import=“org.jboleto.control.HtmlGenerator” %>
<%@ page import=“org.jboleto.*” %>

<%

    JBoletoBean jBoletoBean = new JBoletoBean();

    jBoletoBean.setDataDocumento("01/03/2009");
    jBoletoBean.setDataProcessamento("19/03/2009");
    jBoletoBean.setEspecieDocumento("DM");


    jBoletoBean.setCedente("JV FERRAMENTARIA LTDA ME");

    jBoletoBean.setNomeSacado("BRAME AUTOMACAO");
    jBoletoBean.setEnderecoSacado("Rod. SC 401, KM CELTA SL. 3.12 ");
    jBoletoBean.setBairroSacado("João Paulo");
    jBoletoBean.setCidadeSacado("Santa Catarina");
    jBoletoBean.setUfSacado("SC");
    jBoletoBean.setCepSacado("88030-000");
    jBoletoBean.setCpfSacado("03.288.379/001-75");

    jBoletoBean.setLocalPagamento("Pagável em qualquer banco até o vencimento");
    jBoletoBean.setLocalPagamento2("APOS O VENCIMENTO, SOMENTE NO BANCO DO BRASIL");

    Vector descricoes = new Vector();
    jBoletoBean.setDescricoes(descricoes);

    jBoletoBean.setDataVencimento("30/03/2009");
    jBoletoBean.setInstrucao1("COBRAR JUROS DEFINIDO PELO BANCO (FACP)");
    jBoletoBean.setInstrucao2("///ATENCAO/// -> SEGUNDA VOA");
    jBoletoBean.setInstrucao3("PROCEDA OS AJUDOS DE VALORES PERTINENTES");
    jBoletoBean.setInstrucao4("PROTESTO: 02.04.2009. A PARTIR DESSA, CONSULTE BB P/ PGTO");

    jBoletoBean.setCarteira("17");
    jBoletoBean.setAgencia("4464-4");
    jBoletoBean.setAceite("N");
    jBoletoBean.setQtdMoeda("0");

    jBoletoBean.setContaCorrente("16515-8"); //completar com zeros quando necessario
    jBoletoBean.setNoDocumento("239 / 324");

    jBoletoBean.setNumConvenio("1101354");
    jBoletoBean.setNossoNumero("15772100230000027", 18);
    jBoletoBean.setValorBoleto("995,00");

    HtmlGenerator generator = new HtmlGenerator();
    
    OutputStream fos = response.getOutputStream();
    
    Banco b = new BancoBrasil(jBoletoBean);
    
    generator.geraCodBar(fos, b.getCodigoBarras());
    
    generator.addBoleto(jBoletoBean, b);
    
    out.println(generator.toString());[/code]

Esse é meu código de implementação em html, mas não consigo implementar o código de barra! Não sei como implementar o geraCodbar, alguem tem como ajudar?

pavei,

Teve alguma solução?

Estou com o mesmo problema.

Obrigado,

idem…

Pessoal não sei do JBoleto, mas tem o Bopepo do projeto JRimum:

Ele permite personalizar templates PDFs e gerar um boleto, se for o caso.
Você pode usar o OpenOffice para desenhar o boleto e depois exportar para pdf.

Ver tutoriais.

Se precisarem de ajuda e dúvidas no grupo o pessoal te ajuda.

Mais informações sobre o projeto …

T+.

valew gilmatryx … parece interessante… vo da uma olhada, mas no meu caso não convem mudar a API, até pq jah ta praticamente pronto o boleto…

mas valew

Blz aureliolima,

Entendo seu lado. Mas se vc der uma olhada na geração de boleto padrão, essa mudança não deve durar nem 5 min.

E se vc olhar na lista de discussão , vc vai ver que todo mundo sai satisfeito com o resultado e o suporte :smiley:

Vlw.

pessoal, resolvi um dos problemas, pois o cod. de barras q não estava gerando era devido ao campo nosso numero estar com 12 dígitos, pois no algoritmo que fiz para calcular o DV, ele estava colocando um 0 a mais…agora tah gerando certinho…

Mas ainda to com o problema em relação a quando o digito verificador calculado for igual a 10, que segundo o BB deve ser substituído por ‘X’… Se alguem tiver uma solução para isso, agradeceria muito a ajuda…

Flw…

Fala aureliolima, tudo bom cara?

Rapaz, os cinco minutos que o gilmatryx disse que tu ia gastar pode botar na minha conta (ainda sobrou uns dois minutos). Abaixo um código aí pra você com o nosso número com dígito verificador “X” (substituindo o real valor que seria no caso 10, segundo documentação do BB).

O componente Bobepo tá disponível no endereço abaixo.
http://jrimum.nordestefomento.com.br/jrimum/wiki/Projeto/Download

Espero ter ajudado. Qualquer coisa estamos à disposição.
Um abraço.

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;

import br.com.nordestefomento.jrimum.bopepo.BancoSuportado;
import br.com.nordestefomento.jrimum.bopepo.Boleto;
import br.com.nordestefomento.jrimum.bopepo.view.BoletoViewer;
import br.com.nordestefomento.jrimum.domkee.comum.pessoa.endereco.CEP;
import br.com.nordestefomento.jrimum.domkee.comum.pessoa.endereco.Endereco;
import br.com.nordestefomento.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.Banco;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.DadoBancario;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.Pessoa;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.febraban.Agencia;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.febraban.Carteira;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.febraban.Titulo;
import br.com.nordestefomento.jrimum.domkee.financeiro.banco.febraban.Titulo.EnumAceite;

public class MeuPrimeiroBoletoBB {

	public static void main (String[] args) {
		
 		/* 
		 * INFORMANDO DADOS SOBRE O CEDENTE.
		 * */
		Pessoa cedente = new Pessoa("PROJETO JRimum", "00.000.208/0001-00");
		
		// Informando dados sobre a conta bancária do cendente.		
		Banco banco = BancoSuportado.BANCO_DO_BRASIL.create();
		ContaBancaria contaBancariaCed = new ContaBancaria(banco);
		contaBancariaCed.setBanco(banco);
		contaBancariaCed.setNumeroDaConta(new NumeroDaConta(12056, "1"));
		contaBancariaCed.setCarteira(new Carteira(18, TipoDeCobranca.SEM_REGISTRO));
		contaBancariaCed.setAgencia(new Agencia(3520, "3"));
		cedente.addContaBancaria(contaBancariaCed);		
		
		/* 
		 * INFORMANDO DADOS SOBRE O SACADO.
		 * */
		Pessoa sacado = new Pessoa("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 OS DADOS SOBRE O TÍTULO.
		 * */		
		Titulo titulo = new Titulo(contaBancariaCed, sacado, cedente);
		titulo.setNumeroDoDocumento("0001045987");
		//titulo.setNossoNumero("28960690622");
		//titulo.setDigitoDoNossoNumero("8");
		titulo.setNossoNumero("10342029000000148");
		titulo.setDigitoDoNossoNumero("X");
		titulo.setValor(BigDecimal.valueOf(58.95));
		
		titulo.setDataDoDocumento("01/09/2009");
		titulo.setDataDoVencimento("18/09/2009");
		titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
		titulo.setAceite(EnumAceite.N);

		/*
		 * INFORMANDO MAIS DADOS BANCÁRIOS, QUANDO NECESSÁRIO.
		 * Dependendo do banco, talvez seja necessário informar mais dados além de: 
		 * 
		 * > Valor do título; 
		 * > Vencimento; 
		 * > Nosso número; 
		 * > Código do banco 
		 * > Data de vencimento; 
		 * > Agência/Código do cedente; 
		 * > Código da carteira; 
		 * > Código da moeda;
		 * 
		 * Definidos como padrão pela FEBRABAN.
		 * Verifique na documentação.
		 */
		titulo.setDadosBancarios(new DadoBancario(){});
		
		/* 
		 * 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);
	}
	
	
	private static void mostreBoletoNaTela(File arquivoBoleto) {
		
		java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
		try {
			desktop.open(arquivoBoleto);
		} catch (IOException e) {
			e.printStackTrace();
		}	
		
	}
	
}

valew misaelbarreto vou dar uma olhada no source da aplicação… talvez utilize o método para gerar o DV…

abraço…

provavelmente não altererei tudo o q estou usando, pois a servlet q estou usando para controle, já está funcionando certinho… mas com certeza usarei esta api futuramente, até pq ela tem suporte a mais bancos que o JBoleto…

flw

Beleza Aurélio, tranquilo cara.
Precisando aí é só falar.

Um abraço.