Generación de informes PDF en Java: revisión de bibliotecas y ejemplos de código
La creación de documentos PDF es una de las tareas comunes en aplicaciones Java empresariales: desde la generación de facturas y actas hasta la elaboración de informes analíticos complejos con gráficos. En este artículo, revisaremos tres bibliotecas principales para la generación de PDF en Java — iText, Apache PDFBox y JasperReports — compararemos sus capacidades y proporcionaremos ejemplos de código funcionales.
1. iText — biblioteca potente y flexible
iText (actualmente iText 8.x) es una de las bibliotecas más populares para trabajar con PDF en Java. Admite la creación de documentos desde cero, edición de existentes, adición de imágenes, tablas, marcadores, marcas de agua, así como trabajo con formularios y firmas digitales.
Licencias: iText se distribuye bajo licencia dual — AGPL (gratuita para proyectos open-source) y comercial (para software propietario).
Ejemplo: creación de un documento PDF simple con texto y tabla
import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.layout.Document;import com.itextpdf.layout.element.Paragraph;import com.itextpdf.layout.element.Table;import com.itextpdf.layout.element.Cell;
public class ItextPdfExample { public static void main(String[] args) throws Exception { String dest = "report.pdf"; PdfWriter writer = new PdfWriter(dest); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf);
// Título document.add(new Paragraph("Informe de ventas").setBold().setFontSize(18));
// Tabla Table table = new Table(3); table.addCell(new Cell().add(new Paragraph("Producto"))); table.addCell(new Cell().add(new Paragraph("Cantidad"))); table.addCell(new Cell().add(new Paragraph("Monto"))); table.addCell("Portátil"); table.addCell("5"); table.addCell("450 000 ₽"); table.addCell("Ratón"); table.addCell("12"); table.addCell("6 000 ₽");
document.add(table); document.close(); System.out.println("¡PDF creado!"); }}Este código crea un PDF con el título «Informe de ventas» y una tabla de tres columnas. iText maneja automáticamente los saltos de línea y la división en páginas.
2. Apache PDFBox — alternativa ligera y gratuita
Apache PDFBox es una biblioteca de código abierto (licencia Apache 2.0) que permite crear, editar y extraer texto de archivos PDF. PDFBox no requiere dependencias externas y es ideal para tareas simples: generación de documentos de texto, llenado de formularios, extracción de datos.
Desventaja: trabajar con tablas y maquetación compleja requiere más código manual que en iText.
Ejemplo: creación de PDF 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 java.io.File;
public class PdfBoxExample { public static void main(String[] args) throws Exception { try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(); document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page); // Carga de fuente (¡obligatorio!) PDType0Font font = PDType0Font.load(document, new File("LiberationSans-Regular.ttf")); contentStream.setFont(font, 14); contentStream.beginText(); contentStream.newLineAtOffset(50, 700); contentStream.showText("¡Hola, mundo PDFBox!"); contentStream.endText(); contentStream.close();