private float GenerateSignature(GenerateInvoiceContext request, PdfGenerator pdf, float y)
        {
            y = pdf.IncrementY(y, 55, FOOTER_HEIGHT); //gap to place signature

            pdf.DrawHorizontalLine(15, 85, y, 0.7f, pdf.AccentColor);
            pdf.DrawHorizontalLine(85, 15, y, 0.7f, pdf.AccentColor, null, true);

            y = pdf.IncrementY(y, 2, FOOTER_HEIGHT);
            var result = pdf.AddText("customer", 15, y);

            result = pdf.AddText("business", 15, y, null, null, true);
            y      = result.Bounds.Bottom;
            y      = pdf.IncrementY(y, 0, FOOTER_HEIGHT);

            return(y);
        }
        private float GenerateTermsBody(GenerateInvoiceContext request, PdfGenerator pdf, float y)
        {
            var check = pdf.MeasureTextHeight(request.Invoice.Terms);

            y = pdf.IncrementY(y, 10, FOOTER_HEIGHT, check); //don't split terms over the footer

            PdfLayoutResult result = pdf.AddText(request.Invoice.Terms, 10, y, pdf.NormalFontBold);

            y = result.Bounds.Bottom;
            //NOTE: last item - don't check for increment

            return(y);
        }
        private float GenerateBody(GenerateInvoiceContext request, PdfGenerator pdf, float currentY, bool generateItems)
        {
            float y = currentY;

            y = pdf.IncrementY(y, 10, FOOTER_HEIGHT);
            PdfLayoutResult result = pdf.AddText(request.Invoice.Description, 10, y);

            y = result.Bounds.Bottom;
            y = pdf.IncrementY(y, 0, FOOTER_HEIGHT);

            if (generateItems)
            {
                if (request.SimpleTableItems)
                {
                    y = GenerateItemizedBodyWithLightTable(request, pdf, y);
                }
                else
                {
                    y = GenerateItemizedBodyWithGrid(request, pdf, y);
                }
            }

            return(y);
        }
        private float GenerateBodyHeader(GenerateInvoiceContext request, PdfGenerator pdf)
        {
            PdfLayoutResult result = null;
            float           y      = 10;

            //Add IMAGE
            pdf.AddImage(request.Invoice.Logo, 0, y, request.LogoWidth, request.LogoHeight);

            var   font = pdf.NormalFontBold;
            float x    = request.LogoWidth > 0 ? request.LogoWidth + 10 : 0;

            result = pdf.AddText(request.Invoice.BusinessName, x, y, font);
            result = pdf.AddText(request.Invoice.BusinessInfo, x, result.Bounds.Bottom + 2);
            float businessY = result.Bounds.Bottom + 10;

            string twitterLink = "http://twitter.com/syncfusion";
            string webLink     = "https://www.syncfusion.com/";
            string facebook    = "https://www.facebook.com/Syncfusion";
            string youtube     = "https://www.youtube.com/syncfusioninc";
            string linkedIn    = "https://www.linkedin.com/company/syncfusion?trk=top_nav_home";
            string instagram   = "http://www.instagram.com";

            string[] socialLinks = new string[] { "twitter", "website", "facebook", "youtube", "linkedIn", "instagram" };

            //left align all the social links
            float xOffsetTextSize = pdf.LongestText(socialLinks);

            result = pdf.AddWebLink(webLink, 0, y, "website", null, true, xOffsetTextSize);
            result = pdf.AddWebLink(facebook, 0, result.Bounds.Bottom, "facebook", null, true, xOffsetTextSize);
            result = pdf.AddWebLink(twitterLink, 0, result.Bounds.Bottom, "twitter", null, true, xOffsetTextSize);
            result = pdf.AddWebLink(youtube, 0, result.Bounds.Bottom, "youtube", null, true, xOffsetTextSize);
            result = pdf.AddWebLink(linkedIn, 0, result.Bounds.Bottom, "linkedin", null, true, xOffsetTextSize);
            result = pdf.AddWebLink(instagram, 0, result.Bounds.Bottom, "instagram", null, true, xOffsetTextSize);

            float socialLinksY = result.Bounds.Bottom + 10;
            float imageY       = request.LogoHeight + 15;

            float actualY = Enumerable.Max(new float[] { businessY, socialLinksY, imageY });

            y = actualY;

            string customer = request.Invoice.Customer + Environment.NewLine + request.Invoice.Address;

            result = pdf.AddText(customer, 0, y, font);

            y = result.Bounds.Bottom;
            y = pdf.IncrementY(y, 10, FOOTER_HEIGHT, 30);

            string leftText  = "INVOICE #" + request.Invoice.Number.ToString();
            string rightText = DateTime.Now.ToString("dd MMM yyyy");

            result = pdf.AddRectangleText(leftText, rightText, y, 30);

            y = result.Bounds.Bottom;
            y = pdf.IncrementY(y, 15, FOOTER_HEIGHT);

            //Creates text elements to add the address and draw it to the page.
            result = pdf.AddText(request.Invoice.Heading, 10, y, pdf.SubHeadingFont);
            y      = result.Bounds.Bottom;
            y      = pdf.IncrementY(y, 3, FOOTER_HEIGHT);

            pdf.DrawHorizontalLine(0, pdf.PageWidth, y, 0.7f, pdf.AccentColor);

            y = pdf.IncrementY(y, 1, FOOTER_HEIGHT);

            return(y);
        }