public string Generate(Trade trade)
        {
            var document = new PdfDocument();
            var page = document.AddPage();
            page.Size = PageSize;
            var gfx = XGraphics.FromPdfPage(page);

            GenerateHeader(gfx);
            GenerateBody(gfx, trade);
            GenerateConditions(gfx);
            GenerateSignatureFields(gfx, trade);
            GenerateReferenceId(gfx, trade);

            var filename = @"test_" + trade.CreatedAt.ToString(DateFormat) + ".pdf";
            document.Save(filename);
            return filename;
        }
        private static void GenerateBody(XGraphics gfx, Trade trade)
        {
            var tf = CreateTextFormatter(gfx);
            tf.DrawString(@"Contract ID:
            Date:

            Buyer:
            Seller:

            Price:
            Notes:", Font, TextBrush, BodyRectLeft, XStringFormats.TopLeft);

            var font = Font;
            var rect = BodyRectRight;
            CheckWidth(gfx, font, rect, trade.Buyer.CompanyName + "/" + trade.Buyer.FullName);
            CheckWidth(gfx, font, rect, trade.Seller.CompanyName + "/" + trade.Seller.FullName);

            tf.DrawString(string.Format("{0}\n{1}\n\n{2}\n{3}\n\n{4}\n{5}",
                trade.TradeIdDisplay,
                trade.CreatedAt.ToString(DateFormat),
                trade.Buyer.CompanyName + "/" + trade.Buyer.FullName,
                trade.Seller.CompanyName + "/" + trade.Seller.FullName,
                "$150",
                "Candy tastes good."), font, TextBrush, rect, XStringFormats.TopLeft);
        }
        private static void GenerateSignatureFields(XGraphics gfx, Trade trade)
        {
            var color = XPens.Black;
            const int x1 = Margin;
            var x2 = x1 + Width;
            var tf = CreateTextFormatter(gfx);

            AddSignatureField(gfx, tf, color, trade.Buyer.CompanyName, x1, x2, SignatureY[Signee.Buyer]);
            AddSignatureField(gfx, tf, color, trade.Seller.CompanyName, x1, x2, SignatureY[Signee.Seller]);
            AddSignatureField(gfx, tf, color, "Acme, LLC", x1, x2, SignatureY[Signee.Admin]);
        }
 private static void GenerateReferenceId(XGraphics gfx, Trade trade)
 {
     var text = "Reference ID: " + trade.TradeId.ToString().ToUpper();
     var tf = CreateTextFormatter(gfx);
     tf.DrawString(
         text,
         ConditionsFont,
         TextBrush,
         new XRect(PageWidth - Margin - gfx.MeasureString(text, ConditionsFont).Width, PageSizeConverter.ToSize(PageSize).Height - Margin - ConditionsFont.GetHeight(), Width, ConditionsFont.GetHeight()),
         XStringFormats.TopLeft);
 }