Generación de PDF en Java: resumen de las bibliotecas iText, Apache PDFBox, OpenPDF

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Generación de PDF en Java: resumen de las mejores bibliotecas



La generación de documentos PDF es una de las tareas típicas en el desarrollo corporativo con Java. Informes, facturas, contratos, certificados: todo esto se puede generar programáticamente de forma conveniente. En este artículo, revisaremos las tres bibliotecas más populares para trabajar con PDF en Java: iText, Apache PDFBox y OpenPDF. Analizaremos sus capacidades, características y proporcionaremos ejemplos prácticos de código.



1. iText — el estándar potente y comercial



iText es, de facto, el estándar para crear PDF en Java. La biblioteca existe desde el año 2000 y ofrece una amplísima funcionalidad: desde texto simple hasta formularios complejos, marcas de agua, firmas digitales y trabajo con PDF/A.



Licencias: iText se distribuye bajo una licencia dual. Para proyectos de código abierto (AGPL) es gratuito, para uso comercial se requiere la compra de una licencia.



Ejemplo: creación de un PDF simple con tabla



import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.layout.Document;import com.itextpdf.layout.element.Cell;import com.itextpdf.layout.element.Paragraph;import com.itextpdf.layout.element.Table;import com.itextpdf.layout.property.UnitValue;

public class ItextExample { public static void main(String[] args) throws Exception { String dest = "example_itext.pdf"; PdfWriter writer = new PdfWriter(dest); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc);

// Añadimos un título document.add(new Paragraph("Informe de ventas"));

// Creamos una tabla Table table = new Table(UnitValue.createPercentArray(3)).useAllAvailableWidth(); table.addHeaderCell(new Cell().add(new Paragraph("Producto"))); table.addHeaderCell(new Cell().add(new Paragraph("Cantidad"))); table.addHeaderCell(new Cell().add(new Paragraph("Precio")));

table.addCell(new Cell().add(new Paragraph("Portátil"))); table.addCell(new Cell().add(new Paragraph("10"))); table.addCell(new Cell().add(new Paragraph("1200 $")));

table.addCell(new Cell().add(new Paragraph("Ratón"))); table.addCell(new Cell().add(new Paragraph("50"))); table.addCell(new Cell().add(new Paragraph("25 $")));

document.add(table); document.close();

System.out.println("PDF creado: " + dest); }}


Ventajas de iText: enorme comunidad, excelente documentación, soporte para escenarios complejos (firmas, formularios, PDF/UA). Desventajas: alto costo de la licencia comercial.



2. Apache PDFBox — gratuito y de código abierto



Apache PDFBox es una biblioteca completamente gratuita con licencia Apache 2.0. Permite no solo crear PDF desde cero, sino también editar documentos existentes, extraer texto, trabajar con formularios e imágenes.



Ejemplo: creación de un documento con texto e imagen



import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.PDPageContentStream;import org.apache.pdfbox.pdmodel.font.PDType0Font;import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import java.io.File;

public class PdfBoxExample { public static void main(String[] args) throws Exception { PDDocument document = new PDDocument(); PDPage page = new PDPage(); document.addPage(page);

PDPageContentStream contentStream = new PDPageContentStream(document, page);

// Cargamos la fuente (se necesita el archivo de fuente) PDType0Font font = PDType0Font.load(document, new File("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf")); contentStream.setFont(font, 14); contentStream.beginText(); contentStream.newLineAtOffset(50, 700); conte

Recommendations