Generando tablas en archivos Pdf con Java e iText

Estándar

Si he de ser honesto esta es la razón de que halla decidido aprender a mas detalle como se usa
la librería iText, la necesidad de crear tablas para generar reportes de datos, por fortuna el procedimiento es muy sencillo.

Cree un proyecto Java con la librería iText, esto se describió en una entrada anterior, hecho esto cree un paquete tablas y una clase Tablas, en la que ponga el siguiente código, las partes que generan la tabla se describirán después

package tablas;
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;

public class Tablas {
    
    static public void main(String[] args)
    {
        Document document = new Document();
        
        try{
            PdfWriter.getInstance(document, new FileOutputStream("tablas.pdf"));
            document.open();
            
            // Este codigo genera una tabla de 3 columnas
            PdfPTable table = new PdfPTable(3);                
            
            // addCell() agrega una celda a la tabla, el cambio de fila
            // ocurre automaticamente al llenar la fila
            table.addCell("Celda 1");
            table.addCell("Celda 2");
            table.addCell("Celda 3");
            
            table.addCell("Celda 4");
            table.addCell("Celda 5");
            table.addCell("Celda 6");
            
            table.addCell("Celda 7");
            table.addCell("Celda 8");
            table.addCell("Celda 9");
            
            // Si desea crear una celda de mas de una columna
            // Cree un objecto Cell y cambie su propiedad span
            
            PdfPCell celdaFinal = new PdfPCell(new Paragraph("Final de la tabla"));
            
            // Indicamos cuantas columnas ocupa la celda
            celdaFinal.setColspan(3);
            table.addCell(celdaFinal);
            
            // Agregamos la tabla al documento            
            document.add(table);
            
            document.close();
            
        }catch(Exception e)
        {
            System.err.println("Ocurrio un error al crear el archivo");
            System.exit(-1);
        }
    }
}

El archivo resultado tablas.pdf lucirá de este modo:

Imagen

Figura 1 – Resultado

Los comentarios indican donde esta el código notable, el cual describiremos a continuación:

PdfPTable table = new PdfPTable(3);
Genera un objecto PdfPTable , el constructor nos permite indicar el numero de *columnas* que
tendrá la tabla.

table.addCell(“Celda 1”);
Agrega una celda a la tabla, permite agregar varios objectos, en este caso una cadena de texto
Notara que no hay mención de un salto de columna o similar, esto no es necesario, ya que la función
automáticamente realiza el salto de fila.

PdfPCell celdaFinal = new PdfPCell(new Paragraph(“Final de la tabla”));
Esta linea de código crea un objecto PdfPCell, el cual representa una celda en la tabla, posiblemente
se pregunte por que fue necesario crear este objecto aparte, la razón es sencilla para acceder a sus
propiedades, como lo es setColSpan.

celdaFinal.setColspan(3);
Esta propiedad de los objectos PdfPCell nos permite indicar cuantas columnas debe de abarcar la celda muy útil para la generación de títulos, o como en este caso pies de la tabla.

table.addCell(celdaFinal);
Esta sobrecarga del método addCell agrega la celda que acabamos de crear a la tabla.

Esto cubre lo básico del uso de iText, seguramente notara lo sencillo que seria usar estas funciones con ciclos para poder generar una tabla de reporte bastante completa

Espero que esta información halla sido de utilidad y nos vemos en otra entrada.

Referencias:

http://www.geek-tutorials.com/java/itext/itext_table.php

Anuncios

7 comentarios en “Generando tablas en archivos Pdf con Java e iText

  1. Muchas gracias, aunque, que pasaría si los datos (las columnas) de la tabla sobrepasan el tamaño de la página del pdf? lo probé y el documento se daña. Lo ideal sería que cuando la página de pdf se terminará con las columnas y faltarán más entonces se hiciera un salto de página con newPage() y en la siguiente siguieran las columnas que faltan. Pero no sé cómo hacerlo, llevo toda la tarde probado código pero nada :/

    • Te estas refiriendo a columnas (las que van de izquierda a derecha) o filas (las que van de arriba hacia abajo) ?, en el caso de las columnas, si no caben en el documento una opción es poner el documento en orientación “paisaje” (esto es desde el constructor del documento en la forma “new Document(PageSize.A4.rotate(), -50, -50, 50, 50);” solo cambia A4 por el tamaño de hoja que estes usando, en el caso de las filas se podrían usar los eventos de pagina para crear una nueva tabla con cada pagina, no tengo el código de eso a la mano en este momento, pero seria usando los eventos descritos aqui: https://hashblogeando.wordpress.com/2013/08/09/creando-encabezados-y-conteo-de-paginas-en-archivos-pdf-con-java-e-itext/

      Espero que eso te ayude.

    • Otra opción, si el ancho de la tabla esta deveras fuera de control, seria dividir la tabla en varias tablas, cada una manteniendo una cantidad razonable de columnas, agregar los datos a esas tablas (cuidando que sea en el orden correcto para que se alineen entre si) y luego agregarlas al documento de modo que puedan “armar” la tabla al imprimirla

  2. Disculpa como puedo agregar el texto a la tabla desde un text que al pulsar un boton me vaya agregando el texto que yo le pase autogenerando los espacios,, lo intente hacer pero no me sale…

    • La función de boton llama al metodo table.addCell(); ? es desde esa funcion la que agregara una celda nueva, para agregar un renglon necesitarias llamar a addCell las veces necesarias para llenar el renglon, otra cosa es que NO notarias el texto agregado hasta de generes el pdf

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s