Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add Header and Footer for PDF using iTextsharp

How can I add header and footer for each page in the pdf.

Headed will contain just a text Footer will contain a text and pagination for pdf (Page : 1 of 4)

How is this possible ? I tried to add the below line, but header does not show up in pdf.

document.AddHeader("Header", "Header Text"); 

This the code I am using for generation PDF :

   protected void GeneratePDF_Click(object sender, EventArgs e)     {         DataTable dt = getData();               Response.ContentType = "application/pdf";             Response.AddHeader("content-disposition", "attachment;filename=Locations.pdf");             Response.Cache.SetCacheability(HttpCacheability.NoCache);              Document document = new Document();              PdfWriter.GetInstance(document, Response.OutputStream);              document.Open();              iTextSharp.text.Font font5 = iTextSharp.text.FontFactory.GetFont(FontFactory.COURIER , 8);              PdfPTable table = new PdfPTable(dt.Columns.Count);             PdfPRow row = null;             float[] widths = new float[] { 6f, 6f, 2f, 4f, 2f };              table.SetWidths(widths);              table.WidthPercentage = 100;             int iCol = 0;             string colname = "";             PdfPCell cell = new PdfPCell(new Phrase("Locations"));              cell.Colspan = dt.Columns.Count;              foreach (DataColumn c in dt.Columns)             {                  table.AddCell(new Phrase(c.ColumnName, font5));             }              foreach (DataRow r in dt.Rows)             {                 if (dt.Rows.Count > 0)                 {                     table.AddCell(new Phrase(r[0].ToString(), font5));                     table.AddCell(new Phrase(r[1].ToString(), font5));                     table.AddCell(new Phrase(r[2].ToString(), font5));                     table.AddCell(new Phrase(r[3].ToString(), font5));                     table.AddCell(new Phrase(r[4].ToString(), font5));                 }             }             document.Add(table);             document.Close();              Response.Write(document);             Response.End();         }      } 
like image 772
Anuya Avatar asked Sep 25 '13 04:09

Anuya


People also ask

How do I add a footer to a PDF in Java?

Add Header and Footer to PDFUse event class to add header and footer. Using PdfWriter. setPageEvent , we can register our event class. Create a rectangle and set it to PdfWriter using PdfWriter.


1 Answers

As already answered by @Bruno you need to use pageEvents.

Please check out the sample code below:

private void CreatePDF() {     string fileName = string.Empty;         DateTime fileCreationDatetime = DateTime.Now;         fileName = string.Format("{0}.pdf", fileCreationDatetime.ToString(@"yyyyMMdd") + "_" + fileCreationDatetime.ToString(@"HHmmss"));         string pdfPath = Server.MapPath(@"~\PDFs\") +   fileName;      using (FileStream msReport = new FileStream(pdfPath, FileMode.Create))     {         //step 1         using (Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 140f, 10f))         {             try             {                 // step 2                 PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, msReport);                 pdfWriter.PageEvent = new Common.ITextEvents();                  //open the stream                  pdfDoc.Open();                  for (int i = 0; i < 10; i++)                 {                     Paragraph para = new Paragraph("Hello world. Checking Header Footer", new Font(Font.FontFamily.HELVETICA, 22));                         para.Alignment = Element.ALIGN_CENTER;                         pdfDoc.Add(para);                         pdfDoc.NewPage();                 }                  pdfDoc.Close();                 }             catch (Exception ex)             {                 //handle exception             }                 finally             {              }             }         } } 

And create one class file named ITextEvents.cs and add following code:

public class ITextEvents : PdfPageEventHelper {         // This is the contentbyte object of the writer     PdfContentByte cb;      // we will put the final number of pages in a template     PdfTemplate headerTemplate, footerTemplate;      // this is the BaseFont we are going to use for the header / footer     BaseFont bf = null;      // This keeps track of the creation time     DateTime PrintTime = DateTime.Now;          #region Fields     private string _header;     #endregion      #region Properties     public string Header     {         get { return _header; }         set { _header = value; }     }     #endregion          public override void OnOpenDocument(PdfWriter writer, Document document)     {         try         {             PrintTime = DateTime.Now;             bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);             cb = writer.DirectContent;             headerTemplate = cb.CreateTemplate(100, 100);             footerTemplate = cb.CreateTemplate(50, 50);         }         catch (DocumentException de)         {             }         catch (System.IO.IOException ioe)         {             }     }      public override void OnEndPage(iTextSharp.text.pdf.PdfWriter writer, iTextSharp.text.Document document)     {         base.OnEndPage(writer, document);             iTextSharp.text.Font baseFontNormal = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 12f, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLACK);             iTextSharp.text.Font baseFontBig = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 12f, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.BLACK);             Phrase p1Header = new Phrase("Sample Header Here", baseFontNormal);          //Create PdfTable object         PdfPTable pdfTab = new PdfPTable(3);          //We will have to create separate cells to include image logo and 2 separate strings         //Row 1         PdfPCell pdfCell1 = new PdfPCell();         PdfPCell pdfCell2 = new PdfPCell(p1Header);         PdfPCell pdfCell3 = new PdfPCell();         String text = "Page " + writer.PageNumber + " of ";              //Add paging to header         {             cb.BeginText();             cb.SetFontAndSize(bf, 12);             cb.SetTextMatrix(document.PageSize.GetRight(200), document.PageSize.GetTop(45));             cb.ShowText(text);             cb.EndText();             float len = bf.GetWidthPoint(text, 12);             //Adds "12" in Page 1 of 12             cb.AddTemplate(headerTemplate, document.PageSize.GetRight(200) + len, document.PageSize.GetTop(45));         }         //Add paging to footer         {             cb.BeginText();             cb.SetFontAndSize(bf, 12);             cb.SetTextMatrix(document.PageSize.GetRight(180), document.PageSize.GetBottom(30));             cb.ShowText(text);             cb.EndText();             float len = bf.GetWidthPoint(text, 12);             cb.AddTemplate(footerTemplate, document.PageSize.GetRight(180) + len, document.PageSize.GetBottom(30));         }          //Row 2         PdfPCell pdfCell4 = new PdfPCell(new Phrase("Sub Header Description", baseFontNormal));          //Row 3          PdfPCell pdfCell5 = new PdfPCell(new Phrase("Date:" + PrintTime.ToShortDateString(), baseFontBig));         PdfPCell pdfCell6 = new PdfPCell();         PdfPCell pdfCell7 = new PdfPCell(new Phrase("TIME:" + string.Format("{0:t}", DateTime.Now), baseFontBig));              //set the alignment of all three cells and set border to 0         pdfCell1.HorizontalAlignment = Element.ALIGN_CENTER;         pdfCell2.HorizontalAlignment = Element.ALIGN_CENTER;         pdfCell3.HorizontalAlignment = Element.ALIGN_CENTER;         pdfCell4.HorizontalAlignment = Element.ALIGN_CENTER;         pdfCell5.HorizontalAlignment = Element.ALIGN_CENTER;         pdfCell6.HorizontalAlignment = Element.ALIGN_CENTER;         pdfCell7.HorizontalAlignment = Element.ALIGN_CENTER;              pdfCell2.VerticalAlignment = Element.ALIGN_BOTTOM;         pdfCell3.VerticalAlignment = Element.ALIGN_MIDDLE;         pdfCell4.VerticalAlignment = Element.ALIGN_TOP;         pdfCell5.VerticalAlignment = Element.ALIGN_MIDDLE;         pdfCell6.VerticalAlignment = Element.ALIGN_MIDDLE;         pdfCell7.VerticalAlignment = Element.ALIGN_MIDDLE;              pdfCell4.Colspan = 3;            pdfCell1.Border = 0;         pdfCell2.Border = 0;         pdfCell3.Border = 0;         pdfCell4.Border = 0;         pdfCell5.Border = 0;         pdfCell6.Border = 0;         pdfCell7.Border = 0;              //add all three cells into PdfTable         pdfTab.AddCell(pdfCell1);         pdfTab.AddCell(pdfCell2);         pdfTab.AddCell(pdfCell3);         pdfTab.AddCell(pdfCell4);         pdfTab.AddCell(pdfCell5);         pdfTab.AddCell(pdfCell6);         pdfTab.AddCell(pdfCell7);          pdfTab.TotalWidth = document.PageSize.Width - 80f;         pdfTab.WidthPercentage = 70;         //pdfTab.HorizontalAlignment = Element.ALIGN_CENTER;              //call WriteSelectedRows of PdfTable. This writes rows from PdfWriter in PdfTable         //first param is start row. -1 indicates there is no end row and all the rows to be included to write         //Third and fourth param is x and y position to start writing         pdfTab.WriteSelectedRows(0, -1, 40, document.PageSize.Height - 30, writer.DirectContent);         //set pdfContent value          //Move the pointer and draw line to separate header section from rest of page         cb.MoveTo(40, document.PageSize.Height - 100);         cb.LineTo(document.PageSize.Width - 40, document.PageSize.Height - 100);         cb.Stroke();          //Move the pointer and draw line to separate footer section from rest of page         cb.MoveTo(40, document.PageSize.GetBottom(50) );         cb.LineTo(document.PageSize.Width - 40, document.PageSize.GetBottom(50));         cb.Stroke();     }      public override void OnCloseDocument(PdfWriter writer, Document document)     {         base.OnCloseDocument(writer, document);          headerTemplate.BeginText();         headerTemplate.SetFontAndSize(bf, 12);         headerTemplate.SetTextMatrix(0, 0);         headerTemplate.ShowText((writer.PageNumber - 1).ToString());         headerTemplate.EndText();          footerTemplate.BeginText();         footerTemplate.SetFontAndSize(bf, 12);         footerTemplate.SetTextMatrix(0, 0);         footerTemplate.ShowText((writer.PageNumber - 1).ToString());         footerTemplate.EndText();       } } 

I hope it helps!

like image 174
Nilesh Thakkar Avatar answered Oct 14 '22 15:10

Nilesh Thakkar