How can I add an image to all pages of my PDF?
I have used the following code below all the otherdoc.add()
Document doc = new Document(iTextSharp.text.PageSize.A4, 10, 10, 30, 1); PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/pdf/" + fname), FileMode.Create)); doc.Open(); Image image = Image.GetInstance(Server.MapPath("~/images/draft.png")); image.SetAbsolutePosition(12, 300); writer.DirectContent.AddImage(image, false); doc.Close();
Posted on StackOverflow on Feb 20, 2014 by Neville Nazerane
It's normal that the image is only added once; after all: you're adding it only once.
You should create a document in 5 steps and add an event in step 2:
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.GetInstance(document, stream);
MyEvent event = new MyEvent();
writer.PageEvent = event;
// step 3
document.Open();
// step 4
// Add whatever content you want to add
// step 5
document.Close();
You have to write the MyEvent
class yourself:
protected class MyEvent : PdfPageEventHelper {
Image image;
public override void OnOpenDocument(PdfWriter writer, Document document) {
image = Image.GetInstance(Server.MapPath("~/images/draft.png"));
image.SetAbsolutePosition(12, 300);
}
public override void OnEndPage(PdfWriter writer, Document document) {
writer.DirectContent.AddImage(image);
}
}
The OnEndPage()
in class MyEvent
will be triggered every time the PdfWriter
has finished a page. Hence the image will be added on every page.
Caveat: it is important to create the image
object outside the OnEndPage()
method, otherwise the image bytes risk being added as many times as there are pages in your PDF (leading to a bloated PDF).