Ejemplo n.º 1
0
        private MemoryStream Generate(InvoiceModel invoice)
        {
            try
            {
                var logo = Image.GetInstance(Logo);

                var ms  = new MemoryStream();
                var doc = new Document(PageSize.A4, 40, 40, 40, 40);
                var pdf = new PdfHelper(doc, ms);

                var width   = doc.Right - doc.Left;
                var padding = 5f;

                #region Header

                pdf.AddImage(logo, absoluteX: doc.Left + padding, absoluteY: doc.Top - 65f);
                pdf.Text(Labels.LEGAL_NAME, nameFont: BaseFont.TIMES_BOLD, sizeFont: 18, positionX: width * 0.5f, positionY: doc.Top - (padding * 6), align: Element.ALIGN_CENTER);
                pdf.Text($"CNPJ: {Labels.LEGAL_NUMBER}", nameFont: BaseFont.COURIER_BOLD, sizeFont: 12, positionX: 260f, doc.Top - (padding * 9.5f), align: Element.ALIGN_CENTER);
                pdf.Text(Labels.ADDRESS, nameFont: BaseFont.HELVETICA_BOLDOBLIQUE, sizeFont: 7, positionX: 260f, positionY: doc.Top - (padding * 12), align: Element.ALIGN_CENTER);
                pdf.Text($"CEP: {Labels.CEP} Fone: {Labels.PHONE}", nameFont: BaseFont.HELVETICA_BOLDOBLIQUE, sizeFont: 7, positionX: 260f, positionY: doc.Top - (padding * 14), align: Element.ALIGN_CENTER);

                var collumnAligne = doc.Left + (width * 0.65f) + (padding * 2);
                pdf.Text(Labels.DESCRIPTION.ToUpper(), nameFont: BaseFont.HELVETICA_BOLD, sizeFont: 8, positionX: width * 0.9f, positionY: doc.Top - (padding * 2.5f), align: Element.ALIGN_CENTER);
                pdf.Text($"Emissão Data: {invoice.Date:dd/MM/yyyy}", nameFont: BaseFont.HELVETICA, sizeFont: 8, positionX: collumnAligne, doc.Top - (padding * 5), align: Element.ALIGN_LEFT);
                pdf.Text($"Insc. Municipal N°: {Labels.LEGAL_REGIONAL_NUMBER}", nameFont: BaseFont.HELVETICA, sizeFont: 8, positionX: collumnAligne, doc.Top - (padding * 7), align: Element.ALIGN_LEFT);
                pdf.Text($"Natureza da Operação: Locação de Veículos", nameFont: BaseFont.HELVETICA, sizeFont: 8, positionX: collumnAligne, doc.Top - (padding * 9), align: Element.ALIGN_LEFT);
                pdf.Text($"Série: ÚNICA", nameFont: BaseFont.HELVETICA, sizeFont: 8, positionX: collumnAligne, doc.Top - (padding * 11), align: Element.ALIGN_LEFT);
                pdf.Text($"N°: {invoice.Number.PadLeft(5, '0')}", nameFont: BaseFont.HELVETICA_BOLD, sizeFont: 12, positionX: width * 0.9f, doc.Top - (padding * 14), align: Element.ALIGN_CENTER);

                #endregion Header

                #region Client

                var aligneLeft = doc.Left + 10;
                pdf.Text($"Nome do Sacado: {invoice.Client.Name}", BaseFont.HELVETICA, 10, aligneLeft, doc.Top - 95, align: Element.ALIGN_LEFT);
                pdf.Text($"Endereço: {invoice.Client.Address.Street}, {invoice.Client.Address.Number}", BaseFont.HELVETICA, 10, aligneLeft, doc.Top - 110, align: Element.ALIGN_LEFT);
                pdf.Text($"Município: {invoice.Client.Address.Region}", BaseFont.HELVETICA, 10, aligneLeft, doc.Top - 125, align: Element.ALIGN_LEFT);
                pdf.Text($"Estado: {invoice.Client.Address.State}", BaseFont.HELVETICA, 10, width * 0.55f, doc.Top - 125, align: Element.ALIGN_LEFT);
                pdf.Text($"CEP: {invoice.Client.Address.ZipCode}", BaseFont.HELVETICA, 10, width * 0.75f, doc.Top - 125, align: Element.ALIGN_LEFT);
                pdf.Text($"CNPJ: {invoice.Client.LegalNumber}", BaseFont.HELVETICA, 10, aligneLeft, doc.Top - 140, align: Element.ALIGN_LEFT);
                pdf.Text($"Insc. Municipal N°: {invoice.Client.RegionalLegalNumber}", BaseFont.HELVETICA, 10, width * 0.45f, doc.Top - 140, align: Element.ALIGN_LEFT);

                #endregion Client

                pdf.Text("VALOR REFERENTE POR EXTENSO:", BaseFont.HELVETICA_BOLD, 10, aligneLeft, doc.Top - 162, align: Element.ALIGN_LEFT);
                pdf.BigTextLeftColumn(invoice.Total.DecimalToExtenso(), doc.Left + padding, doc.Top - 230, width, 50f, nameFont: BaseFont.HELVETICA, sizeFont: 10, align: Element.ALIGN_CENTER);

                pdf.BigTextLeftColumn(string.Format(Labels.MESSAGE, Labels.LEGAL_NAME), doc.Left + padding, doc.Top - 275, width, 50f, nameFont: BaseFont.HELVETICA, sizeFont: 12);

                var col1 = doc.Left + (width * 0.25f);
                var col2 = doc.Left + (width * 0.65f);
                var col3 = doc.Left + (width * 0.75f);
                var col4 = doc.Left + (width * 0.9f);

                var header = doc.Top - 280;

                pdf.Text("Item Descrição", BaseFont.HELVETICA_BOLD, 10, col1, header, align: Element.ALIGN_CENTER);
                pdf.Text("Quant", BaseFont.HELVETICA_BOLD, 10, col2, header, align: Element.ALIGN_CENTER);
                pdf.Text("Vl.Unitário", BaseFont.HELVETICA_BOLD, 10, col3, header, align: Element.ALIGN_CENTER);
                pdf.Text("Valor", BaseFont.HELVETICA_BOLD, 10, col4, header, align: Element.ALIGN_CENTER);

                #region Items

                header -= 15;
                foreach (var item in invoice.Products)
                {
                    header -= 15;
                    pdf.Text(item.Description, BaseFont.COURIER, 10, aligneLeft, header, align: Element.ALIGN_LEFT);
                    pdf.Text(item.Quantity.ToString(), BaseFont.HELVETICA, 10, col2, header, align: Element.ALIGN_CENTER);
                    pdf.Text(item.UnitaryValue.FormatMoneyPtBr(), BaseFont.HELVETICA, 10, col3, header, align: Element.ALIGN_CENTER);
                    pdf.Text(item.TotalValue.FormatMoneyPtBr(), BaseFont.HELVETICA, 10, col4, header, align: Element.ALIGN_CENTER);
                }

                #endregion Items

                #region Bancary

                pdf.Text($"Período do Serviço:", BaseFont.COURIER_BOLD, 10, aligneLeft, doc.Bottom + 340, align: Element.ALIGN_LEFT);
                pdf.Text($"{invoice.ServicePeriod}", BaseFont.COURIER_BOLD, 10, aligneLeft + 40, doc.Bottom + 330, align: Element.ALIGN_LEFT);
                pdf.Text($"Dados do Banco", BaseFont.COURIER_BOLD, 10, aligneLeft, doc.Bottom + 320, align: Element.ALIGN_LEFT);
                pdf.Text($"Banco: ITAU", BaseFont.COURIER_BOLD, 10, aligneLeft, doc.Bottom + 310, align: Element.ALIGN_LEFT);
                pdf.Text($"Agência: 6385", BaseFont.COURIER_BOLD, 10, aligneLeft, doc.Bottom + 300, align: Element.ALIGN_LEFT);
                pdf.Text($"Conta Corrente: 56230-8", BaseFont.COURIER_BOLD, 10, aligneLeft, doc.Bottom + 290, align: Element.ALIGN_LEFT);
                pdf.Text($"N° do Empenho: {invoice.Commitment}", BaseFont.COURIER_BOLD, 10, aligneLeft, doc.Bottom + 280, align: Element.ALIGN_LEFT);

                pdf.Text($"Observações:", BaseFont.COURIER_BOLD, 10, doc.Left + (width * 0.45f) + padding, doc.Bottom + 335, align: Element.ALIGN_LEFT);
                pdf.BigTextLeftColumn(invoice.Observation, doc.Left + (width * 0.45f) + padding, doc.Bottom + 265, width * 0.50f, 60f, sizeFont: 10);

                #endregion Bancary

                #region Legal Description

                pdf.Text(Labels.INVOICE_FUNCTION, BaseFont.HELVETICA_BOLD, 15, doc.Left + (width * 0.75f) / 2, doc.Bottom + 220, align: Element.ALIGN_CENTER);
                pdf.Text(Labels.LEGAL_DESCRIPTION, BaseFont.HELVETICA_OBLIQUE, 11, doc.Left + (width * 0.75f) / 2, doc.Bottom + 190, align: Element.ALIGN_CENTER);

                pdf.Text("VALOR TOTAL", BaseFont.HELVETICA_BOLD, 15, doc.Left + (width * 0.875f), doc.Bottom + 220, align: Element.ALIGN_CENTER);
                pdf.Text($"{invoice.Total.FormatMoneyPtBr()}", BaseFont.HELVETICA, 11, doc.Left + (width * 0.875f), doc.Bottom + 190, align: Element.ALIGN_CENTER);

                #endregion Legal Description

                #region Footer

                var line = doc.Bottom + 10;
                collumnAligne = doc.Left + 5;
                pdf.Text($"Recebi(emos) da {Labels.LEGAL_NAME} os serviços constantes nesta", BaseFont.HELVETICA, 15, collumnAligne, line + 95, align: Element.ALIGN_LEFT);
                pdf.Text($"{Labels.DESCRIPTION} - Série ÚNICA N°: {invoice.Number.PadLeft(5, '0')}", BaseFont.HELVETICA, 15, collumnAligne, line + 75, align: Element.ALIGN_LEFT);
                pdf.Text("Data: _____/_____/__________", BaseFont.HELVETICA, 15, pdf.CenterX, line + 40, align: Element.ALIGN_CENTER);
                pdf.Text("Assinatura: _______________________________", BaseFont.HELVETICA, 15, pdf.CenterX, line + 10, align: Element.ALIGN_CENTER);

                #endregion Footer

                #region Rectaggles

                var heigthHeader = 80f;
                pdf.RoundRectangle(xInit: doc.Left, yInit: doc.Top - heigthHeader, width: (width * 0.65f) + padding, height: heigthHeader, radius: 2f);
                pdf.RoundRectangle(xInit: doc.Left + (width * 0.65f) + padding, yInit: doc.Top - heigthHeader, width: (width * 0.35f) - padding, height: heigthHeader, radius: 2f);

                var heigthClient = 65f;
                pdf.RoundRectangle(xInit: doc.Left, yInit: doc.Top - (heigthClient + heigthHeader) - 2, width: width, height: heigthClient, radius: 2f);

                var heigthExtension = 60f;
                pdf.RoundRectangle(xInit: doc.Left, yInit: doc.Top - (heigthClient + heigthHeader + heigthExtension) - 4, width: width, height: heigthExtension, radius: 2f);

                var heigthMessage = 50f;
                pdf.RoundRectangle(xInit: doc.Left, yInit: doc.Top - (heigthClient + heigthHeader + heigthExtension + heigthMessage) - 6, width: width, height: heigthMessage, radius: 2f);

                var heigthItems = 145f;
                pdf.RoundRectangle(xInit: doc.Left, yInit: doc.Top - (heigthClient + heigthHeader + heigthExtension + heigthMessage + heigthItems) - 8, width: width, height: heigthItems, radius: 2f);

                var heigthBancary = 80f;
                pdf.RoundRectangle(xInit: doc.Left, yInit: doc.Bottom + 272, width: width * 0.45f, height: heigthBancary, radius: 2f);
                pdf.RoundRectangle(xInit: doc.Left + (width * 0.45f), yInit: doc.Bottom + 272, width: width * 0.55f, height: heigthBancary, radius: 2f);

                var heigthLegalDescription = 99f;
                pdf.RoundRectangle(xInit: doc.Left, yInit: doc.Bottom + 170, width: width * 0.75f, height: heigthLegalDescription, radius: 2f);
                pdf.RoundRectangle(xInit: width * 0.75f + doc.LeftMargin, yInit: doc.Bottom + 170, width: width * 0.25f, height: heigthLegalDescription, radius: 2f);

                pdf.Line(doc.Bottom + 150);
                pdf.Line(doc.Top - 290);

                pdf.RoundRectangle(xInit: doc.Left, yInit: doc.Bottom, width: width, height: doc.Bottom + 92, radius: 2f);

                #endregion Rectaggles

                doc.Close();
                var msInfo = ms.ToArray();
                ms.Write(msInfo, 0, msInfo.Length);

                ms.Position = 0;
                return(ms);
            }
            catch (InvalidOperationException)
            {
                throw new InvalidOperationException($"");
            }
        }