Chapitre 9. XSL-FO

XSL-FO est un dialecte de XML permettant de décrire le rendu de documents. Un document XSF-FO contient le contenu même du document ainsi que toutes les indications de rendu. Il s'apparente donc à un mélange de HTML et CSS avec une syntaxe XML mais il est plus destiné à l'impression qu'au rendu sur écran. Le langage XSL-FO est très verbeux et donc peu adapté à l'écriture directe de documents. Il est plutôt conçu pour des documents produits par des feuilles de style XSLT.

9.1. Premier exemple

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Hello, World!  en XSL-FO -->
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <!-- Modèle de pages -->
  <fo:layout-master-set>
    <fo:simple-page-master master-name="A4"
      page-width="210mm" page-height="297mm"
      margin="1cm">
      <!-- Région principale -->
      <fo:region-body   margin="2cm"/>
      <!-- Tête de page aka header -->
      <fo:region-before extent="1cm"/>
      <!-- Pied de page aka footer -->
      <fo:region-after  extent="1cm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <!-- Contenus -->
  <fo:page-sequence master-reference="A4">
    <!-- Contenu de la tête de page -->
    <fo:static-content flow-name="xsl-region-before">
      <fo:block text-align="center">XSL-FO Hello, World! example</fo:block>
    </fo:static-content>
    <!-- Contenu du pied de page : numéro de la page -->
    <fo:static-content flow-name="xsl-region-after">
      <fo:block text-align="center">- <fo:page-number/> -</fo:block>
    </fo:static-content>
    <!-- Contenu de la partie centrale -->
    <fo:flow flow-name="xsl-region-body">
      <fo:block text-align="center"
		font="32pt Times"
		border="black solid thick">Hello, world!</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

Le document précédent peut être traité par un programme comme fop pour produire un document helloworld.pdf ou helloworld.png.

9.2. Structure globale

Un document XSL-FO est constitué de deux parties principales. La première partie contenue dans l'élément fo:layout-master-set contient des modèles de pages. Ces modèles décrivent la mise en page du contenu. La seconde partie contenue dans l'élément fo:page-sequence donne le contenu structuré en blocs.