title: Header, footer and large tables with iTextSharp
body: <p>I've added an header and a footer on my document by PdfPageEventHelper.</p>
  
  <p>The document has several "large" tables populated at runtime.</p>
  
  <p>I've tried to add those tables simply by "documen.Add(table)", but my header and my footer results overwritten.</p>
  
  <p>I've already tried both methods to add the tables (WriteSelectedRows and document.Add(myPdfPtable).</p>
  
  <p>Here is the code of the PageEventHelper:</p>
  
  <pre><code>private class MyPageEventHandler : PdfPageEventHelper
  {
          public iTextSharp.text.Image ImageHeader { get; set; }
          public iTextSharp.text.Image ImageFooter { get; set; }
  
          public override void OnEndPage(PdfWriter writer, Document document)
          {
              var fontintestazione = FontFactory.GetFont("Verdana", 10, Font.BOLD, BaseColor.LIGHT_GRAY);
              var fontRight = FontFactory.GetFont("Verdana", 8, Font.BOLD, BaseColor.WHITE);
              var fontFooter = FontFactory.GetFont("Verdana", 6, Font.NORMAL, BaseColor.BLUE);
              float cellHeight = document.TopMargin;
              Rectangle page = document.PageSize;
              PdfPTable head = new PdfPTable(3);
              head.TotalWidth = page.Width;
  
              PdfPCell c = new PdfPCell(ImageHeader, true);
              c.HorizontalAlignment = Element.ALIGN_LEFT;
              c.FixedHeight = cellHeight;
              c.Border = PdfPCell.NO_BORDER;
              head.AddCell(c);
               c = new PdfPCell(new Phrase("somePhrase", fontintestazione));
              c.Border = PdfPCell.NO_BORDER;
              head.AddCell(c);
              c = new PdfPCell(new Phrase("someTextBlah", fontRight));
              c.Border = PdfPCell.NO_BORDER;
              c.HorizontalAlignment = 1;
              c.BackgroundColor = new BaseColor(70, 130, 180);
              head.AddCell(c);
              head.WriteSelectedRows(0, -1, 10, page.Height - cellHeight + head.TotalHeight -30, writer.DirectContent);
  
              PdfPTable footer = new PdfPTable(2);
              footer.TotalWidth = 316f;
              float[] cfWidths = new float[] { 2f, 1f };
              footer.SetWidths(cfWidths);
              PdfPCell cf = new PdfPCell(ImageFooter, true);
              cf.HorizontalAlignment = Element.ALIGN_RIGHT;
              cf.FixedHeight = cellHeight;
              cf.Border = PdfPCell.NO_BORDER;
              footer.AddCell(cf);
              cf = new PdfPCell(new Phrase("someEndingText", fontFooter));
              cf.HorizontalAlignment = Element.ALIGN_LEFT;
              cf.Border = PdfPCell.NO_BORDER;
              footer.AddCell(cf);
              footer.WriteSelectedRows(0, -1, 10, 50, writer.DirectContent);
          }
  </code></pre>
  
  <p>On my page, i simply do:</p>
  
  <pre><code>var document = new Document(PageSize.A4);
  
                  var output = new MemoryStream();
                  var writer = PdfWriter.GetInstance(document, output);
                  iTextSharp.text.Image imageHeader = iTextSharp.text.Image.GetInstance(Server.MapPath("/images/header.ong"));
                  iTextSharp.text.Image imageFooter = iTextSharp.text.Image.GetInstance(Server.MapPath("/images/footer.png"));
                  MyPageEventHandler eve = new MyPageEventHandler
                  {
                      ImageHeader = imageHeader ,
                      ImageFooter = imageFooter
                  };
                  writer.PageEvent = eve;
                  document.Open();
  //adding a table
  PdfPTable cvTable = new PdfPtable(3);
  cvTable.TotalWidth = document.PageSize.Width;
  PdfPCell hCell = new PdfPCell(new Phrase("Jobs By User", aCustomFont));
  cvTable.AddCell(hCell);
  for(int i = 0; i &lt; myTable.Records.Count; i++)
  {
      PdfPCell idCell = new PdfPCell(new Phrase(myTable.Records[i]._id, aFont));
      cvTable.Add(idCell);
      //same stuff for other fields of table
  }
  //first attempt.... failed:
  document.Add(cvTable) //&lt;- header and footer are overwritten by table
  //second attempt..... failed too...
  cvTable.WriteSelectedRows(0, -1, 10, myPoisition, writer.DirectContent);
  //kind of fail...:
  //the table is large and need more pages. It is trunked on the first page and overwrite
  //the footer.
  </code></pre>