Si alguna vez has necesitado manipular archivos PDF en Java, es muy probable que hayas escuchado sobre Apache PDFBox. Se trata de una biblioteca de código abierto que permite leer, crear y modificar documentos PDF de manera sencilla. En este artículo, te enseñaré cómo cargar un archivo PDF y realizar ediciones básicas utilizando PDFBox.
Apache PDFBox es una biblioteca en Java que permite trabajar con documentos PDF. Con ella puedes:
Puedes descargar la biblioteca desde su sitio oficial: https://pdfbox.apache.org/ o agregarla como una dependencia en tu proyecto Maven/Gradle.
Antes de comenzar, necesitamos agregar la dependencia de PDFBox en nuestro proyecto. Si estás utilizando Maven, solo debes incluir la siguiente línea en tu archivo pom.xml
:
<dependencies>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.30</version> <!-- Usa la última versión disponible -->
</dependency>
</dependencies>
Si usas Gradle, agrega lo siguiente en el archivo build.gradle
:
dependencies {
implementation 'org.apache.pdfbox:pdfbox:2.0.30'
}
Una vez agregada la dependencia, ¡ya podemos trabajar con archivos PDF! 📄
El primer paso para editar un PDF es cargarlo en memoria. Para ello, utilizamos la clase PDDocument
de PDFBox. Veamos un ejemplo de cómo abrir un archivo PDF existente:
import org.apache.pdfbox.pdmodel.PDDocument;
import java.io.File;
import java.io.IOException;
public class CargarPDF {
public static void main(String[] args) {
File archivoPDF = new File("documento.pdf"); // Ruta del archivo
try (PDDocument documento = PDDocument.load(archivoPDF)) {
System.out.println("PDF cargado con éxito. Páginas: " + documento.getNumberOfPages());
} catch (IOException e) {
System.err.println("Error al cargar el PDF: " + e.getMessage());
}
}
}
PDDocument.load(File archivo)
carga el archivo PDF en memoria.
documento.getNumberOfPages()
obtiene el número de páginas del PDF.
Para modificar un PDF, podemos agregar texto en una página específica usando la clase PDPageContentStream
. Aquí te dejo un ejemplo:
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import java.io.*;
public class EditarPDF {
public static void main(String[] args) {
try {
File archivoPDF = new File("documento.pdf");
PDDocument documento = PDDocument.load(archivoPDF);
// Seleccionamos la primera página
PDPage pagina = documento.getPage(0);
// Creamos el stream para escribir en el PDF
PDPageContentStream contenido = new PDPageContentStream(documento, pagina, PDPageContentStream.AppendMode.APPEND, true);
// Definimos la fuente y el tamaño del texto
contenido.setFont(PDType1Font.HELVETICA_BOLD, 14);
// Establecemos la posición del texto (x, y desde la esquina inferior izquierda)
contenido.beginText();
contenido.newLineAtOffset(100, 700);
contenido.showText("¡Texto agregado con PDFBox!");
contenido.endText();
// Cerramos el stream y guardamos los cambios
contenido.close();
documento.save("documento_editado.pdf");
documento.close();
System.out.println("Texto agregado exitosamente al PDF.");
} catch (IOException e) {
System.err.println("Error al editar el PDF: " + e.getMessage());
}
}
}
1. Cargamos el archivo PDF con PDDocument.load()
.
2. Obtenemos la primera página con documento.getPage(0)
.
3. Creamos un PDPageContentStream
para escribir sobre la página.
4. Definimos la fuente, el tamaño y la posición del texto con newLineAtOffset()
.
5. Agregamos el texto con showText()
, cerramos el contenido y guardamos el PDF.
PDFBox también permite agregar imágenes a un PDF. Para ello, usamos PDImageXObject
. Veamos cómo hacerlo:
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import java.io.*;
public class AgregarImagen {
public static void main(String[] args) {
try {
PDDocument documento = PDDocument.load(new File("documento.pdf"));
PDPage pagina = documento.getPage(0);
// Cargar imagen desde archivo
PDImageXObject imagen = PDImageXObject.createFromFile("imagen.png", documento);
// Crear el stream de contenido
PDPageContentStream contenido = new PDPageContentStream(documento, pagina, PDPageContentStream.AppendMode.APPEND, true);
// Dibujar la imagen en la posición (x, y) y con tamaño (width, height)
contenido.drawImage(imagen, 100, 500, 200, 150);
contenido.close();
documento.save("documento_con_imagen.pdf");
documento.close();
System.out.println("Imagen agregada exitosamente.");
} catch (IOException e) {
System.err.println("Error al agregar imagen al PDF: " + e.getMessage());
}
}
}
1. Se carga el PDF y se selecciona la página donde se insertará la imagen.
2. Se usa PDImageXObject.createFromFile()
para cargar la imagen.
3. drawImage()
dibuja la imagen en las coordenadas (100,500)
con tamaño 200x150 px
.
Si necesitas eliminar una página específica de un PDF, puedes hacerlo con removePage()
:
import org.apache.pdfbox.pdmodel.*;
import java.io.*;
public class EliminarPagina {
public static void main(String[] args) {
try {
PDDocument documento = PDDocument.load(new File("documento.pdf"));
// Eliminamos la segunda página (índice 1)
if (documento.getNumberOfPages() > 1) {
documento.removePage(1);
documento.save("documento_sin_pagina.pdf");
System.out.println("Página eliminada.");
} else {
System.out.println("El PDF tiene una sola página, no se puede eliminar.");
}
documento.close();
} catch (IOException e) {
System.err.println("Error al eliminar página: " + e.getMessage());
}
}
}
Como has visto, PDFBox es una herramienta poderosa para manipular archivos PDF en Java. En este artículo aprendimos a:
✅ Cargar un PDF
✅ Agregar texto
✅ Insertar imágenes
✅ Eliminar páginas
Esta es solo la punta del iceberg. PDFBox tiene muchas más funcionalidades que puedes explorar en su documentación oficial.
Jorge García
Fullstack developer