Volver a la página principal
lunes 10 febrero 2025
25

Cómo Cargar y Editar un PDF con PDFBox en Java

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.

📌 ¿Qué es Apache PDFBox?

Apache PDFBox es una biblioteca en Java que permite trabajar con documentos PDF. Con ella puedes:

  • Extraer texto de un PDF
  • Agregar o modificar texto e imágenes
  • Proteger y firmar documentos
  • Convertir PDF a imágenes y viceversa
  • Entre otras muchas funcionalidades

Puedes descargar la biblioteca desde su sitio oficial: https://pdfbox.apache.org/ o agregarla como una dependencia en tu proyecto Maven/Gradle.

🔧 Instalación de PDFBox en un Proyecto Java

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! 📄

🏗️ Cargar un PDF con PDFBox

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());
        }
    }
}

📝 Explicación del código:

  • PDDocument.load(File archivo) carga el archivo PDF en memoria.
  • documento.getNumberOfPages() obtiene el número de páginas del PDF.
  • Se usa try-with-resources para cerrar automáticamente el documento y liberar recursos.

✍️ Editar un PDF: Agregar Texto

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());
        }
    }
}

📌 Explicación del código:

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.

🎨 Agregar una Imagen al 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());
        }
    }
}

📌 Explicación del código:

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.

🗑️ Eliminar una Página de un PDF

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());
        }
    }
}

🎯 Conclusión

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.

Etiquetas:
java
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer