Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add Content to a PDF using iText PdfStamper

Tags:

itext

I'm developing a System in which I have to add some images to an existing PDF Document.

This works great with iText 5.1.3, but for some reason in a PDF that contains a scanned image it won't add any of the images.

Here's the link to the PDF Document that can't be modified with PdfStamper

and here's the code

  PdfReader reader = new PdfReader("Registro celular_OR.pdf");
  PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("DocStamped.pdf"));
  Image img = Image.getInstance("someImage.jpg");
  img.setAbsolutePosition(0, 0);
  img.scaleAbsolute(50f, 50f);
  PdfContentByte over = null;

  int total = reader.getNumberOfPages() + 1;
  for(int i = 1; i < total; i++) {
    System.out.println("Procesando Pagina: " + i);
    over = stamper.getOverContent(i);
    over.addImage(img);

    over.beginText();
    BaseFont bf_times = BaseFont.createFont(BaseFont.TIMES_ROMAN, "Cp1252", false);
    over.setFontAndSize(bf_times, 8);
    over.showTextAligned(PdfContentByte.ALIGN_CENTER, "TEXTO PRUEBA", 50, 50, 0);
    over.endText();
  }
  stamper.close();
like image 681
Fernando Cuervo Avatar asked Nov 18 '11 01:11

Fernando Cuervo


People also ask

What is PdfStamper in iText?

PdfStamper(PdfReader reader, OutputStream os) Starts the process of adding extra content to an existing PDF document. PdfStamper(PdfReader reader, OutputStream os, char pdfVersion) Starts the process of adding extra content to an existing PDF document.

Is iText PDF free?

You have to pay for it. To answer your question: iText can be used for free in situations where you also distribute your software for free. As soon as you want to use iText in a closed source, proprietary environment, you have to pay for your use of iText.


1 Answers

A PDF page does not need to have its lower left corner at (0, 0). It can be anywhere in the coordinate system. So an A4 page can be (0, 0, 595, 842), but it might as well be (1000, 2000, 1595, 2842).

You are positioning the image at (0, 0):

img.setAbsolutePosition(0, 0);

But the page of this document is defined as (0, 15366, 469, 15728). The image is actually added to the output document, but it's outside the visible area of the page.

You have to get the coordinates of the page to position the image. Inside the loop, do this:

img.setAbsolutePosition(reader.getPageSize(i).getLeft(), reader.getPageSize(i).getBottom());
like image 185
rhens Avatar answered Sep 29 '22 12:09

rhens