Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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");
        }