PDFBox - Insertar imagen

En el capítulo anterior, hemos visto cómo extraer texto de un documento PDF existente. En este capítulo, discutiremos cómo insertar una imagen en un documento PDF.

Insertar imagen en un documento PDF

Puede insertar una imagen en un documento PDF utilizando el createFromFile() y drawImage() métodos de las clases PDImageXObject y PDPageContentStream respectivamente.

Los siguientes son los pasos para extraer texto de un documento PDF existente.

Paso 1: carga de un documento PDF existente

Cargue un documento PDF existente utilizando el método estático load() del PDDocumentclase. Este método acepta un objeto de archivo como parámetro, ya que este es un método estático, puede invocarlo usando el nombre de la clase como se muestra a continuación.

File file = new File("path of the document")
PDDocument doc = PDDocument.load(file);

Paso 2: recuperar una página

Seleccione una página en el documento PDF y recupere su objeto de página usando el getPage() método como se muestra a continuación.

PDPage page = doc.getPage(0);

Paso 3: Crear objeto PDImageXObject

La clase PDImageXObjecten la biblioteca PDFBox representa una imagen. Proporciona todos los métodos necesarios para realizar operaciones relacionadas con una imagen, como insertar una imagen, configurar su altura, configurar su ancho, etc.

Podemos crear un objeto de esta clase usando el método createFromFile(). Para este método, necesitamos pasar la ruta de la imagen que queremos agregar en forma de cadena y el objeto de documento al que se debe agregar la imagen.

PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc);

Paso 4: preparación del flujo de contenido

Puede insertar varios tipos de elementos de datos utilizando el objeto de la clase denominada PDPageContentStream. Debe pasar el objeto del documento y el objeto de la página al constructor de esta clase, por lo tanto, cree una instancia de esta clase pasando estos dos objetos creados en los pasos anteriores como se muestra a continuación.

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

Paso 5: dibujar la imagen en el documento PDF

Puede insertar una imagen en el documento PDF utilizando el drawImage()método. A este método, debe agregar el objeto de imagen creado en el paso anterior y las dimensiones requeridas de la imagen (ancho y alto) como se muestra a continuación.

contentstream.drawImage(pdImage, 70, 250);

Paso 6: Cerrar PDPageContentStream

Cierra el PDPageContentStream objeto usando el close() método como se muestra a continuación.

contentstream.close();

Paso 7: guardar el documento

Después de agregar el contenido requerido, guarde el documento PDF usando el save() método del PDDocument class como se muestra en el siguiente bloque de código.

doc.save("Path");

Paso 8: cerrar el documento

Finalmente, cierre el documento usando el close() método del PDDocument clase como se muestra a continuación.

doc.close();

Ejemplo

Supongamos que tenemos un documento PDF llamado sample.pdf, en el camino C:/PdfBox_Examples/ con páginas vacías como se muestra a continuación.

Este ejemplo demuestra cómo agregar una imagen a una página en blanco del documento PDF mencionado anteriormente. Aquí cargaremos el documento PDF llamadosample.pdfy agregarle una imagen. Guarde este código en un archivo con nombreInsertingImage.java.

import java.io.File;
  
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class InsertingImage {

   public static void main(String args[]) throws Exception {
      //Loading an existing document
      File file = new File("C:/PdfBox_Examples/sample.pdf");
      PDDocument doc = PDDocument.load(file);
        
      //Retrieving the page
      PDPage page = doc.getPage(0);
       
      //Creating PDImageXObject object
      PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/logo.png",doc);
       
      //creating the PDPageContentStream object
      PDPageContentStream contents = new PDPageContentStream(doc, page);

      //Drawing the image in the PDF document
      contents.drawImage(pdImage, 70, 250);

      System.out.println("Image inserted");
      
      //Closing the PDPageContentStream object
      contents.close();		
		
      //Saving the document
      doc.save("C:/PdfBox_Examples/sample.pdf");
            
      //Closing the document
      doc.close();
     
   }
}

Compile y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos.

javac InsertingImage.java 
java InsertingImage

Tras la ejecución, el programa anterior inserta una imagen en la página especificada del documento PDF dado que muestra el siguiente mensaje.

Image inserted

Si verifica el documento sample.pdf, puede observar que se inserta una imagen en él como se muestra a continuación.