itextTablas: iText 5 contra iText 7


Observaciones

Se eligieron los nombres de clase de iText 5 PdfPTable y PdfPCell porque ya teníamos clases llamadas Table y Cell para crear objetos de tabla y celda en el nivel de programación más alto. También había una clase llamada PdfTable para ser utilizada por iText internamente. Esas clases tenían muchos defectos y estaban en desuso en favor de PdfPTable y PdfPCell . Han sido retirados hace mucho tiempo.

A lo largo de los años, PdfPTable y PdfPCell también recibieron algunas críticas de los usuarios. Por ejemplo: los usuarios no entendieron la diferencia entre el modo de texto y el modo compuesto .

El modo de texto se usa cuando creas un PdfPCell como este:

cell = new PdfPCell(new Phrase("Cell with rowspan 2"));

En este caso, usted define propiedades como la alineación horizontal en el nivel del PdfPCell .

El modo compuesto se addElement() en el momento en que usas el método addElement() :

cell = new PdfPCell();
cell.addElement(new Phrase("Cell 1.2"));

En este caso, se ignoran algunas propiedades definidas en el nivel del PdfPCell (como la alineación horizontal). La alineación horizontal debe definirse en el nivel de los elementos agregados a la celda. Por ejemplo: si desea crear una celda en la que párrafos diferentes deban tener una alineación horizontal diferente, cambiará al modo compuesto.

Si observa la captura de pantalla de la tabla creada con el ejemplo de iText 5, notará que las celdas con el contenido de la celda 1.1 (agregada en el modo de texto) y la celda 1.2 (agregada en el modo compuesto) están alineadas de manera muy diferente.

En respuesta a las críticas sobre la alineación impar, introdujimos métodos para usar información ascendente y descendente. Usamos estos métodos para las celdas con contenido Cell 2.1 (agregado en modo texto) y Cell 2.2 (agregado en modo compuesto). También introdujimos un relleno de 5 para estas células.

Ahora el resultado es mucho mejor.

Lo que arreglamos en iText 7:

Desde que creamos iText 7 desde cero, no teníamos clases heredadas con nombres que no pudiéramos reutilizar. Presentamos una nueva Table y una nueva clase de Cell .

No hay más modo de texto ni más modo compuesto. Una Cell se crea sin parámetros o con parámetros que definen el rowpan y el colspan. Todo el contenido se agrega de la misma manera: utilizando el método add() .

Nuestros clientes también solicitaron proporcionar un medio para distinguir un margen y un relleno. En el ejemplo de iText 7, agregamos un fondo gris para mostrar la diferencia. En la celda con contenido Celda 2.1 , definimos un margen de 5 unidades de usuario. El relleno predeterminado es 2. En la celda con contenido Celda 2.2 , definimos un relleno de 5 unidades de usuario, el margen predeterminado en 0.

Como se puede ver en las capturas de pantalla, las celdas se procesan bastante bien. No tuvimos que usar métodos para establecer el ascendente o el descendente. El comportamiento predeterminado es mucho más cercano al comportamiento que un desarrollador esperaría.

¿Quieres saber más sobre tablas y celdas en iText 7?

Lea Agregar objetos AbstractElement (parte 2) que es el capítulo 5 en el tutorial de iText 7: Building Blocks . ¡Consigue el ebook gratis!

Tablas: iText 5 contra iText 7 Ejemplos relacionados