MÓDULO: LENGUAJES DE MARCAS Y SISTEMAS DE GESTIÓN DE LA INFORMACIÓN

Administración de Sistemas Informáticos en Red

 

CSS3XSLTDTDRSSXSD

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

XSL-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 los siguientes enlaces:

http://www.tic2.org/WebTecnica/Programacion/XSLFO/XSLFODocEstructura/XSLFODocEstructura.htm

http://lml.ls.fi.upm.es/~mcollado/xml/0809/xml.html#toc53

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

  1. 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

  1. Partiendo de los documentos anteriores alumnos.xml y saludo2.xsl obtener el correspondiente saludo2pdf.pdf

  2. 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