viernes, diciembre 07, 2007

FO y el centrado vertical

Advertencia: Ya saben, pueden saltarse este artículo, a menos que estén interesados o que deseen no entender nada gratuitamente.

FO corresponde a Formatting Objects, una herramienta desarollada por Apache, que nos permite generar documentos para impresión, puntualmente PCL y PDF, este último formato de mi particular preferencia.

Hay varias maneras de generar PDF, de hecho es altamente probable que los entendidos mencionen a Jasper como LA herramienta para hacer reportes en este formato. Y lo reconozco, es LA herramienta, visualmente mucho más poderosa, pero en términos de resolución me atrevería a decir que FO y su soporte para gráficos vectoriales en SVG la supera con creces.

Hace varios años que he adquirido cierta experticia en el tema, y hoy pretendo documentar un truco sucio que nos permite alinear verticalmente "cualquier cosa".

El problema: Centrar un texto dentro de una celda de una tabla.
Las soluciones encontradas: Todos los resultados de Google indican que la solución está en usar el atributo display-align="center"
El problema persiste, y simplemente se debe a que si la celda tiene una altura determinada, el bloque siempre ajustará su altura conforme al contenido.

El truco sucio: Rememorando otra plantilla XSL-FO que hice recordé que efectivamente el display-align="center" funciona, sin embargo las condiciones son bastante peculiares. La celda requiere forzosamente de una referencia, es decir un "en función de que elemento, tomándolo como referencia posicional, se hace el centrado vertical". Entonces mi solución incluir una celda dummy de 1px, pero con font-size="alto de la celda", y aplicar el display-align="center" a la celda del contenido que me interesaba centrar.

MUY SUCIO, pero funciona, y "nadie se da cuenta de ello".

Si alguien requiere código más preciso, puede solicitarlo sin problemas.

No hay comentarios.: