L'attribut pageclass décrit le type général d'une page; il peut avoir les valeurs suivantes :
| valeur | description |
|---|---|
| titlepage | La page de titre (la première page) |
| lot | liste des pages, liste des tables, des figures, etc. |
| front | préface, dédicace, etc. |
| body | contenu principal |
| back | annexes, glossaires, etc. |
| index | tables des index |
Les pages de chaque classe (pageclass) sont divisées en position. cette position est définit par l'attribut sequence, avec les valeurs suivantes :
| valeur | description |
|---|---|
| first | première page de la classe |
| odd | page impaire, à l'exception de la première page |
| even | page paire, à l'exception de la première page |
| blank | page blanche ajoutée à la suite d'une page paire |
et il y a aussi le paramètre double.sided qui détermine si une page est imprimée recto-verso ou pas :
double.sided = 1 : la page est imprimée recto-verso; les marges, les en-têtes et pieds de pages sont en mirroir sur les deux faces de la page.
Par défaut, une page est imprimée en recto simple; double.sided = 0
L'en-tête (header) et le pied de page (footer) sont, par défaut, constitué de 3 champs (case), avec pour position geuche (left), centre (center) et droite (right).
La taille de ces cellules se paramètre avec header.column.widths de la façon suivante :
<xsl:param name="header.column.widths">1 2 1</xsl:param>
ce qui définit la cellule de gauche à 25% ( 1/(1+2+1)), le centre à 50% (2/(1+2+1)) et le droit à 25% ( 1/(1+2+1)) de la largeur de la page.
Ensuite, il ne reste plus qu'à remplir les cellules avec les indications qui conviennent :
Les cellules sont remplies en surchargeant les paramètres par défaut en redéfinissant header.content ou footer.content :
<xsl:template name="header.content">
...
</xsl:template>
<xsl:template name="footer.content">
...
</xsl:template>
Ces templates ont soumis à des paramètres qu'il faut positionner par défaut :
<xsl:template name="footer.content">
<xsl:param name="pageclass" select="''"/>
<xsl:param name="sequence" select="''"/>
<xsl:param name="position" select="''"/>
<xsl:param name="gentext-key" select="''"/>
...
gentext-key ne sera pas utilisé dans notre exemple.
Ensuite, définissons un bloc :
<fo:block>
...
</fo:block>
Et remplissons ce bloc en fonction de la classe de page :
<xsl:choose>
<xsl:when test="$pageclass = 'titlepage'"></xsl:when><!--pas de pied pour la page de titre-->
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$double.sided = 0"><!-- page recto simple -->
<xsl:choose>
<xsl:when test="$position = 'left'">...</xsl:when>
<xsl:when test="$position = 'center'">...</xsl:when>
<xsl:when test="$position = 'right'">...</xsl:when>
</xsl:choose>
</xsl:when>
<xsl:otherwise><!-- Double-sided = 1 -->
<xsl:choose>
<xsl:when test="$position = 'left'"><!-- cellule de gauche -->
<xsl:choose>
<xsl:when test="$sequence = 'even' or $sequence = 'blank'">...</xsl:when>
<xsl:otherwise><!-- sequence = left|odd -->
...
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="$position = 'center'"><!-- cellule du centre -->
...
</xsl:when>
The right position on a double-sided page contains the folio on odd pages, the logo on even pages.
<xsl:when test="$position = 'right'">
<xsl:choose>
<xsl:when test="$sequence = 'even' or $sequence = 'blank'">
...
</xsl:when>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
Si vous n'utilisez que la configuration double.sided = 0, le code est beaucoup plus simple et peut contenter de nombreux cas.
Le code complet permet de tenir compte du plus de paramètres possible.
De la même façon, nous créons un template pour header.content
Il ne reste plus qu'à remplir les cellules avec l'information qui va bien
Des variable sont déjà définies et prêtes à l'emploi.
titleabbrev.markup, par exemple, faire référence au titre de la partie en cours et s'emploie en l'appelant :
<xsl:apply-templates select="." mode="titleabbrev.markup"/>
Si nous voulons en ajouter d'autres, plus personnalisées, il faudra les définir manuellement.
Dans le template, il faut définir la variable suivante :
<xsl:variable name="RevInfo">
<xsl:choose>
<xsl:when test="//revhistory/revision[last()]/revnumber">
<xsl:text>Version </xsl:text>
<xsl:value-of select="//revhistory/revision[last()]/revnumber"/>
</xsl:when>
<xsl:otherwise>
<!-- nop -->
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Il ne restera plus qu'à l'utiliser au bon endroit en l'appelant :
<xsl:value-of select="$RevInfo"/>
<xsl:variable name="Author">
<xsl:choose>
<xsl:when test="//authorgroup/author[1]/firstname">
<xsl:value-of select="//authorgroup/author[1]/firstname"/>
</xsl:when>
<xsl:otherwise>
<!-- nop -->
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="BookTitle">
<xsl:choose>
<xsl:when test="//book/title">
<xsl:value-of select="//book/title"/>
</xsl:when>
<xsl:otherwise>
<!-- nop -->
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Pour insérer un logo, il suffit de disposer de l'image correspondante. Les rendus sont meilleurs avec des images de type SVG.
Pour insérer le logo, il suffit d'indiquer :
<fo:external-graphic src="logo.svg"/>
au bon endroit.
<fo:page-number/>