I\'m using iText to generate a PDF. I created a custom PdfPageEventHelper to add a header (and footer) to each page.
My problem is I don\'t know how to add the imag
A generic solution to add image at the top of the page. We can do it by positing image to the top also. it may fix your requirement
public static void main(String[] args) throws MalformedURLException, IOException, DocumentException {
Document document = new Document();
try {
PdfWriter.getInstance(document,
new FileOutputStream("HelloWorld.pdf"));
document.open();
//
// Scale the image to a certain percentage
//
String filename = "image.jpg";
Image image = Image.getInstance(filename);
image = Image.getInstance(filename);
image.scalePercent(200f);
image.setAbsolutePosition(0, (float) (PageSize.A4.getHeight() - 20.0));
System.out.println(image.getScaledHeight());
document.add(image);
//
// Scales the image so that it fits a certain width and
// height
//
image.scaleToFit(100f, 200f);
document.add(image);
document.add(new Chunk("This is chunk 3. "));
System.out.println("created");
} catch (DocumentException | IOException e) {
e.printStackTrace();
} finally {
document.close();
}
}
}
You are making two major mistakes.
Image
object outside the onEndPage()
method, and reuse it. This way, the image bytes will be added to the PDF only once.Document
passed to the onEndPage()
method as a parameter should be considered as a read-only parameter. It is forbidden to add content to it. It's a different object than the one you created with new Document(PageSize.A4, 36, 36, 154, 54)
. In reality, it's an instance of a PdfDocument
class created internally by the PdfWriter
instance. To add an image, you need to get the PdfContentByte
from the writer, and add the image using addImage()
.Errors like this can easily be avoided by reading the documentation. You can save plenty of time by reading my book iText in Action.
Can you try
img.setAbsolutePosition(10, 10);
writer.getDirectContent().addImage(img);
instead of
document.add(img);
inside onPageEnd
?
I've set abolute positions and alignment to the image (in this case I placed my image in the header)
try {
Image img = Image.getInstance("url/logo.png");
img.scaleToFit(100,100);
img.setAbsolutePosition((rect.getLeft() + rect.getRight()) / 2 - 45, rect.getTop() - 50);
img.setAlignment(Element.ALIGN_CENTER);
writer.getDirectContent().addImage(img);
} catch (Exception x) {
x.printStackTrace();
}
I've also adjusted the the document margins in order to have delimited space in the header and footer of the document.
document.setMargins(20, 20, 100, 100);