Les formatting-objects (XSL-FO)

Principe (voir Wikipédia)

Il s'agit d'un moyen d'exprimer les indications de mise en forme d'un texte
de manière suffisamment précise pour pouvoir piloter un générateur de pdf.

Exemple : le fichier XML que voici


<?xml version="1.0" encoding="utf-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

<fo:layout-master-set>

<fo:simple-page-master master-name="etiquettes"
page-height="29.7cm"
page-width="21cm"
margin-top="1cm"
margin-bottom="2cm"
margin-left="2.5cm"
margin-right="2.5cm">
<fo:region-body margin-top="3cm" margin-bottom="1.5cm" column-count="3"/>
<fo:region-before extent="3cm"/>
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master>

</fo:layout-master-set>

<fo:page-sequence master-reference="etiquettes">
<fo:flow flow-name="xsl-region-body">

<fo:block text-indent="0pc" space-after="7pt"
space-before.minimum="6pt" space-before.optimum="8pt"
space-before.maximum="10pt">
Prénom1 et Prénom2 NOM
</fo:block>

<fo:block text-indent="0pc" space-after="7pt"
space-before.minimum="6pt" space-before.optimum="8pt"
space-before.maximum="10pt">
lieu
</fo:block>

<fo:block text-indent="0pc" space-after="7pt"
space-before.minimum="6pt" space-before.optimum="8pt"
space-before.maximum="10pt">
Code postal localité
</fo:block>

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

</fo:root>

lorsqu'il est traité par le renderer du logiciel Apache-Fop, produit un document pdf d'une page 21x29,7
qui contient

PDF


Exemple

À partir d'un fichier Excel contenant la liste des adhérents à une association, sauvegardé en format CSV,
on engendre un fichier PDF contenant les adresses des adhérents imprimées en format "étiquette".

  1. On construit d'abord un fichier XML à partir du CSV (avec DOM),
  2. ce fichier est ensuite transformé en formatting-objects
    sur le modèle ci-dessus par la feuille de style etiquettes.xsl,
  3. et le résultat est directement envoyé au renderer Apache-Fop par un objet transform adéquat.
La réalisation est effectuée de bout en bout par la classe Csv2Pdf.