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