El mundo de XSL

Uncategorized Sin comentarios

Como primer artículo comentaré que labor estoy desarrollando ahora mismo en mi trabajo. Para poneros en antecedentes os diré que estoy desarrollando (e investigando) en un proyecto para la Comunidad de Madrid. No os comentaré mucho de que trata porque no creo que sin haber salido a la luz les guste a los responsables del mismo que se le de publicidad. Sin embargo si os puedo comentar algo de lo que estoy haciendo:

Dentro del proyecto hay un apartado donde se generan unas cedulas informativas. El objetivo es poder generar cedulas en formato PDF, sin embargo no es moco de pavo, porque dependiendo del municipio habrá distintos tipos de información y se tendrá que representar de forma igualmente distinta. El caso es que como es un proceso que posiblemente tenga que atender cientos de peticiones no es un simple “imprime en la impresora pdf” como podría ser en word o similares.

Hay una cosa clara, y es que la información que se baraja tiende a ser la misma, pero no así la presentación (¿os suena esto a la programación a tres capas?). El caso es que existe una herramienta denominada FOP la cual te permite pasarle un fichero XML, un fichero XSL (XSL + FO) y te genera un pdf en un santiamen. El proceso es el siguiente, el XML solo tiene los datos estructuradamente, el XSL contiene el pseudocodigo que manejará los datos XML. Luego cuando se ejecuta el fop, se interpreta el XSL que le dice donde poner los datos del fichero XML y a continuación genera un PDF interpretando las directrices del FO. El resultado es bastante bueno, aunque la generación del XSL la hago de momento a mano y suele ser un poco laborioso, sin embargo es gratificante ver sus resultados.

Un ejemplo muy cortito sería este:

——————————————————————————–

Fichero XML

——————————————————————————–

<?xml version=”1.0″ encoding=”ISO-8859-1″?>

<RAIZ>

<NOMBRE>Oscar Rodríguez</NOMBRE>

</RAIZ>

——————————————————————————–

Fichero XSL

——————————————————————————–

<?xml version=”1.0″ encoding=”iso-8859-1″?>

<xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” version=”1.0″ xmlns:fo=”http://www.w3.org/1999/XSL/Format”>

<xsl:template match=”/”>

<fo:root>

<fo:layout-master-set>

<fo:simple-page-master master-name=”pagina” page-width=”210mm” page-height=”297mm”>

<fo:region-body margin=”1cm”/>

</fo:simple-page-master>

</fo:layout-master-set>

<fo:page-sequence master-reference=”pagina”>

<fo:flow flow-name=”xsl-region-body”>

<xsl:apply-templates select=”//NOMBRE”/>

</fo:flow>

</fo:page-sequence>

</fo:root>

</xsl:template>

<xsl:template match=”NOMBRE”>

<fo:block font-family=”Times” font-size=”8pt” color=”blue”>Hola, soy <xsl:value-of select=”.”/></fo:block>

</xsl:template>

</xsl:stylesheet>

——————————————————————————–

Si os fijais, como comentaba antes el XML es una chorrada, sin embargo el XSL es más laborioso porque al fin y al cabo hay que tratar tanto la información del XML (aquellas etiquetas que empiecen por xsl) como indicar como se va a presentar (las etiquetas que empiecen por fo). En este ejemplo se esta diciendo que se genere una página DIN A4 con margen por todos los lados de 1 centimetro; que procese la etiqueta NOMBRE (o lo que sería como llamar a la función NOMBRE) para que saque al final la frase “Hola, soy Oscar Rodríguez” con un tipo de letra Times New Romans de 8 puntos y de color azul.

EL FOP al ejecutarlo de la siguiente forma:

fop -xsl oscar.xsl -xml oscar.xml -pdf oscar.pdf

muestra lo siguiente:

[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser

[INFO] FOP 0.20.5

[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser

[INFO] building formatting object tree

[INFO] setting up fonts

[INFO] [1]

[INFO] Parsing of document complete, stopping renderer

Y el resultado final queda así

Luego se puede complicar más poniendo cabeceras, números de página, imágenes, etc. Yo aún sigo investigando para ver todas las posibilidades del XSL (y su hermano menor el FO).

Hay que darle vidilla a esto

Uncategorized 2 Comentarios

Mi iniciativa de crear un blog se quedó poco menos que en el aire después de que haya pasado casi un año desde la primera (y única) publicación en blogger, pero hasta aquí hemos llegado. Mi idea era la de desarrollar yo mismo un sistema de weblogging, pero visto los cambios que ha hecho blogger me quedaré con el sistema actual (la excusa extra-oficial es la pereza que me da hacerlo de nuevo).

Este fenómeno de los weblogs es creciente, tanto que para un tio como yo que le apasiona tanto la informática no puede pasarme desapercibido. Es cierto que esto exige una constancia en cuanto a la publicación, tanta que muchos han desistido o los dejan medio abandonados. Este abandono para mi es quedar mal con los leyentes, por lo que sin pillarme las manos, seré un escritor + o – asiduo si a alguien le interesa mi bitácora.

¿De que va a tratar? De programación, de informática y demás. Estos tres puntos intentaré diferenciarlos bién, porque yo soy desarrollador, pero también me gustaría escribir sobre cosas relacionadas con el mundo de la informática, y por supuesto, como no es un sistema cerrado también escribiré sobre otros temas que no tengan que ver con los anteriores.

Mi objetivo es compartir mis experiencias, mis opiniones, mis logros, mis decepciones, etc. por lo que todos los artículos tendrán tinte personal (para eso es un weblog ¿no?), y quien sabe si algún día compartiré con más gente.

Si has llegado hasta aquí y no te has aburrido, te doy las gracias y te animo a que leas el resto de publicaciones en este blog.