El proceso que cubriremos en esta guía (descrito en el siguiente gráfico) con el fin de obtener un PDF será el siguiente:
-Creación de un fichero XML que contendrá la información a mostrar en el PDF.
-Creación de una hoja de estilos XSL que transformará el documento XML en un fichero XSL-FO. El fichero contendrá las definiciones necesarias en lenguaje FO que detallaremos en próximos apartados, con el fin de generar el documento final.
-Ejecutar la transformación con un parser XSL, obteniendo como resultado, el fichero XSL-FO descrito anteriormente.
-Procesamiento de dicho fichero XSL-FO, con el procesador Apache FOP, generándose finalmente el fichero PDF.
Documento XML que contendrá la información a mostrar
<?xml version="1.0" encoding="ISO-8859-1"?>
<listado>
<cabecera>Listado de ventas</cabecera>
<articulos>
<articulo id="96537">Toalla de
baño</articulo>
<articulo id="38734">Cortina de
plástico</articulo>
<articulo id="76383">Servilleta de
punto</articulo>
<articulo id="09278">Papel de
cocina</articulo>
</articulos>
</listado>
Estructura del documento XSL-FO
resultado.- Antes de diseñar la hoja de estilos XSL, debemos
saber que estructura tenemos que generar.
Un documento XSL-FO tiene una estructura que, a priori, parece muy complicada, pero no es así. La mayoria de los elementos que definimos en en documento XSL-FO son comunes a todos ellos, con lo que siempre podremos copiarlos de otro ya definido. Estos aspectos fijos son, por ejemplo, los margenes, estructura de las páginas y otros aspectos de configuración de la estructura.
Ejemplo de esqueleto de un documento XSL-FO, cuya estructura se repetirá en la mayoría de los casos:
<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="21cm" page-height="29.7cm"
master-name="first">
<fo:region-body margin-top="1cm"
margin-bottom="1cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence
master-reference="first">
<fo:flow
flow-name="xsl-region-body">
<!-- Aquí va el contenido del
documento -->
</fo:flow>
</fo:page-sequence>
</fo:root>
Como podemos ver, no es tan
complicado una vez sabemos que no hay necesidad de redefinirlo cada
vez.
Entremos a ver con detalle cada elemento de la estructura con el fin de entenderlos mejor.
Elemento <fo:root>
Elemento que marca el inicio y el fin del documento XSL-FO. Nos
apoyamos en este elemento para definir el espacio de nombres para
FO.
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format
">
...
</fo:root>
Elemento <fo:layout-master-set>
Engloba un conjunto de definiciones sobre la estructura o layout de
las páginas, es decir, contiene uno o más
<fo-simple-page-master>. Con esto conseguimos, por ejemplo,
que en nuestro documento existan unas páginas con orientación
vertical y otras apaisadas. También podemos así, definir distintos
márgenes para las páginas del documento según si la página es par o
impar.
En la mayoría de los casos, con una sóla definición de página sería suficiente.
<fo:layout-master-set>
...
</fo:layout-master-set>
Elemento <fo:simple-page-master>
Se encarga de especificar los márgenes, altura y anchura de un
página en concreto (para conseguir una orientación vertical o
apaisada).
<fo:simple-page-master margin-right="1cm"
margin-left="1cm"
margin-bottom="1cm" margin-top="1cm"
page-width="21cm" page-height="29.7cm"
master-name="first">
...
</fo:simple-page-master>
Descripción de cada
uno de los elementos constituyentes de este elemento:
1.master-name
Como podemos crear múltitud de definiciones de páginas, posteriormente debemos ser capaces de asociar cada página real con su definición de estructura. Lo haremos siempre a través del "master-name".
2.margin-top, margin-bottom, margin-left y margin-right
Definen el tamaño de los márgenes superior, inferior, izquierdo y derecho según la siguiente tabla de unidades:
Table 1. Tabla de unidades de definición
page-width y page-height
Tamaño físico de la página. En el ejemplo se utiliza 21x29.7, es decir, DIN-A4.
Elemento <fo:region-before>,
<fo:region-body> y <fo:region-after>
-region-body: dimensión del área principal en el
centro de la página.
-region-before: parte superior de la página, utilizada normalmente para la cabecera del documento.
-region-after: parte inferior de la página, utilizada normalmente para el pie del documento.
-region-start: parte izquierda del documento.
-region-end: parte derecha del documento.
Elemento <fo:page-sequence>
Describe el conjunto de paginas con un formato o estructura
determinado. Esta estructura de paginas viene referenciadas a
traves del atributo "master-reference". Este atributo es una
referencia a un tag de tipo fo:simple-page-master cuyo
"master-name" corresponde con el indicado.
<fo:page-sequence master-reference="first">
...
</fo:page-sequence>
Elemento <fo:flow>
Define la region de la pagina en la que se insertara el contenido,
como por ejemplo el "xsl-region-body".
<fo:flow
flow-name="xsl-region-body">
<!-- Aquí va el contenido del documento -->
</fo:flow>
Elementos de definicion de contenido.- Para terminar la
definicion de nuestro ejemplo, vamos a ver dos de los elementos mas
utilizados a la hora de definir contenido dentro de un documento
FO:
Definicion de bloques con <fo:block>. Define una seccion o parrafo de contenido al estilo de la etiqueta <p> de HTML. Este elemento siempre causa una salto de linea despues de su renderizado. En la propia etiqueta "block" pueden definirse ciertos estilos del texto, como son por ejemplo el tamaño o tipo de fuente.
<fo:block font-size="12pt"
font-weight="bold">
...
</fo:block>
Definicion de estilos para el texto contenido en un bloque
<fo:inline>. Permite modificar el estilo del texto ya
contenido dentro de un bloque, sobrescribiendo asi las definiciones
que se habian hecho.
<fo:block font-size="12pt">
Texto <fo:inline font-size="14pt"
font-weight="bold">de</fo:inline> ejemplo.
</fo:block>
Hay 54 opiniones. Opina sobre este curso.
| Cursos | Valoración | Alumnos | Vídeo | |
|---|---|---|---|---|
|
Internet. Tu negocio Intenet fue un negocio que en algún momento parecía una idea "descabellada". Ahora el internet es una herramienta de uso indispensable en las e... [03/02/09] |
|
716 | ||
|
Instalación de un Servidor de Correo en Linux Linux es un sistema operativo libre, con lo que no se tiene que pagar por ningún tipo de licencia. También se puede conseguir el código fuente y poderlo modificar libreme... [16/06/04] |
|
13.755 | ||
|
Informática. Desarrollo científico del ordenador Ordenador, ciencia e informática son las claves de este curso. Conoce el desarrollo científico que hay detrás de una computadora u ordenado... [10/07/09] |
|
4.408 | ||
Publicar en
del.icio.us
digg
meneame