14/7/10

Tablas con iText

La API de itext vista en un post anterior que nos permite crear archivos PDF desde java, cuenta con muchas otras opciones para crear estos archivos y darles formato, una de ellas, son las tablas.

Con itex podemos crear tablas sencillas y tambien tablas complejas, estas ultimas necesitas de un planeamiento previo, para que las tablas salgan como nosotros queremos y tenemos pensado.

El objeto para crear una tabla es PdfPTable, al cual podemos especificarle la cantidad de columnas que queremos. para rellenar la tabla, podemos utilizar:
mitabla.addCell("Contenido");

o para mayor control, podemos utilizarla de esta forma:

PdfPCell celda =new PdfPCell (new Paragraph("Historial de Observaciones",
                FontFactory.getFont("arial",   // fuente
                22,                            // tamaño
                Font.BOLD,                   // estilo
                BaseColor.RED)));             // color
mitabla.addCell(celda);

Itext va rellenando la tabla, celda por celda, de izquierda a derecha y de abajo a arriba, de forma secuencial. Aqui puedes encontrar mayor informacion de la API de Itext.

El Codigo:
Esta clase que se llama tablaspdf.java, contiene dos metodos, para crear archivos pdf con tablas, simples y complejas.

01 import com.itextpdf.text.BaseColor;
02 import com.itextpdf.text.Document;
03 import com.itextpdf.text.DocumentException;
04 import com.itextpdf.text.Element;
05 import com.itextpdf.text.Font;
06 import com.itextpdf.text.FontFactory;
07 import com.itextpdf.text.Paragraph;
08 import com.itextpdf.text.pdf.PdfPCell;
09 import com.itextpdf.text.pdf.PdfPTable;
10 import com.itextpdf.text.pdf.PdfWriter;
11 import java.io.File;
12 import java.io.FileNotFoundException;
13 import java.io.FileOutputStream;
14 /**
15  * @web http://jc-mouse.blogspot.com/
16  * @author Mouse
17  */
18 public class tablaspdf {
19     
20     public void tablaspdf() throws DocumentException, FileNotFoundException{         
21         // se crea instancia del documento
22         Document mipdf = new Document();
23         // se establece una instancia a un documento pdf
24         PdfWriter.getInstance(mipdf, new FileOutputStream(new File("e:/pdf/tablas.pdf")));
25         mipdf.open(); // se abre el documento
26             
27         mipdf.addTitle("Tablas con itext"); // se añade el titulo
28         mipdf.addAuthor("jc mouse"); // se añade el autor del documento
29         mipdf.addSubject("ocio"); //se añade el asunto del documento
30         mipdf.addKeywords("jc mouse"); //Se agregan palabras claves                            
31             
32         /* ahora si tablas */           
33         //mipdf.add(Tabla_Simple());
34         mipdf.add(Tabla_compleja());
35         mipdf.close(); //se cierra el PDF               
36         System.out.println("documento pdf creado");
37     }
38     
39     public PdfPTable Tabla_Simple(){    
40         //creamos la tabla con 3 columnas
41         PdfPTable mitablasimple=new PdfPTable(3);
42         //añadimos contenido a las celdas
43         mitablasimple.addCell("Enero");
44         mitablasimple.addCell("Febrero");
45         mitablasimple.addCell("Marzo");
46         mitablasimple.addCell("Abril");
47         mitablasimple.addCell("Mayo");
48         mitablasimple.addCell("Junio");
49         mitablasimple.addCell("Julio");
50         mitablasimple.addCell("Agosto");
51         mitablasimple.addCell("Septiembre");
52         mitablasimple.addCell("Octubre");
53         //retornamos la tabla
54         return mitablasimple;        
55     }
56     
57     public PdfPTable Tabla_compleja(){ 
58         //creamos una tabla con 3 columnas
59         PdfPTable mitablacompleja=new PdfPTable(3);
60         //añadimos texto con formato a la primera celda
61         PdfPCell celda =new PdfPCell (new Paragraph("Historial de Observaciones",
62                 FontFactory.getFont("arial",   // fuente
63                 22,                            // tamaño
64                 Font.BOLD,                   // estilo
65                 BaseColor.RED)));             // color
66         //unimos esta celda con otras 2
67         celda.setColspan(3);
68         //alineamos el contenido al centro
69         celda.setHorizontalAlignment(Element.ALIGN_CENTER);
70         // añadimos un espaciado
71         celda.setPadding (12.0f);
72         //colocamos un color de fondo
73         celda.setBackgroundColor(BaseColor.GRAY);
74         //se añade a la tabla
75         mitablacompleja.addCell(celda);
76         
77         //fila 2
78         celda = new PdfPCell(new Paragraph ("AUDITORIA DE SISTEMAS"));
79         celda.setColspan(2);
80         celda.setBackgroundColor(BaseColor.GREEN);
81         mitablacompleja.addCell(celda);        
82         celda = new PdfPCell(new Paragraph ("Aprobado"));        
83         celda.setBackgroundColor(BaseColor.LIGHT_GRAY);
84         mitablacompleja.addCell(celda);
85         //fila 3        
86         celda = new PdfPCell(new Paragraph ("COMPILADORES"));
87         celda.setColspan(2);
88         celda.setBackgroundColor(BaseColor.YELLOW);
89         mitablacompleja.addCell(celda);        
90         celda = new PdfPCell(new Paragraph ("Reprobado"));        
91         celda.setBackgroundColor(BaseColor.LIGHT_GRAY);
92         mitablacompleja.addCell(celda);
93         //fila 4        
94         celda = new PdfPCell(new Paragraph ("Prog. Bajo Nivel"));
95         celda.setColspan(2);
96         celda.setBackgroundColor(BaseColor.CYAN);
97         mitablacompleja.addCell(celda);        
98         celda = new PdfPCell(new Paragraph ("Eximido"));        
99         celda.setBackgroundColor(BaseColor.LIGHT_GRAY);
100         mitablacompleja.addCell(celda);
101         //fila 5
102         mitablacompleja.addCell("Conclusion");
103         celda = new PdfPCell(new Paragraph ("¡¡¡GET A LIFE!!!"));
104         celda.setHorizontalAlignment(Element.ALIGN_RIGHT);
105         celda.setColspan(2);
106         celda.setBackgroundColor(BaseColor.ORANGE);
107         mitablacompleja.addCell(celda);
108         // se retorna la tabla
109         return mitablacompleja;    
110     }
111 }


El resultado es:
Tabla Simple
Tabla con formato

13 comentarios:

  1. Excelente man me ayudo muchisimo para una chamba pa mañana en la school gracias pibe, sigue asi.

    ResponderEliminar
  2. k onda man kisira k me ayuradas mmm estoy utilizando itext para genrar archivo pdf y tablas kisiera saber si el tabla se pueden insertar arreglo bidimensionales me puedes ayudar con es porfa saludos !!! gracias

    ResponderEliminar
  3. el arreglo bidimensional no tiene nada que ver con itext, sino la forma que emplees este arreglo para generar tu tabla

    ResponderEliminar
  4. Hola quisiera saber o si puedes poner un tutorial
    de como se podria manejar los datos de un jtable para crear el pdf
    gracias... salu2

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Hola, quisiera saber como es que puedo extraer el contenido de un pdf(1º) con esta libreria para generar otro (2º), con parte de la informacion del (1º) o es necesaria otra libreria ... gracias!

    ResponderEliminar
  7. Graciaaaas! :D
    Me siirvió mucho tu ejemplo de tabla comleja, es lo que andaba buscando
    Gracias! Saludos desde México :))

    ResponderEliminar
  8. Que tal amigo, gracias por la información, quisiera saber si me puedes ayudar.
    Quiero insertar 2 tablas pero en la misma fila y que se alineen una a la derecha y otra a la izquierda, utilice la propiedad Element.ALIGN_RIGHT pero no funcionó, inserta una y despues la otra. Espero haber sido claro y que me puedas ayudar, de antemano gracias.

    ResponderEliminar
  9. Hola, muy buen aporte amigo. Ahora sólo me queda buscar para la parte de autoajustar las celdas al contenido.
    SAludos.

    ResponderEliminar
  10. Hola... quisiera saber cómo hago para enviar tablas directamente del formulario... Gracias

    ResponderEliminar
  11. gracias..!
    Por el kodigo0..!
    lo anide a una base de datos para imprimir una tabla y kedo xido0 gracias mouse..!

    ResponderEliminar
  12. como puedo anidar a una base de datos para que lo imprima en una tabla

    ResponderEliminar
  13. No pudiste ser más oportuno. Te lo agradezco mucho.

    ResponderEliminar