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"); }