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.