XSLT:FO y FOP

1
44767

XSL, XSL:FO y FOP

Cuando trabajamos con XML, una de las técnicas más utilies es la
utilización de XSL para generar distintas salidas (HTML, WML, etc)

En numerosas ocasiones, la salida que debemos generar es un documento más
complejo (PDF,Word, etc.. ) para ello, se extendió XSL incluyendo
caracteristicas para definir la representación gráfica de los elementos. Esta
extensión se denomina XSL:FO, Formating Object.

Con XSL:FO podemos definir como un elemento se debe transformar ….. con
FOP, podemos de un modo sencillo formatear salidas en los formatos de ficheros
más comunes.

Nos descargamos FOP

Y lo descomprimimos …..

Para asegurarnos que tenemos todas las piezas… vamos a crear nuestro primer
documento XSL:FO y generar un PDF

<?xml version=»1.0″ encoding=»ISO-8859-1″?>
    <root xmlns=»http://www.w3.org/1999/XSL/Format» font-size=»12pt»>
      <layout-master-set>
        <simple-page-master margin-right=»25mm» margin-left=»15mm» margin-bottom=»25mm» 
              
margin-top=»15mm» page-width=»210mm» page-height=»297mm» 
              
master-name=»PAGINA«>
                    
<region-body region-nameCUERPO» margin-bottom=»15mm» margin-top=»15mm» />
        </simple-page-master>
       </layout-master-set>

    <page-sequence
master-reference
PAGINA«>
        <title>Ejemplos de Roberto</title>
             
<flow flow-name=»CUERPO«>
                    
<block>Primer Ejemplo de XSL:FO</block>
              
</flow>
       </page-sequence>
</root>

Desde la linea de comando invocamos al FOP y decimos que a partir de esta
información nos genere un PDF

Pues ya está

Podemos encontrar numerosos tutoriales en internet donde nos cuentan que
etiquetas debemos utilizar para crear nuevas secciones, tablas, etc

Pero como podeis comprender …. esto es como escribirse un fichero RTF o
Word en un Notepad. Vamos, que casi nos deberiamos buscar una herramienta que
escriba estos documentos por nosostros ( o por lo menos lo más gordo) y
nosostros restringirnos a cambiar aquello que nos sea necesario sobre una
estructura que esta construida ……

Nos vamos a marchar a souceforge a buscar las herramientas gratuitas que
podrían hacer esto por nosotros …..

HTMLTOFO

Un modo sencillo de construir plantillas FO, es crear una página html y
utilizar otro programa gratuito de sourceforge, html2fo

Sobre la página HTML

<html>

<head>

<meta http-equiv=

«Content-Language»
content=
«es»>

<meta http-equiv=

«Content-Type»
content=
«text/html; «>

<meta name=

«GENERATOR»
content=
«Microsoft FrontPage 4.0»>

<meta name=

«ProgId»
content=
«FrontPage.Editor.Document»>

<title>

Página ejemplo de HTML2FO</title>

</head>

<body>

<p><b>

Bienvenidos a HTML2FO</b></p>

<p>

Con esta herramienta, de un modo
sencillo e intuitivo podremos onvertir

páginas HTML en plantillas FO.

</p>

<p>

Y como muestra un botón, o mejor una
imagen
</p>

<p><img border=

«0»
src=
«file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/FrontPageTempDir/wpe1.jpg»></p>

<p>

&nbsp;</p>

</body>

</html>

Cuyo aspecto es

 

Ejecutamos el programa en linea de comando y obtenemos

<?xml version=»1.0″ encoding=»ISO-8859-1″ ?>
<fo:root xmlns:fo=»http://www.w3.org/1999/XSL/Format» xmlns:fox=»http://xml.apache.org/fop/extensions»>
<!– Creator=»html2fo» Version=»0.4.2″ –>
<fo:layout-master-set>
<fo:simple-page-master margin-right=»2.0cm» margin-left=»2.0cm» margin-bottom=»1.0cm» margin-top=»1.0cm» page-width=»21cm» page-height=»29.7cm» master-name=»first»>
<fo:region-before extent=»1.5cm»/>
<fo:region-body margin-bottom=»1.5cm» margin-top=»1.5cm»/>
<fo:region-after extent=»1.0cm»/>
</fo:simple-page-master>
</fo:layout-master-set>

<fo:page-sequence master-reference=»first» language=»en» hyphenate=»true»>

<fo:static-content flow-name=»xsl-region-before»>
<fo:block line-height=»12pt» font-size=»10pt» space-before.optimum=»1.5pt» space-after.optimum=»1.5pt»
keep-together=»always»>Página ejemplo de HTML2FO</fo:block></fo:static-content>

<fo:static-content flow-name=»xsl-region-after»>
<fo:block line-height=»12pt» font-size=»10pt» space-before.optimum=»1.5pt» space-after.optimum=»1.5pt» keep-together=»always»>

… the footer should be inserted here …

</fo:block></fo:static-content>

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

<fo:block line-height=»12pt» font-weight=»bold» font-size=»10pt» space-before.optimum=»1.5pt» space-after.optimum=»1.5pt»
keep-together=»always»>Bienvenidos a HTML2FO</fo:block>
<fo:block line-height=»12pt» font-size=»10pt» space-before.optimum=»1.5pt» space-after.optimum=»1.5pt»
keep-together=»always»>Con esta herramienta, de un modo sencillo e intuitivo podremos convertir
páginas HTML en plantillas FO.
</fo:block>
<fo:block line-height=»12pt» font-size=»10pt» space-before.optimum=»1.5pt» space-after.optimum=»1.5pt»
keep-together=»always»>Y como muestra un botón, o mejor una imagen</fo:block>
<fo:block line-height=»12pt» font-size=»10pt» space-before.optimum=»1.5pt» space-after.optimum=»1.5pt» keep-together=»always»><fo:external-graphic
src=»wpe1.jpg»/></fo:block>
<fo:block line-height=»12pt» font-size=»10pt» space-before.optimum=»1.5pt» space-after.optimum=»1.5pt» keep-together=»always»><fo:inline white-space-collapse=»false»> </fo:inline></fo:block>

<fo:block space-before.optimum=»1.5pt» space-after.optimum=»1.5pt» keep-together=»always» id=»LastPage» line-height=»1pt» font-size=»1pt»></fo:block></fo:flow>

</fo:page-sequence></fo:root>

Ahora, como hicimos al principio vamos a generar un PDF para ver el aspecto

El pdf generado es el siguiente:

FOA

Otra posibilidad es usa la herramienta FOA ….. Formanting Objects
Authoring Tool … que podemos obtener en sourceforge …

Esta herramienta nos permite sacar el verdadero valor al XSLT:FO, es decir,
combinar las nuevas etiquetas que definen como se deben pintar las los
componentes con las reglas de transformación para definir como extraer los
datos de ficheros XML

FOA posee un tutorial muy completo e intuitivo … aun así …. os
mostraremos en un futuro como usarlo

Sobre el
Autor ..

1 Comentario

  1. Hola el tuotial estabastante interesante y es muy bueno,pero me queda una duda que he estado buscando por la web y no le encuentro el modo, como puedo utilizar fop para transformar un xsl a .doc, alguna idea????? Saludos

Dejar respuesta

Please enter your comment!
Please enter your name here