XSL-FO
¿Qué es?
Un documento XSL-FO es un documento XML en el que se especifica cómo se van a formatear unos datos para presentarlos en pantalla, papel u otros medios. Por ejemplo obtener un documento PDF, documento RTF, PostScript, etc
El significado de las siglas XSL-FO es eXtensible Stylesheet Language Formatting Objects. Hay que destacar que en el documento XSL-FO figuran tanto los datos como el formato que se les va a aplicar.
La unidad básica de trabajo en un documento XSL-FO es el "Formating Object", unidad básica para presentar (formatear) la información. Estos objetos de formato se refieren a páginas, párrafos, tablas, etc.
[Fuente: wikipedia]
Ejemplo de documento XSL-FO:
<?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="hola" page-height="29.7cm" page-width="21cm" margin-top="5mm" margin-bottom="10mm" margin-left="20mm" margin-right="20mm"> <fo:region-body margin-top="10mm" margin-bottom="10mm" /> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="hola"> <fo:flow> <fo:block>Hola, mundo</fo:block> </fo:flow> </fo:page-sequence> </fo:root>
¿Cómo obtener un documento XSL-FO?
Pueden seguirse dos vías:
-
Generarlo directamente a partir de los datos. El documento XSL-FO contiene las especificaciones de formato y los propios datos.
-
Transformar un documento XML que contenga los datos a presentar con una hoja de estilos XSLT. De esta forma los datos (XML) se independizan del formato que proporcionará la hoja de transformación XSLT.
Cuando se tiene el documento XSL-FO, puede ser procesado por un programa llamado "procesador de XSL-FO" para obtener el documento final en distintos formatos. El formato final más utilizado es el PDF.
Transformaciones XSL y procesamiento XSLT-FO
[fuente: wikipedia]
Objetos de Formateo
Todas las etiquetas específicas del lenguaje XSL- FO tienen que ver con elementos de maquetado:
páginas, párrafos, listas, tablas, etc.
XSL-FO realiza una división en áreas rectangulares para mostrar la salida (texto, imágenes etc)
Tipos de áreas |
|
Páginas |
Todo el contenido se organiza en una o más páginas. (se define el tamaño, los márgenes y las regiones). |
Regiones |
Las páginas contienen regiones
|
Bloques |
Las regiones se componen de bloques. Cada bloque es un pequeño elementos como: párrafos, tablas, listas, etc. |
Líneas |
son áreas de textos que se incluyen dentro de los bloques |
Ejemplo
<?xml version="1.0" encoding="ISO-8859-1"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="A4"> <fo:region-body /> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="A4"> <fo:flow flow-name="xsl-region-body"> <fo:block>Hola Mundo</fo:block> </fo:flow> </fo:page-sequence> </fo:root>
La etiqueta <fo:flow> contiene todos los elementos que van a ser impresos en la página.
El atributo flow-name define en qué región de la página se va a escribir el contenido.
ELEMENTOS DEL LENGUAJE XSL-FO
Consultar en el siguiente enlace:
https://w3schools.sinsixx.com/xslfo/xslfo_reference.asp.htm
Procesadores XSL-FO
XSL-FO necesita software específico que formatee y genere la salida, estos programas se denominan procesadores XSL-FO.
Los procesadores XSL-FO libres más conocidos son FOP y PassiveTeX.
XSL-FO es una recomendación del World Wide Web Consortium. El nombre oficial de la recomendación es Extensible Stylesheet Language (XSL) y no XSL-FO.
ACTIVIDAD 1
1. Descargar e instalar el procesador FOP (distribución binaria):
http://xmlgraphics.apache.org/fop/
http://ftp.cixug.es/apache/xmlgraphics/fop/binaries/
2. Instalación
Descomprimir el fichero y veremos que nos crea una gran cantidad de directorios con todo lo necesario para empezar a trabajar y ver su funcionamiento: ejemplos, documentación, ficheros bat, etc.
3. Funcionamiento
Para probar que todo nos funciona correctamente podemos realizar los siguientes pasos:
-
Dentro de la carpeta raíz del FOP nos situamos en el subdirectorio
examples\fo\basic
-
Copiamos cualquier documento, por ejemplo table.fp en el directorio raíz de la aplicación y ejecutamos el fichero Fop.bat de la siguiente manera:
Fop table.fo prueba.pdf
Lo cual nos genera el fichero PDF:
prueba.pdf
4. Abrir el documento table.fo en Notepad++ y analizar su contenido contractando con el documento de salida prueba.pdf.
Convertir XML en PDF utilizando XSL-FO y FOP
Pretendemos crear un archivo pdf que presente un saludo a los alumnos de 1º de ASIR
-
Procedimiento estático
<?xml version="1.0" encoding="UTF-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="A4-portrait" page-height="29.7cm" page-width="21.0cm" margin="2cm"> <fo:region-body /> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="A4-portrait"> <fo:flow flow-name="xsl-region-body"> <fo:block> Hola Antonio</fo:block> <fo:block> Hola Juan</fo:block> </fo:flow> </fo:page-sequence> </fo:root>
Esta sería una forma estática de crear el pdf. Para aprovechar la potencia de FOP lo que haremos es combinar un archivo xml con losl nombre de todos los alumnos (lo llamaremos alumnos.xml) y el archivo anterior de transformación saludo.fo utilizando el lenguaje XSLT ya estudiado.
El archivo XML puedes ser alumnos.xml
<?xml version="1.0"?> <alumnos> <alumno> <nombre>Antonio</nombre> </alumno> <alumno> <nombre>Juan</nombre> </alumno> <alumno> <nombre>María</nombre> </alumno> <alumno> <nombre>Valle</nombre> </alumno> </alumnos>
Crearemos un nuevo archivo saludo2.xsl que consistirá simplememte en añadir código XSL al documento anterior saludo.fo
saludo2.xsl
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <fo:root> <fo:layout-master-set> <fo:simple-page-master master-name="A4-portrait" page-height="29.7cm" page-width="21.0cm" margin="2cm"> <fo:region-body /> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="A4-portrait"> <fo:flow flow-name="xsl-region-body"> <fo:block> Hola <xsl:apply-templates /> </fo:block> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <xsl:template match="nombre"> <fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify"> <xsl:value-of select="."/> </fo:block> </xsl:template> </xsl:stylesheet>
Finalmente ejecutamos FOP
Fop -xml alumnos.xml -xsl saludo2.xsl -pdf saudo2pdf.pdf
ACTIVIDAD 2
-
Partiendo de los documentos anteriores alumnos.xml y saludo2.xsl obtener el correspondiente saludo2pdf.pdf
-
Realizar las modificiaciones necesarias en los documentos anteriores para que aparezca en un nuevo documento pdf llamado “saludo3.pdf”:
- Una cabecera “LISTA DE ALUMNOS DE 1º DE ASIR”
- El listado de alumnos en una tabla
Herramientas comerciales