Generación de PDF en Java: revisión de las bibliotecas iText, Apache PDFBox y OpenPDF
La creación de documentos PDF es una de las tareas frecuentes en aplicaciones corporativas y web en Java: desde la generación de informes y facturas hasta la exportación de datos y la creación de libros electrónicos. En Java existen varias bibliotecas maduras, cada una con sus puntos fuertes. En este artículo revisaremos tres principales: iText, Apache PDFBox y OpenPDF, proporcionaremos ejemplos de código y ayudaremos a elegir la herramienta adecuada.
1. iText — potente, pero con licencia comercial
iText es la biblioteca más popular para trabajar con PDF. Ofrece control total sobre el contenido: texto, imágenes, tablas, formularios, marcas de agua, firmas. A partir de la versión 5.5.x, iText se distribuye bajo licencia dual AGPL (gratuita para proyectos open-source) y comercial (para software propietario). La versión 7.x (iText 7) es más moderna, modular y de alto rendimiento.
Ejemplo: creación de un PDF simple con texto (iText 7)
import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.layout.Document;import com.itextpdf.layout.element.Paragraph;
public class CreatePdfWithIText { public static void main(String[] args) throws Exception { String dest = "output_itext.pdf"; PdfWriter writer = new PdfWriter(dest); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf); document.add(new Paragraph("¡Hola, mundo PDF!")); document.add(new Paragraph("Esto fue creado con iText 7.")); document.close(); System.out.println("PDF creado exitosamente: " + dest); }}Ventajas de iText:
- Máxima flexibilidad: soporte para tablas, listas, estilos, fuentes, imágenes.
- Trabajo con PDF/A, cifrado, firmas digitales.
- Alto rendimiento y calidad de renderizado.
Desventajas:
- Licencia compleja (AGPL) — para uso comercial se requiere compra.
- API bastante extensa que requiere aprendizaje.
2. Apache PDFBox — gratuito y de código abierto
Apache PDFBox es una biblioteca de código abierto (licencia Apache 2.0) que permite crear, editar y extraer contenido de PDF. A diferencia de iText, PDFBox no requiere licencia comercial para proyectos propietarios. También admite trabajo con formularios, cifrado, incrustación de fuentes.
Ejemplo: creación de PDF con texto (PDFBox 2.x)
import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.PDPageContentStream;import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.IOException;
public class CreatePdfWithPdfBox { public static void main(String[] args) throws IOException { try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(); document.addPage(page); try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) { contentStream.beginText(); contentStream.setFont(PDType1Font.HELVETICA, 14); contentStream.newLineAtOffset(50, 700); contentStream.showText("¡Hola, mundo PDF!"); contentStream.newLineAtOffset(0, -20); contentStream.showText("Esto fue creado con Apache PDFBox."); contentStream.endText(); } document.save("output_pdfbox.pdf"); System.out.println("PDF creado exitosamente: output_pdfbox.pdf"); } }}Ventajas de Apache PDFBox:
- Completamente gratuito (licencia Apache 2.0) — adecuado para cualquier proyecto.
- Soporte para extracción de texto, imágenes, metadatos
También en la biblioteca
Biblioteca WebSocket Kotlin: Cliente y Servidor WebSocket Ktor
Sinon para JavaScript (Node.js): guía completa con ejemplos
Métricas de Prometheus en C# (.NET): integración y configuración