XSLT:FO y FOP

Os mostramos como generar documentos PDF desde XML gracias a FOP y XSLT:FO

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

Comentarios

Un 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Profesor asociado en IE Business School, inversor en StartUps y mentor de emprendedores. Ingeniero Técnico de Telecomunicaciones y Executive MBA por IE Business School 2007. Twitter: Follow @rcanalesmora Autor de los Libros: Planifica tu éxito: de aprendiz a empresario, Informática profesional, las reglas no escritas para triunfar en la empresa, Conceptos ágiles aplicados a distintas áreas de una empresa y Conversaciones con CEOs y CIOs sobre Transformación Digital y Metodologías Ágiles. ¡Descárgalos gratis aquí! Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

Aprende cómo migrar tu sitio Joomla 3 a Joomla 5 de forma segura, manteniendo el diseño, la funcionalidad y compatibilidad con extensiones. Una guía paso a paso con recomendaciones, imágenes y buenas prácticas para actualizar sin sorpresas.
Descubre qué es Yocto Project, sus ventajas, usos reales en Izertis y cómo crear tu propia distribución Linux para Raspberry Pi paso a paso, de forma sencilla y flexible.
¿Trabajas con Drupal y SonarQube 9.9? En este artículo exploramos cómo adaptar el análisis estático para evitar falsos positivos, desactivar reglas conflictivas del Quality Profile y delegar el estilo a PHP CodeSniffer. Una guía práctica para mejorar la integración sin depender aún de SonarQube 10.