In this article I will explain with an example, how to add Footer to existing PDF using iTextSharp in ASP.Net MVC.
Note: For beginners in ASP.Net MVC, please refer my article ASP.Net MVC Hello World Tutorial with Sample Program example.
 
 

Download iTextSharp and XmlWorkerHelper Libraries

You can download the iTextSharp and XmlWorkerHelper libraries from the following links.
Note: You will need to add the reference of iTextSharp and XmlWorkerHelper libraries in your project.
 
 

PDF File Location

The sample PDF file is located inside the PDF Folder (Directory) of ASP.Net MVC project.
ASP.Net MVC: Add Footer to existing PDF using iTextSharp
 
 

Namespaces

You will need to import the following namespaces.
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf; 
 
 

Controller

The Controller consists of following Action method.

Action method for handling GET operation

Inside this Action method, simply the View is returned.
 

Action method for handling POST operation

Inside this Action method, first the BYTE Array of the sample PDF file (explained earlier) is determined.
Then, an object of PdfReader class is created which accepts BYTE Array of the sample PDF file as a parameter.
A PdfStamper class object is also created which accepts objects of PdfReader and MemoryStream class as a parameter.
After that, PDF document is created using existing PDF file and a FOR loop is executed over all the pages.

Adding Footer

Inside the loop, a Table is created for Header using PdfPTable class object and the its cell value is defined using PdfPCell class.
After defining Width, Position and Border, the Table is written to the PDF document using WriteSelectedRows method.
The WriteSelectedRows method accepts the necessary properties and the it is placed at top using GetBottom method which accepts the BottomMargin as parameter.
Finally, the File function is called which accepts the BYTE Array of the PDF document and the name of the file, which initiates the file download operation.
public class HomeController  : Controller
{
    // GET: Home
    public ActionResult Index()
    {
        return View();
    }
 
    [HttpPost]
    public ActionResult Export()
    {
        byte[] bytes = System.IO.File.ReadAllBytes(Server.MapPath("~/PDF/Sample.pdf"));
        using (MemoryStream  stream =  new MemoryStream())
        {
            // Reading pdf.
            PdfReader  reader =  new PdfReader(bytes);
            using (PdfStamper  stamper =  new PdfStamper(reader, stream))
            {
                // Create PDF document from exisitng file.
                Document  document =  new Document(PageSize.A4, 10f, 10f, 140f, 40f);
                PdfWriter  writer = PdfWriter.GetInstance(document, stream);
 
                // Loop through all pages.
                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    PdfContentByte pdfContentByte = stamper.GetUnderContent(i);
 
                    // Adding PdfTable for Footer.
                    PdfPTable  tblFooter =  new PdfPTable(2);
 
                    // Setting table width.
                    tblFooter.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;
 
                    // Setting cell width.
                    tblFooter.SetWidths(new float[] { 80f, 20f });
                    tblFooter.DefaultCell.Border = 0;
 
                    // Adding table cell.
                    PdfPCell  cell =  new PdfPCell(new Paragraph(new Chunk("https://www.aspsnippets.com/",FontFactory.GetFont("Arial", 20,Font.BOLD,BaseColor.BLUE))));
                     cell.HorizontalAlignment = Element.ALIGN_CENTER;
                    cell.Border = 0;
                    tblFooter.AddCell(cell);
 
                    // Adding Page Number cell.
                     cell =  new PdfPCell(new Paragraph(string.Format("Page Number: {0}", i)));
                     cell.HorizontalAlignment = Element.ALIGN_RIGHT;
                    cell.Border = 0;
                    tblFooter.AddCell(cell);
 
                    // Adding table to pdf footer.
                    tblFooter.WriteSelectedRows(0, -1, document.LeftMargin, writer.PageSize.GetBottom(document.BottomMargin), pdfContentByte);
                }
            }
            
            return  File(stream.ToArray(),"Sample_Footer.pdf");
        }
    }
}
 
 

View

HTML Markup

The View consists of an HTML Form which has been created using the Html.BeginForm method with the following parameters.
ActionName – Name of the Action. In this case the name is Export.
ControllerName – Name of the Controller. In this case the name is Home.
FormMethod – It specifies the Form Method i.e. GET or POST. In this case it will be set to POST.
The Form consists of a Submit Button which when clicked, the Form is submitted.
@{
     Layout =  null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    @using (Html.BeginForm("Export","Home",FormMethod.Post))
    {
        <input id="btnSubmit" type="submit" value="Export" />
    }
</body>
</html>
 
 

Screenshots

PDF before Exporting

ASP.Net MVC: Add Footer to existing PDF using iTextSharp
 

Form

ASP.Net MVC: Add Footer to existing PDF using iTextSharp
 

PDF after Exporting

ASP.Net MVC: Add Footer to existing PDF using iTextSharp
 
 

Downloads