public void Boleto_Caixa() { // Exemplo 100% de acordo com a documentação usando os parametros mínimos // https://github.com/impactro/Boleto-ASP.NET/files/44866/ESPCODBARR_SICOB.pdf // Página 8, item 5.1.1 /* Dados usados para cálculo: * 104 Banco ...............................Posição: 01 - 03 * 9 Moeda ...............................Posição: 04 - 04 * 1099(10/10/2000) Fator de Vencimento .................Posição: 06 - 09 * 160,00 Valor ...............................Posição: 10 - 19 * 9001200200 Nosso Número (sem DV) ...............Posição: 20 - 29 * 001287000000012 Código do Cedente no SICOB(sem DV) ..Posição: 30 - 44 */ // Dados do Recebedor CedenteInfo c = new CedenteInfo() { Banco = "104-0", CodCedente = "001287000000012" }; // Dados do Pagador SacadoInfo s = new SacadoInfo(); // Informações do Boleto BoletoInfo b = new BoletoInfo() { DataVencimento = DateTime.Parse("10/10/2000"), ValorDocumento = 160, NossoNumero = "9001200200" // Exemplo do caso especial onde o Dv dá Zero (caso critico) }; // Cria uma instancia do objeto que calcula e monta um boleto Boleto bol = new Boleto(); // Seta as variáveis (parametros) com os dados do recebedor (c), pagador (s), e as informações do boleto (b) bol.MakeBoleto(c, s, b); // Calcula efetivamente o boleto bol.CalculaBoleto(); // Imprime a linha digitável no console e alguns outros dados para conferencia Console.WriteLine("Linha Digitável: " + bol.LinhaDigitavel); Console.WriteLine("Agência/Conta: " + bol.AgenciaConta); Console.WriteLine("Nosso Número: " + bol.NossoNumeroExibicao); Console.WriteLine("Fator Vencimento: " + CobUtil.CalcFatVenc(bol.DataVencimento)); // De acordo com a página 13 deve gerar exatamente a linha abaixo Assert.IsTrue(bol.LinhaDigitavel == "10499.00127 00200.001287 70000.000128 1 10990000016000"); // Outro exemplo qualquer: b.NossoNumero = "9000003225"; bol.MakeBoleto(c, s, b); // atualizo os dados (não é recomendado, mas para simplificar funciona) bol.CalculaBoleto(); // se não chamar esta rotina, virá comos resultados calculados anteriormente Console.WriteLine("Exemplo Livre: Nosso Número: " + bol.NossoNumeroExibicao); Assert.IsTrue(bol.NossoNumeroExibicao == "9000003225-0"); // no caso o sistema sempre preenche com os digitos zeros a esquerda // Salva a imagem do boleto para conferencia visual bol.Save("boleto.png"); }
void PrintRecibo(BoletoForm oBoletoForm) { Boleto blt = oBoletoForm.Boleto; // Aqui não pode conter o clear por causa da impressão que chama o PreRender() antes if (chkExtra.Checked) { int nTop = !blt.Carne && blt.ExibeReciboSacado ? (chkLogo.Checked ? 120 : 110) + 60 : 105; //int nWidth = blt.Carne ? 169 + 50 : 169; blt.CalculaBoleto(); int nWidth = blt.RenderBoleto.Width; //if (chkMaisEspaco.Checked && blt.ExibeReciboSacado) // nTop += 100; //else if (chkMaisEspaco.Checked) // nTop += 50; // As 2 linhas abaixão, dentro desta logica nção é necessário pois quando se define se será carne ou não é criado o layout devido //if (blt.RenderBoleto == null) // blt.RenderBoleto = new BoletoNormal(); // Verifica se os campos já foram criados // Por padrão são criados por ultimo, dentro do render, mas para customizar precisam ser criados antes // Usando as funções internas direta do boleto não é necessário usar //if (blt.RenderBoleto.Count == -1) // blt.RenderBoleto.MakeFields(blt); // Este metodo já checa se existe um objeto de renderização, chamando CalculaBoleto(), e renderizando os campos baiscos // Isso retorna uma instancia de FieldDraw, onde no maximo é possivel definir apenas uma propriedade na mesma linha FieldDraw f; // Linha 1 f = blt.AddFieldDraw(0, 0 + nTop, null, "COMPROVANTE DE ENTREGA DE BOLETO", nWidth - 40, 7); f.Align = StringAlignment.Center; f.Destaque = true; blt.AddFieldDraw(nWidth - 40, 0 + nTop, "Nota Fiscal", "1234").Destaque = true; // Outra forma mais simples de adicionar elementos // Linha 2 // é possivel adicionar linhas diretamente dentro do render Boleto, desde que se tenha feita as checagens anteriores blt.RenderBoleto.Add(new FieldDraw(0, 7 + nTop, "Cliente (Razão social)", blt.Sacado, nWidth, 7, StringAlignment.Near)); // Na pratica a primeira informação adicionar é sempre bom fazer usando o AddFieldDraw, e depois vocês faz como quiser // Linha 3 blt.RenderBoleto.Add(new FieldDraw(0, 14 + nTop, "Nosso Número", blt.NossoNumeroExibicao, nWidth - 80, 7, StringAlignment.Near)); blt.RenderBoleto.Add(new FieldDraw(nWidth - 80, 14 + nTop, "Data de Vencimento", blt.DataVencimento.ToString("dd/MM/yyyy"), 40, 7, StringAlignment.Center)); blt.RenderBoleto.Add(new FieldDraw(nWidth - 40, 14 + nTop, "Valor do Documento", blt.ValorDocumento.ToString("C"))); // Linha 4 - Usando a inclusão direta, só para definir as principais propriedades blt.AddFieldDraw(0, 22 + nTop, "Identificação e assinatura do recebedor", "", nWidth - 80, 10); blt.AddFieldDraw(nWidth - 80, 22 + nTop, "Documento de Identidade", "", 40, 10); blt.AddFieldDraw(nWidth - 40, 22 + nTop, "Data Recebimento", "", 40, 10); } // Depois de tudo 'desenhado' pode-se alterar algo que foi feito // pois na verdade não foi ainda desenhado, e sim montado um array com o que será desenhado if (chkMaisEspaco.Checked) { // Desde que esteja de fato tudo definido blt.CalculaBoleto(); int nSize = blt.RenderBoleto.Count; bool lAchou = false; for (int n = 0; n < nSize; n++) { // Acha o campo Demostrativo que ocupa 100% do layout if (blt.RenderBoleto.Get(n).Campo == "Demonstrativo") { lAchou = true; blt.RenderBoleto.Get(n).Campo = "Demonstrativo da Cobrança"; // Personaliza o texto blt.RenderBoleto.Get(n).Height += 50; } else if (lAchou) { // Desloca tudo adiante em 50 pixel para baixo blt.RenderBoleto.Get(n).Y += 50; } } // A logica para aumentar o campo de isntrução é quase a mesma lAchou = false; bool lAchouFim = false; for (int n = 0; n < nSize; n++) { // O que muda é que o campo não tem todo o tamnho do layout então os campos laterais não podem ser empurrados para baixo if (blt.RenderBoleto.Get(n).Campo == BoletoTextos.Instrucoes) { lAchou = true; blt.RenderBoleto.Get(n).Campo = "Instruções para Pagamento"; // Personaliza o texto blt.RenderBoleto.Get(n).Height += 50; } else if (lAchouFim) { // Desloca tudo adiante em 50 pixel para baixo blt.RenderBoleto.Get(n).Y += 50; } else if (lAchou) { // os campos são inserido em ordem sequencial // então depois de adicionar os elementos laterais, o restante tem que ser deslocado lAchouFim = blt.RenderBoleto.Get(n).X == 0; if (lAchouFim) { blt.RenderBoleto.Get(n).Y += 50; blt.RenderBoleto.Get(n - 1).Height += 50; // Aumenta o taamnho do campo anterior } } } } // salva o boleto em uma imagem blt.Save("teste.png"); }