Add footer with left and right aligned text on same line

Generate PDF
3/23/2016

Add a footer to a PDF document that has left aligned text with a page number and right aligned text on the same line.

footer-left-right.png

Document pdf = new Document();
Section section = pdf.Sections.Add();

// this bottom margin of the section determines the space available for the footer
section.Margin.Bottom = 100; 
double width = section.PageSize.Width - section.Margin.Left - section.Margin.Right;

// filler text 
for (int i=0; i<100; i++)
{
   TextParagraph text = new TextParagraph();
   text.SpacingAfter = 12;
   section.Paragraphs.Add(text);
   text.Fragments.Add(new Fragment("Generate PDF documents from scratch. Use code, XML/XSL or a combination."));
}

Footer footer = new Footer();
section.Footer = footer;

// the trick to have both left and right aligned
// text on the same line is to use a table
Table table = new Table();

// the footer will be top-aligned so to move it down you need
// to add spacing before the first paragraph of the footer
table.SpacingBefore = 12;
footer.Paragraphs.Add(table);
Row row = table.Rows.Add();

// left text         
Cell leftCell = row.Cells.Add();
leftCell.PreferredWidth = width / 2;
TextParagraph leftText = new TextParagraph();
leftCell.Paragraphs.Add(leftText);
Fragment pageNumber = new Fragment("Page #p");
pageNumber.HasContextFields = true;
leftText.Fragments.Add(pageNumber);

// right text         
Cell rightCell = row.Cells.Add();
rightCell.PreferredWidth = width / 2;
TextParagraph rightText = new TextParagraph();
rightText.HorizontalAlignment = HorizontalAlignment.Right;
rightCell.Paragraphs.Add(rightText);
Fragment title = new Fragment("TallPDF.NET");
rightText.Fragments.Add(title);

string path = "out.pdf";
using (FileStream file = new FileStream(path, FileMode.Create))
{
   pdf.Write(file);
}

System.Diagnostics.Process.Start(path);