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.