Boa tarde!
Estou tendo algumas dificuldades em gerar boletos com o JBoleto.
Minha duvida é a seguinte:
Preciso gerar um arquivo com 6 seis boletos diferentes, mas qnd coloco dentro do loop só aparece o ultimo boleto que está no banco de dados, segue o código abaixo:
publicvoidprocessarBoleto(StringidAluno){// Buscando dados do lancamentoResultSetrs;Stringsql;JBoletojBoleto;JBoletoBeanjBoletoBean;try{sql="SELECT * FROM view_lancamentos WHERE aluno='"+idAluno+"'";rs=this.stm.executeQuery(sql);rs.next();do{jBoletoBean=newJBoletoBean();jBoletoBean.setDataDocumento(rs.getString("data_processamento"));jBoletoBean.setDataProcessamento(rs.getString("data_processamento"));jBoletoBean.setCedente("ESCOLA SANTA TERESINHA");jBoletoBean.setNomeSacado("Teste");jBoletoBean.setEnderecoSacado("Rua teste");jBoletoBean.setBairroSacado("XXXX");jBoletoBean.setCidadeSacado("Rio de Janeiro");jBoletoBean.setUfSacado("RJ");jBoletoBean.setCepSacado("22753-501");jBoletoBean.setCpfSacado("[telefone removido]");jBoletoBean.setCarteira("57");jBoletoBean.setLocalPagamento("ATE O VENCIMENTO, PREFERENCIALMENTE NO BANCO REAL ABN AMRO");jBoletoBean.setLocalPagamento2("APOS O VENCIMENTO, SOMENTE NO BANCO REAL ABN AMRO");Vectordescricoes=newVector();descricoes.add("Hospedagem I - teste descricao1 - R$ 39,90");descricoes.add("Manutencao - teste ricao2 - R$ 32,90");descricoes.add("Sistema - teste ssssde descricao3 - R$ 45,90");descricoes.add("Extra - teste de descricao4 - R$ 78,90");jBoletoBean.setDescricoes(descricoes);jBoletoBean.setInstrucao1("APOS O VENCIMENTO COBRAR MULTA DE 2%");jBoletoBean.setInstrucao2("APOS O VENCIMENTO COBRAR R$ 0,50 POR DIA DE ATRASO");jBoletoBean.setInstrucao3("Inclusao de mais uma linha");jBoletoBean.setInstrucao4("");jBoletoBean.setAgencia("0611");jBoletoBean.setContaCorrente("7709948");jBoletoBean.setDvContaCorrente("5");jBoletoBean.setNossoNumero(rs.getString("nosso_numero"),13);jBoletoBean.setNoDocumento(rs.getString("lancamento"));jBoletoBean.setValorBoleto(rs.getString("valor"));jBoletoBean.setDataVencimento(rs.getString("vencimento"));Generatorgenerator=newPDFGenerator(jBoletoBean,JBoleto.BANCO_REAL);jBoleto=newJBoleto(generator,jBoletoBean,JBoleto.BANCO_REAL);jBoleto.addBoleto();}while(rs.next());jBoleto.closeBoleto("real.pdf");rs.close();}catch(SQLExceptione){e.printStackTrace();}}
Gera o boleto certinho, mas somente o ultimo do banco de dados, não entendi pq isso acontece, o lógico seria qnd chamasse a função addBoleto(); ele adicione-se uma página na geração do PDF, alguém pode me dar uma luz?
Boa tarde!
Estou tendo algumas dificuldades em gerar boletos com o JBoleto.
Minha duvida é a seguinte:
Preciso gerar um arquivo com 6 seis boletos diferentes, mas qnd coloco dentro do loop só aparece o ultimo boleto que está no banco de dados, segue o código abaixo:
publicvoidprocessarBoleto(StringidAluno){// Buscando dados do lancamentoResultSetrs;Stringsql;JBoletojBoleto;JBoletoBeanjBoletoBean;try{sql="SELECT * FROM view_lancamentos WHERE aluno='"+idAluno+"'";rs=this.stm.executeQuery(sql);rs.next();do{jBoletoBean=newJBoletoBean();jBoletoBean.setDataDocumento(rs.getString("data_processamento"));jBoletoBean.setDataProcessamento(rs.getString("data_processamento"));jBoletoBean.setCedente("ESCOLA SANTA TERESINHA");jBoletoBean.setNomeSacado("Teste");jBoletoBean.setEnderecoSacado("Rua teste");jBoletoBean.setBairroSacado("XXXX");jBoletoBean.setCidadeSacado("Rio de Janeiro");jBoletoBean.setUfSacado("RJ");jBoletoBean.setCepSacado("22753-501");jBoletoBean.setCpfSacado("[telefone removido]");jBoletoBean.setCarteira("57");jBoletoBean.setLocalPagamento("ATE O VENCIMENTO, PREFERENCIALMENTE NO BANCO REAL ABN AMRO");jBoletoBean.setLocalPagamento2("APOS O VENCIMENTO, SOMENTE NO BANCO REAL ABN AMRO");Vectordescricoes=newVector();descricoes.add("Hospedagem I - teste descricao1 - R$ 39,90");descricoes.add("Manutencao - teste ricao2 - R$ 32,90");descricoes.add("Sistema - teste ssssde descricao3 - R$ 45,90");descricoes.add("Extra - teste de descricao4 - R$ 78,90");jBoletoBean.setDescricoes(descricoes);jBoletoBean.setInstrucao1("APOS O VENCIMENTO COBRAR MULTA DE 2%");jBoletoBean.setInstrucao2("APOS O VENCIMENTO COBRAR R$ 0,50 POR DIA DE ATRASO");jBoletoBean.setInstrucao3("Inclusao de mais uma linha");jBoletoBean.setInstrucao4("");jBoletoBean.setAgencia("0611");jBoletoBean.setContaCorrente("7709948");jBoletoBean.setDvContaCorrente("5");jBoletoBean.setNossoNumero(rs.getString("nosso_numero"),13);jBoletoBean.setNoDocumento(rs.getString("lancamento"));jBoletoBean.setValorBoleto(rs.getString("valor"));jBoletoBean.setDataVencimento(rs.getString("vencimento"));Generatorgenerator=newPDFGenerator(jBoletoBean,JBoleto.BANCO_REAL);jBoleto=newJBoleto(generator,jBoletoBean,JBoleto.BANCO_REAL);jBoleto.addBoleto();}while(rs.next());jBoleto.closeBoleto("real.pdf");rs.close();}catch(SQLExceptione){e.printStackTrace();}}
Gera o boleto certinho, mas somente o ultimo do banco de dados, não entendi pq isso acontece, o lógico seria qnd chamasse a função addBoleto(); ele adicione-se uma página na geração do PDF, alguém pode me dar uma luz?
você não teria que fazer:
while(rs.hasNext());osinvésdewhile(rs.next());
?
se bem me lembro rs.next() ele vai iterando o seu resultSet… a não ser que seja diferente para essa biblioteca.
N
nielsonrocha
ok, vou testar aki pra ver se dá certo. valeu! volto pra confirmar com vc!
se eu colocar assim vai gerar vários arquivos real.pdf, ele vai sobrepor e vai gerar somente o ultimo boleto. lembrando que o meu loop é do-while não somente while, pq eu preciso que ele seja executado pelo menos uma vez. mas vou mudar o metedo next() por hasNext(); pra ver se muda alguma coisa.
fabianofrizzo
Olha nunca mexi com o JBoleto
Mas achei a linha 51 meio estranha… Olha bem a cada vc da um new em jBoleto certo…
Intão isso não estaria destruindo a instancia anterior
N
nielsonrocha
Acredito que pode ser isto tb o problema… acho até q seria exatamente isso o problema, a cada boleto eu estaria destruindo uma instancia anterior realmente, mas então como eu faria pra gerar os boletos em sequencia? eu estou começando agora em java, sou programador PHP(Avançado), estou migrando o meu sistema academico q desenvolvi para java, a não ser que o metodo addBoleto(); adiciona um objeto por intancia, pq eu pensei q seria assim: a cada instancia ele geraria uma página com os dados que eu acabara de setar, então akela página ficaria guardada e a cada nova instancia ele geraria uma página, mas vejo que não é isso que acontece… vc poderia me dar uma luz de como fazer isso?
fabianofrizzo
Olha como eu disse nunca utilizei o JBoleto mas dei uma olhada rapida na documentação…
Acho que vc pode fazer isso só usando o Generator dele…
Mas vamos esperar alguém que ja usou dar mais dicas
N
nielsonrocha
RESOLVIDO!
É o seguinte... estive olhando a versão antiga do JBoleto a 0.9.7 e nela os metodos são diferente para geração de boletos, então adaptei para a versão anterior e deu certo do jeito q eu imaginava! realmente o problema era a instancia dos objetos! na versão anterior eu não preciso criar uma nova instancia da classe boleto toda vez q for gerar um novo boleto. na versão nova fica amarrado a vc colocar uma nova instancia. fica assim o código:
publicvoidprocessarBoleto(StringidAluno){// Buscando dados do lancamentoResultSetrs;Stringsql;JBoletojBoleto;JBoletoBeanjBoletoBean;try{sql="SELECT * FROM view_lancamentos WHERE matricula='"+idAluno+"'";rs=this.stm.executeQuery(sql);jBoleto=newJBoleto();// Instancio aqui a classe não dentro do loop!rs.next();do{jBoletoBean=newJBoletoBean();jBoletoBean.setDataDocumento(rs.getString("data_documento"));jBoletoBean.setDataProcessamento(rs.getString("data_processamento"));jBoletoBean.setCedente("ESCOLA SANTA TERESINHA");jBoletoBean.setNomeSacado("Teste");jBoletoBean.setEnderecoSacado("Rua teste");jBoletoBean.setBairroSacado("XXXX");jBoletoBean.setCidadeSacado("Rio de Janeiro");jBoletoBean.setUfSacado("RJ");jBoletoBean.setCepSacado("22753-501");jBoletoBean.setCpfSacado("[telefone removido]");jBoletoBean.setCarteira("57");jBoletoBean.setLocalPagamento("ATE O VENCIMENTO, PREFERENCIALMENTE NO BANCO REAL ABN AMRO");jBoletoBean.setLocalPagamento2("APOS O VENCIMENTO, SOMENTE NO BANCO REAL ABN AMRO");Vectordescricoes=newVector();descricoes.add("Hospedagem I - teste descricao1 - R$ 39,90");descricoes.add("Manutencao - teste ricao2 - R$ 32,90");descricoes.add("Sistema - teste ssssde descricao3 - R$ 45,90");descricoes.add("Extra - teste de descricao4 - R$ 78,90");jBoletoBean.setDescricoes(descricoes);jBoletoBean.setInstrucao1("APOS O VENCIMENTO COBRAR MULTA DE 2%");jBoletoBean.setInstrucao2("APOS O VENCIMENTO COBRAR R$ 0,50 POR DIA DE ATRASO");jBoletoBean.setInstrucao3("Inclusao de mais uma linha");jBoletoBean.setInstrucao4("");jBoletoBean.setAgencia("0611");jBoletoBean.setContaCorrente("7709948");jBoletoBean.setDvContaCorrente("5");jBoletoBean.setNossoNumero(rs.getString("nosso_numero"),13);jBoletoBean.setNoDocumento(rs.getString("lancamento"));jBoletoBean.setValorBoleto(rs.getString("valor"));jBoletoBean.setDataVencimento(rs.getString("vencimento"));jBoleto.addBoleto(jBoletoBean,JBoleto.BANCO_REAL);}while(rs.next());jBoleto.writeToFile("real.pdf");rs.close();}catch(SQLExceptione){e.printStackTrace();}}
Valeu até a próxima!
Marky.Vasconcelos
Eu nunca usei o JBoleto mas estou com uma duvida… ele cria o arquivo para transferencia no Banco também?
N
nielsonrocha
Caro Mark_Ameba, o JBoleto só gera boletos, ele não gera arquivos remessa para bancos, mas no site da FERBRABAN vc pode ver vários layouts tanto para gerar arquivos remessa como para leitura de arquivos retornos, tenho pronto em PHP leitura de retorno do Banco Real, Banco do Brasil, Caixa… pra adpatar pra JAVA é fácil, é só saber a posição de cada campo. VALEU!
Marky.Vasconcelos
Voce pode me passar do Banco Real?
Eu vou ver e implementar um paro o itau também.
N
nielsonrocha
Cara vou te passar as posições de cada campo do banco real, pelo menos as que eu uso para dar baixa nos boletos gerados pelo meu sistema, eu só preciso de três campos: