I'm using iTextSharp to add footer to existing pdf files on each page. I have code which is working, but I can't make it to skip first page (I don't want footer on fist page), this is my code:
public class PdfHelper : PdfPageEventHelper
{
public string HeaderPhrase { get; set; }
public PdfHelper (string headerPhrase)
{
HeaderPhrase = headerPhrase;
}
public PdfHelper ()
{
}
public override void OnEndPage (PdfWriter writer, Document document)
{
PdfPTable table = new PdfPTable(1);
table.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;
PdfPTable table2 = new PdfPTable(2);
table.DefaultCell.Border = Rectangle.NO_BORDER;
table2.DefaultCell.Border = Rectangle.NO_BORDER;
var p = new Phrase(HeaderPhrase);
p.Font = new Font(Font.FontFamily.HELVETICA, 20);
PdfPCell cell2 = new PdfPCell(p);
cell2.Colspan = 2;
cell2.Border = Rectangle.NO_BORDER;
cell2.HorizontalAlignment = Element.ALIGN_RIGHT;
table2.AddCell(cell2);
PdfPCell cell = new PdfPCell(table2);
cell.Border = Rectangle.NO_BORDER;
table.AddCell(cell);
table.WriteSelectedRows(0, -1, document.LeftMargin, document.Bottom, writer.DirectContent);
}
}
Here is my code for generating pdf:
public void Success()
{
var guid = Guid.NewGuid();
var outPath = "~/Content/pdfs/Ebook - " + guid + ".pdf";
var mappedPathIn = System.Web.Hosting.HostingEnvironment.MapPath("~/Content/pdfs/ebook - 1.pdf");
var mappedPathOut = System.Web.Hosting.HostingEnvironment.MapPath(outPath);
var pdfReader = new PdfReader(mappedPathIn);
var size = pdfReader.GetPageSizeWithRotation(1);
var document = new Document(size);
var fs = new FileStream(mappedPathOut, FileMode.Create, FileAccess.Write);
var writer = PdfWriter.GetInstance(document, fs);
document.Open();
PdfContentByte cb = writer.DirectContent;
document.NewPage();
PdfImportedPage tempPage = writer.GetImportedPage(pdfReader, 1);
cb.AddTemplate(tempPage, 0, 0);
writer.PageEvent =
new PdfHelper("This is a test");
for (int pageNumber = 2; pageNumber <= pdfReader.NumberOfPages; pageNumber++)
{
document.NewPage();
PdfImportedPage page = writer.GetImportedPage(pdfReader, pageNumber);
cb.AddTemplate(page, 0, 0);
}
document.Close();
}
So what I actually tired is, loop from page 2 and before loop add first page, and then set PageEvent:
PdfContentByte cb = writer.DirectContent;
document.NewPage();
PdfImportedPage tempPage = writer.GetImportedPage(pdfReader, 1);
cb.AddTemplate(tempPage, 0, 0);
writer.PageEvent =
new PdfHelper("This is a test");
But this adds footer for he first page also.