31
Manual de Templates Sección Bi Publisher Después de instalarse debe de estar incorporado en Word en la siguiente pestaña. Donde encontrará el boton de XML de Ejemplo donde se podra seleccionar y asi probar el template para Oracle basandose en los datos de dicho XML También el usuario encontrará el boton de Esquema XML donde se podra seleccionar y asi probar el template para Oracle basándose en los datos de estructura de dicho XSD El botón de PDF de la seccion de Presentacion Preliminar ayuda al usuario a visualizar el template en formato pdf presentando el formato diseñado en el archivo RTF junto con los datos del XML indicado. Igualmente existen otros formatos de presentacion preliminar disponibles. Este boton ayuda al usuario a visualizar las expresiones Xpath de donde proviene la información para cada campo Con este botón se puede saber la versión de Bi Publisher instalada Manejo de los campos. El manejo de dichos campos del template en RTF se pueden introducir al template con ayuda del botón de campo y otros presentados en la ilustración que ayudaran al usuario a no tener problemas. Cada campo introducido de esta forma queda sombreado en gris como el de @LugarExpedicion Otra forma de introducir los campos es con solo escribirlos directamente con su dirección

Manual de Templates

Embed Size (px)

Citation preview

Page 1: Manual de Templates

Manual de Templates

Sección Bi Publisher

Después de instalarse debe de estar incorporado en Word en la siguiente pestaña.

Donde encontrará el boton de XML de Ejemplo donde se podra seleccionar y asi probar el template para Oracle basandose en los datos de dicho XML

También el usuario encontrará el boton de Esquema XML donde se podra seleccionar y asi probar el template para Oracle basándose en los datos de estructura de dicho XSD

El botón de PDF de la seccion de Presentacion Preliminar ayuda al usuario a visualizar el template en formato pdf presentando el formato diseñado en el archivo RTF junto con los datos del XML indicado.Igualmente existen otros formatos de presentacion preliminar disponibles.

Este boton ayuda al usuario a visualizar las expresiones Xpath de donde proviene la información para cada campo

Con este botón se puede saber la versión de Bi Publisher instalada

Manejo de los campos.

El manejo de dichos campos del template en RTF se pueden introducir al template con ayuda del botón de campo y otros presentados en la ilustración que ayudaran al usuario a no tener problemas.

Cada campo introducido de esta forma queda sombreado en gris como el de @LugarExpedicion

Otra forma de introducir los campos es con solo escribirlos directamente con su dirección Xpath; tal como se ilustra

Page 2: Manual de Templates

Siempre es importante incluir el namespace para que el template tenga una buena implementación es extremadamente necesario ponerlo.

Sección Word

Producción de tablasComo los diseños de los templates se basan principalmente en tablas se propone usar una tabla para cubrir todo el documento

Se deben de saber que se puede hacer con las celdas de las tablaso Como expandirlas / reducirlaso Establecer bordeso Combinar / unir celdaso Dividir celdas /filas /columnas/ tablas

También se propone usar la siguiente barra de opciones para la presentación de la tabla para concretar dichas operaciones de tablas.

Líneas de la factura

Las líneas de la factura como son del subnodo (cfdi:Comprobante/cfdi:Conceptos/cfdi:Conceptos ) donde Conceptos puede aparecer n veces y donde sus atributos son

noIdentificaciondescripcióncantidad

valorUnitarioimporteunidad

donde a su vez tiene un subnodo de InformacionAduanera con atributos

fechanumero

aduana

Page 3: Manual de Templates

Se necesitara de un ciclo for-each para encontrar cada concepto y desplegar los valores de sus atributosComo el que se ejemplifica

1. Se inserta un campo 2. Se edita de la siguiente forma modificándole su etiqueta a F 3. Se edita en el texto alternativo con el código del inicio del ciclo mencionado

Solo dando doble click sobre el campo con la leyenda FPodrá salir a la vista del usuario un cuadro de propiedades de la etiqueta donde se puede ver el campo Codigo donde se escribe el código que se necesite para recorrer cada linea de concepto

Tambien se podra apreciar el campo de Texto para mostrar donde decimos que F es el texto a mostrar cuando se este editando en Word el template pero realmente ejecutara el codigo antes descrito

Page 4: Manual de Templates

Cuadro que salta cuando el usuario da click en el boton de Propiedades de Wordmostrado en la imagen anterior

Después de también aplastar el boton de Add Help Text …

Donde el usuario finalmente podrá ver el texto alternativo que Word tiene nativamente y todo esto es para verificar la integridad de la etiqueta que se creó

El mismo código tiene que estar en los dos lugares.

Es muy necesario que se verifique esta parte ya que el servidor al que se va a subir este template solo leerá lo que este en este campo de ningún otro más lo leerá; aunque se tenga el código correcto en la imagen anterior.

Se hara lo mismo con la etiqueta de fin del ciclo for. Revisando que el código sea

<?end for-each?>

Si no se tendrá que capturar a mano.

Hay que tener en cuenta que todo el formato que este en medio de estas dos etiquetas se va a repetir cuantas veces el ciclo tenga que seguir por ejemplo si las dos etiqueta contienen a un renglón de una tabla entonces el renglón se pintara esas n veces que el ciclo for-each este en funcionamiento

Page 5: Manual de Templates

Copia de formatos

La copia de formatos adquiere importancia para ahorrar pasos en la selección de fuentes, colores de letra, etc en diferentes zonas del documento.

También puede servir para copiar y pegar el mismo formato de texto sin tener que saber cuál es el formato solo se tiene que saber de dónde copiarlo y donde pegarlo.

1. Primero se selecciona el texto donde está el texto con el formato que se desea copiársele el formato.

2. Se aplasta el botón de Format Painter.

3. Se selecciona el texto donde se tiene que aplicar el formato del texto anterior.

4. Se suelta el mouse y se cambia el formato al deseado por el usuario.

Page 6: Manual de Templates

Sección herramienta de FO

Se descarga del disco duro USB desde la carpeta de inventario [ (G:)/instaladores/ ]Y se selecciona alguno de los dos .zip indicados en azul

Se descomprime el seleccionado y se accede a la carpeta resultante.El archivo más importante es el j4lFODesigner.jar como se ilustra en la siguiente en azul:

Page 7: Manual de Templates

Se le da clic y se podrá ver la siguiente pantalla:

Y después esta:

Después hay diversas opciones en la barra de herramientas que a continuación se describen.

Funcionalidades:

Nuevo documento FO Nuevo documento FO

Abrir documento FO Genera un documento PDF a partir del documento

Guardar documento FO Genera el código FO según como este el documento

Inserta una imagen a documento

Para mover objetos dentro del documento

Inserta un gráfico al documento

Inserta una leyenda al documento

Page 8: Manual de Templates

Sección xsl-fo

Xsl fo es una especificación que pertenece a la familia de xsl la principal función del xsl-fo es darle formato a lainformación dada desde un archivo XML. XSLT y Xpath son parte de la familia de esta especificación pero con funciones distintas.

Template:en oracle

Es el documento de extensión RTF o FO que permite maniobrar la presentación de los datos a partir de un archivo XML

en FO Es el elemento <xsl:template > que nos permite definir una serie de reglas de

presentación para poder producir un documento, generalmente está anidado en un elemento </xsl:stylesheet>

o Ejemplo

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" ...><xsl:template match="/" ><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"><fo:layout-master-set> <fo:simple-page-master master-name="master0" page-width="21.58cm" page-height="27.95cm" margin="7mm 4mm 7mm 4mm"> <fo:region-body region-name="body0" margin="0cm 0cm 0cm 0cm" space-before="280pt" /> <fo:region-before region-name="header0" extent="330pt" /> <fo:region-after region-name="footer0" extent="12mm" display-align="after"/> </fo:simple-page-master></fo:layout-master-set><fo:page-sequence master-reference="master0"><!--EMPIEZO DEL AREA DE CABECERA DE PAGINA--><fo:static-content flow-name="header0" ><fo:table width="19.65cm" ><fo:table-column column-width="12.9cm"/><fo:table-column column-width="3cm"/><fo:table-column column-width="3.75cm"/><fo:table-body end-indent="0pt" start-indent="0pt">

<fo:table-row height="0.5cm"> <fo:table-cell >

<fo:block font-size="7pt"></fo:block>....</fo:static-content><!--FIN DEL AREA DE CABECERA DE PAGINA--><!--EMPIEZO DEL AREA DE PIE DE PAGINA--><fo:static-content flow-name="footer0"> <fo:table width="20cm">

<fo:table-column column-width="20cm"/> <fo:table-body> <fo:table-row height="0.22cm">

<fo:table-cell number-columns-spanned="1" text-align="end"> <fo:block font-size="5pt"> Pagina:<fo:page-number/> de <fo:page-number-citation ref-id="last-page" /> </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table>

Page 9: Manual de Templates

</fo:static-content><!--FIN DEL AREA DE PIE DE PAGINA-->

<!--EMPIEZO DE CUERPO DE PAGINA--><fo:flow flow-name="body0"> <!-- START lineas --><xsl:if test="cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto" ><fo:table width="20.2cm" > <fo:table-column column-width="1cm"/> <fo:table-column column-width="2.03cm"/> <fo:table-column column-width="5.22cm"/> <fo:table-column column-width="2.23cm"/> <fo:table-column column-width="1.35cm"/> <fo:table-column column-width="1.89cm"/> <fo:table-column column-width="1.19cm"/> <fo:table-column column-width="1.69cm"/> <fo:table-column column-width="1.79cm"/> <fo:table-column column-width="1.79cm"/> <fo:table-header > <fo:table-row height="0.25cm"> <fo:table-cell padding="0.04cm" border-color="#000000" border-style="solid" border- width="thin" color="rgb(0,0,0)" background-color="rgb(192,192,192)" number-columns-spanned="1">

....<!-- FIN --><fo:block id="last-page"/></fo:flow></fo:page-sequence></fo:root></xsl:template>

<xsl:template name = "formato"><xsl:param name="palabra1"/><xsl:param name="palabra2"/>

<xsl:choose><xsl:when test=" string-length($palabra1) &lt;= 0 and string-

length($palabra2) &gt; 0 "> <xsl:value-of select="concat($palabra2,'&#10;')"/>

</xsl:when><xsl:when test=" string-length($palabra2) &lt;= 0 and string-

length($palabra1) &gt; 0 "> <xsl:value-of select="concat($palabra1,'&#10;')"/> </xsl:when> <xsl:when test=" string-length($palabra2) &lt;= 0 and string-length($palabra1) &lt;= 0 "> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat($palabra1,'&#10;',$palabra2,'&#10;')"/> </xsl:otherwise> </xsl:choose></xsl:template></xsl:stylesheet>

Cuando no se tienen las funciones xsl necesarias para cumplir con los requerimientos del cliente se necesita habilitar el elemento <template> como procedimiento que admita valores y los procese pero no regresa resultado.

También este elemento <template> puede tener algunas características primitivas de un procedimiento procedural tipo C o Java, que puede ser invocada e introducir variables, pero nunca devuelve variables.

Page 10: Manual de Templates

o Ejemplo: procedimiento que concatena un carácter de nueva línea a dos palabras independientemente si alguna de las dos es nula o las dos son no nulas.

Código en C

void formato(char* palabra1, char* palabra2){ If ( strlen(palabra1) <= 0 && strlen(palabra2) >=0 ){

puts (strcat (palabra2,"\n") ); }else{

If ( strlen(palabra2) <= 0 && strlen(palabra1) >=0 ){puts (strcat (palabra1,"\n") );

}else{If ( strlen(palabra1) <= 0 && strlen(palabra2) <=0 ){

}else{puts (strcat (palabra1,"\n", palabra2,”\n”) );

}}

<xsl:template name = "formato"><xsl:param name="palabra1"/><xsl:param name="palabra2"/>

<xsl:choose><xsl:when test="string-length($palabra1) &lt;=0 and string-

length($palabra2)&gt;0"><xsl:value-of select="concat($palabra2,'&#10;')"/>

</xsl:when><xsl:when test="string-length($palabra2)&lt;=0 and string-

length($palabra1) &gt; 0 "><xsl:value-of select="concat($palabra1,'&#10;')"/>

</xsl:when><xsl:when test="string-length($palabra2)&lt;=0 and string-

length($palabra1) &lt;= 0 "> </xsl:when>

<xsl:otherwise><xsl:value-of select="concat($palabra1,'&#10;',

$palabra2,'&#10;')"/></xsl:otherwise>

</xsl:choose></xsl:template>

Invocación de los templates

Se puede mandar llamar a un template con el uso del elemento <xsl:call-template > con el nombre del template que se está invocandoAnidado al elemento va el elemento <xsl:with-param junto con el nombre del parámetro tal como se programó en el template:

<xsl:call-template name="formato"><xsl:with-param name="palabra1" select="concat(cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal/@calle,' no. ',cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal/@noExterior)"/>

<xsl:with-param name="palabra2" select="cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal/@colonia"/>

</xsl:call-template>

Page 11: Manual de Templates

Teoría básica

Documentos XSL

Son archivos XML con información de formato de salida los cuales con grabados con la extensión .fo o .fob pero también se puede usar la extensión .xml para hacer el archivo accesible a los editores

Estructura de un documento XSLFO

Su estructura es como la que sigue:

Estructura

Los documentos xslfo son XML’s entonces tienen que empezar con una declaración

El elemento <fo:root> es el elemento primario de los XSLFO’s este elemento declara el namespace para los XSLFO’s

El elemento <fo:layout-master-set> contiene uno o más templates de la página

Cada elemento <fo:simple- page-master > contiene un solo template de la página cada template debe de tener un único master-name en este caso A4

Uno o mas elementos <fo:page-sequence> describe los contenidos de las paginas el atributo master-re-ference tiene que ser igual al nombre de el atributo simple-page-master template

Áreas XSLFO

<?xml versión=”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"><!-- template de la pagina aqui va--></fo:simple-page-master >

</fo:layout-master-set>

<fo:page-sequence master-reference="A4"><!-- contenido de la pagina aqui va-->

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

<fo:root xmlns: FO=”HTTP://WWW.W3.ORG/1999/XSL/FORMAT”></fo:root>

<fo:layout-master-set></fo:layout-master-set>

<fo:simple-page-master master-name="A4"><!-- template de la pagina aqui va--></fo:simple-page-master >

<fo:page-sequence master-reference="A4"><!-- contenido de la pagina aqui va-->

<fo:page-sequence>

Page 12: Manual de Templates

Son áreas rectangulares donde se despliega la salida los diferentes tipos de áreas se dividen en

Paginas Regiones Bloques Líneas Inline

Paginas

La salida de los XSLFO’s va en formato de página solo se usa una cuando se destina a un navegador pero se divide en varias si es salida impresa.

Regiones

Existen varios tipos: Region-body (el cuerpo de la pagina) Region-before (cabecera de la pagina) Region-after (pie de pagina) Region-start (margen izquierdo) Region-end (margen derecho)

Cabe notar que las regiones constan de bloquesBloques

Pueden contener a su vez bloques anidados o líneas Contienen escritos, tablas y listas

<fo:page-sequence> <fo:flow flow-name="xsl-region-body"> <fo:block> <!-- Output goes here --> </fo:block> </fo:flow></fo:page-sequence>

Page 13: Manual de Templates

Líneas

Pueden contener a su vez inlines.Pero seguramente contienen líneas de texto

Inlines

Definen símbolos dentro de las líneas viñetas,caracteres simples,graficos,etc

El fluir de los XSLFO’s

El contenido de los bloques fluye hacia las páginas y de ahí a la salidaUn elemento <fo:page-sequence> contiene elementos <fo:flow> que contienen elementos <fo:block> que contiene la salida XSL

Ejemplo Hola Mundo de XSLFO

Elemento page-sequences

Este elemento define las páginas de la salida,Cada página de salida tiene referenciado a un master-page que define la apariencia final,Cada página de salida tiene un elemento flow que define su salida Cada página de salida tiene una salida impresa en secuencia

Elemento flow

Las paginas XSLFO estan llenas de los datos que provienen de los bloques de los elementos flowEste elemento contiene todos los elementos que serán impresos a la páginaCuando la página llegue a estar llena el mismo page master será usado cuantas veces sean necesarias, hasta q el texto sea impreso.

¿A dónde lo fluimos el contenido?

Cada elemento flow tiene un atributo flow-name y el valor de este atributo determina cual será el cauce del contenido definido en el elemento.

Los valores legales de este atributo son:

xsl-region-body que corresponde a el cuerpo de la paginaxsl-region-before que corresponde a la cabecera de la pagina

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

Page 14: Manual de Templates

xsl-region-after que corresponde al pie de paginaxsl-region-start que corresponde al margen izquierdoxsl-region-end que corresponde al margen derecho.

Page 15: Manual de Templates

Elemento page master

Los page master es la forma en XSL de llamar a los templates cada template debe de tener un único nombre.

El código anterior describe la creacion de 3 diferentes templates con el elemento <fo:simple-page-master> donde cada template o page master tiene diferente nombre o master-name.

Tamaño de la página Page-with Page-height

Márgenes de la página Margin-topMargin-bottomMargin-leftMargin-rightMargin

<fo:simple-page-master master-name="intro"> <fo:region-body margin="5in" /></fo:simple-page-master>

<fo:simple-page-master master-name="left"> <fo:region-body margin-left="2in" margin-right="3in" /></fo:simple-page-master>

<fo:simple-page-master master-name="right"> <fo:region-body margin-left="3in" margin-right="2in" /></fo:simple-page-master>

Page 16: Manual de Templates

Regiones

<fo:simple-page-master master-name="A4" page-width="297mm"page-height="210mm" margin-top="1cm" margin-bottom="1cm"margin-left="1cm" margin-right="1cm">  <fo:region-body margin="3cm"/>  <fo:region-before extent="2cm"/>  <fo:region-after extent="2cm"/>  <fo:region-start extent="2cm"/>  <fo:region-end extent="2cm"/></fo:simple-page-master>

Page 17: Manual de Templates

Entonces la estructura es la siguiente:

Paginas XSL , elementos flow y bloques Los bloques anidados dentro de las paginas contienen datos extraidos de elementos flow, los cuales iran a la salida.

Una pagina consta de flows Y un flow consta de bloques

Ejemplo:<fo:page-sequence>  <fo:flow flow-name="xsl-region-body">    <fo:block>      <!-- Output goes here -->    </fo:block>  </fo:flow></fo:page-sequence>

Atributos del elemento de bloque

Son secuencias de salida en zonas rectangulares que pueden ser estilizados individualmente:

space before and space after margin border padding

<fo:block border-width="1mm">  <!--este bloque de salida tendra un borde de un milímetro --></fo:block>

Page 18: Manual de Templates

space before and space aftero espacio de separación entre bloques

margino espacio de separación del borde del bloqueo margino margin-topo margin-bottomo margin-lefto margin-right

bordero puede adquirir diferentes colores y fondoso 4 diferentes grosoreso Estilos

border-style border-before-style border-after-style border-start-style border-end-style border-top-style (same as border-before) border-bottom-style (same as border-after) border-left-style (same as border-start) border-right-style (same as border-end)

o color border-color border-before-color border-after-color border-start-color border-end-color border-top-color (same as border-before) border-bottom-color (same as border-after) border-left-color (same as border-start) border-right-color (same as border-end)

o ancho border-width border-before-width border-after-width border-start-width

Page 19: Manual de Templates

border-end-width border-top-width (same as border-before) border-bottom-width (same as border-after) border-left-width (same as border-start) border-right-width (same as border-end)

o Padding padding padding-before padding-after padding-start padding-end padding-top (same as padding-before) padding-bottom (same as padding-after) padding-left (same as padding-start) padding-right (same as padding-end)

o fondo background-color background-image background-repeat background-attachment (scroll or fixed)

Paddingo Área entre el borde del bloque y el contenido.

Contenidoso Contiene datos

Bloques de listado en XSL

Existen 4 objetos de listado para crear listas

fo:list-block o contenedor de la lista

fo:list-itemo contiene un elemento listado

<fo:list-block>

<fo:list-item>  <fo:list-item-label>    <fo:block>*</fo:block>  </fo:list-item-label>  <fo:list-item-body>    <fo:block>Volvo</fo:block>  </fo:list-item-body></fo:list-item>

<fo:list-item>  <fo:list-item-label>    <fo:block>*</fo:block>  </fo:list-item-label>  <fo:list-item-body>    <fo:block>Saab</fo:block>  </fo:list-item-body></fo:list-item>

</fo:list-block>

Page 20: Manual de Templates

fo:list-item-labelo es la viñeta del elemento listado

fo:list-item-bodyo es el título y contenido del elemento listado

Tablas en XSL.Existen 9 objetos usados para crear tablas.

Page 21: Manual de Templates

fo:table-and-caption

Contiene la tabla

fo:tableObjeto obligatorio contenido dentro de fo:table-and-caption

fo:table-captionObjeto opcional dentro de fo:table-and-caption

fo:table-columnObjeto NO obligatorio dentro de fo:table

fo:table-headerObjeto NO obligatorio dentro de fo:table

fo:table-footerObjeto NO obligatorio dentro de fo:table

<fo:table-and-caption><fo:table><fo:table-column column-width="25mm"/><fo:table-column column-width="25mm"/>

<fo:table-header>  <fo:table-row>    <fo:table-cell>      <fo:block font-weight="bold">Car</fo:block>    </fo:table-cell>    <fo:table-cell>      <fo:block font-weight="bold">Price</fo:block>    </fo:table-cell>  </fo:table-row></fo:table-header>

<fo:table-body>  <fo:table-row>    <fo:table-cell>      <fo:block>Volvo</fo:block>    </fo:table-cell>    <fo:table-cell>      <fo:block>$50000</fo:block>    </fo:table-cell>  </fo:table-row>  <fo:table-row>    <fo:table-cell>      <fo:block>SAAB</fo:block>    </fo:table-cell>    <fo:table-cell>      <fo:block>$48000</fo:block>    </fo:table-cell>  </fo:table-row></fo:table-body>

</fo:table></fo:table-and-caption>

Page 22: Manual de Templates

fo:table-bodyObjeto obligatorio dentro de fo:table

fo:table-rowObjeto obligatorio dentro de un subnivel de fo:table

fo:table-cellObjeto obligatorio dentro de un subnivel de fo:table

XSL-FO TablesThe XSL-FO table model is not very different from the HTML table model.There are nine XSL-FO objects used to create tables:

fo:table-and-caption fo:table fo:table-caption fo:table-column fo:table-header fo:table-footer fo:table-body fo:table-row fo:table-cell

El elemento <fo:table-and-caption> debe de tener anidado a un elemento tipo <fo:table> y un elemento tipo <fo:caption> opcional.El elemento de tabla tiene anidado un elemento opcional de <fo:table-column> el cual define las columnas y el número de estas dependen directamente de las n veces que este elemento es referenciado n columnas la tabla tendrá.Tiene una cabecera de tabla opcional <fo:table-header>; para poner los nombres de los rubros que tendrá la tabla; también un cuerpo de la tabla <fo:table-body>y un pie de tabla <fo:table-footer>.Estos tres elementos <fo:table-header>,<fo:table-body> y <fo:table-footer> los cuales a su vez contienen multiples renglones <fo:table-row> los cuales a su vez anidan multiples columnas <fo:table-cell>.

Page 23: Manual de Templates

<fo:table-and-caption><fo:table><fo:table-column column-width="25mm"/><fo:table-column column-width="25mm"/>

<fo:table-header>  <fo:table-row>    <fo:table-cell>      <fo:block font-weight="bold">Car</fo:blo-ck>    </fo:table-cell>    <fo:table-cell>      <fo:block font-weight="bold">Price</fo:block>    </fo:table-cell>  </fo:table-row></fo:table-header>

<fo:table-body>  <fo:table-row>    <fo:table-cell>      <fo:block>Volvo</fo:block>    </fo:table-cell>    <fo:table-cell>      <fo:block>$50000</fo:block>    </fo:table-cell>  </fo:table-row>  <fo:table-row>    <fo:table-cell>      <fo:block>SAAB</fo:block>    </fo:table-cell>    <fo:table-cell>      <fo:block>$48000</fo:block>    </fo:table-cell>  </fo:table-row></fo:table-body>

</fo:table></fo:table-and-caption>

Page 24: Manual de Templates

PaginaciónSe necesita un bloque así en cualquier región:

<fo:block font-size="5pt">Pagina:<fo:page-number/> de <fo:page-number-citation ref-id="last-page" />

</fo:block>

Y un bloque con id con la etiqueta que cierra al elemento <fo:flow> que define todos los elementos que entran en una pagina asi que este bloque con id será el último en imprimirse y recopilara la extensión final del documento

<fo:block id="last-page"/></fo:flow>

Comentarios en XSL FOson identicos al de un HTML o XML;

<!--Documento en depuracion-->

Elemento tableEl template en oracle a dentro de xsl-region-body se usan frecuentemente el elemento de table y sus elementos hijos

similares al del ejemplo a continuación

Page 25: Manual de Templates

<fo:table><fo:table-column column-width="25mm"/><fo:table-column column-width="25mm"/>

<fo:table-header>  <fo:table-row>    <fo:table-cell>      <fo:block font-weight="bold">

Modelo de carro </fo:block>    </fo:table-cell>    <fo:table-cell>      <fo:block font-weight="bold">

Costo </fo:block>    </fo:table-cell>  </fo:table-row></fo:table-header>

<fo:table-body>

  <fo:table-row>    <fo:table-cell>      <fo:block>Volvo</fo:block>    </fo:table-cell>    <fo:table-cell>      <fo:block>$50000</fo:block>    </fo:table-cell>  </fo:table-row>  <fo:table-row>    <fo:table-cell>      <fo:block>SAAB</fo:block>    </fo:table-cell>    <fo:table-cell>      <fo:block>$48000</fo:block>    </fo:table-cell>  </fo:table-row></fo:table-body>

</fo:table>

En la primera columna se define la cabecera de la tabla dentro del elemento de fo:table-header que es donde se contienen los nombres de los rubros que se presentarian dentro de cada elemento de table-header le corresponden lineas <fo:table-row> y columnas <fo:table-cell> de extension y caracteristicas acorde a lo que se especifica en los atributos del elemento fo:table-column donde solo especifica una cosa: cada renglon tendra una longitud de 25 mm a lo largo, otros argumentos usuales del atributo column-width pueden ser pts o porcentajes. Más detalles en: http://www.w3schools.com/xslfo/xslfo_tables.asp, en pocas palabras los formatos de tabla para FO deben de estar a la altura del formato que se pueda dar a las tablas en HTML y un poco más.

Page 26: Manual de Templates

Estructuras de control más usuales

Basándonos en el siguiente archivo XML:<?xml version="1.0"?>

<CentroRecreativo>

<Miembro nivel="basica"> <Nombre>Jose </Nombre> <Telefono tipo="casa">5555-1234</Telefono> <Telefono tipo="trabajo">5555-4321</Telefono> <Casilla>8700</Casilla> </Miembro>

<Miembro nivel="premier"> <Nombre>David</Nombre> <Telefono tipo="casa">3838-1234</Telefono> <Telefono tipo="trabajo">3838-4321</Telefono> <Casilla>5600</Casilla> </Miembro>

<Miembro nivel="basica"> <Nombre>Rogelio</Nombre> <Telefono tipo="casa">8888-1234</Telefono> <Telefono tipo="trabajo">8888-4321</Telefono> <Casilla>4000</Casilla> </Miembro>

</CentroRecreativo>

Podemos señalar que:if : solo existe esta estructura que define solo una línea de decisión sin alternativas.

<xsl:if test="Miembro/@nivel='premier'"> Por ser miembro especial le ofrecemos lo siguiente..... </xsl:if>

if-else : no existe tal orden de elementos if – else pero existe una opcion que nos permite tomar varias decisiones segun el valor del atributo del nodo con varias alternativas.El elemento <xsl:choose> anida los elementos <xsl:when> que contienen una evaluación/prueba escrita en XPath y el respectivo contenido a ejecutarse, y además se puede incluir el elemento <xsl:otherwise> para ejecutarse en caso de no cumplirse ninguna evaluación definida en <xsl:when>.

<xsl:choose>

<xsl:when test="Miembro/@nivel='premier'"> Por ser miembro especial le ofrecemos lo siguiente..... </xsl:when>

<xsl:when test="Miembro/@nivel='basico'"> Le recordamos que si asciende su membresía a "premier" obtiene..... </xsl:when>

<xsl:otherwise> Actualmente no tiene asignada su membresía... </xsl:otherwise>

</xsl:choose>

Page 27: Manual de Templates

For-each: localiza la información de cada atributo perteneciente al nodo a nivel de Miembro.

<xsl:for-each select="Miembro">Nombre : <xsl:value-of select="Nombre"/>Membresía : <xsl:value-of select="@nivel"/></xsl:for-each>