Con el fin de que la informacion que se genere en el documento XSL-FO de salida pueda ser dinamica, haremos que los datos se almacenen en un documento XML, transformandose en el documento de salida mediante el uso de una hoja de estilos XSL.
<?xml version="1.0" encoding="ISO-8859-1"?>
<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 encoding="ISO-8859-1" indent="yes"/>
<xsl:template match="listado">
<fo:root xmlns:fo=" http://www.w3.org/1999/XSL/Format ">
<fo:layout-master-set>
<fo:simple-page-master margin-right="1cm" margin-left="1cm" margin-bottom="1cm"
margin-top="1cm" page-width="210mm" page-height="297mm" master-name="first">
<fo:region-before extent="1cm"/>
<fo:region-body margin-top="1cm" margin-bottom="1cm"/>
<fo:region-after extent="1cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="first">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<xsl:value-of select="cabecera" />
</fo:block>
<fo:list-block space-before="0.5cm" space-after="0.5cm" font-size="12pt">
<xsl:apply-templates select="articulos/articulo" />
</fo:list-block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="articulo">
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block text-align="start">
<xsl:text>•</xsl:text>
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>
<xsl:value-of select="text()"/>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:template>
</xsl:stylesheet>
Ejecutar la transformación con un parser XSL
Si vamos a utilizar un procesador en linea de comandos como puede ser el XSLTPROC, la instrucción a ejecutar seria la siguiente:
xsltproc sample.xsl sample.xml > sample.fo
Si vamos a utilizar Apache ANT. El fichero "build.xml" seria el siguiente:
<?xml version="1.0"?>
<project name="procesando-xml" default="fo">
<target name="init" />
<target name="fo" depends="init">
<echo message="Generando sample.fo ..." />
<xslt in="sample.xml" out="sample.fo" style="sample.xsl">
<outputproperty name="method" value="xml"/>
<outputproperty name="standalone" value="yes"/>
<outputproperty name="encoding" value="ISO-8859-1"/>
<outputproperty name="indent" value="yes"/>
</xslt>
</target>
</project>
La ejecucion de esta definicion nos permite tomar un fichero "sample.xml" como entrada, aplicarle una hoja de estilos xsl "sample.xsl" y obtener como salida un fichero "sample.fo" con el codigo FO correspondiente.
Procesamiento de dicho fichero XSL-FO con Apache FOP
Para obtener finalmente el fichero PDF que queremos como resultado, podemos ejecutar el siguiente script que viene con la distribucion de Apache FOP:
/opt/fop-0.20.5rc2/fop.sh sample.fo -pdf sample.pdf
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.