Apache FOP (Formatting Objects Processor) est l'outil qui permet de générer les versions imprimables au format PDF à partir des documents sources DocBook XML et d'une feuille de styles XSL-FO. Ce processeur s'appuie sur Java et son développement a un historique un peu mouvementé. Cependant, c'est incontestablement l'outil libre le plus avancé sur la production de versions imprimables.
L'utilisation des outils Java nécessite quelques adaptations locales au système du fait du caractère plus ou moins libre des différentes licences de ces outils. Ces adaptations ressemblent beaucoup à du bricolage misérable.
La version du Java Runtime Environment (JRE) influe beaucoup sur le fonctionnement de fop. Par conséquent, il est préferrable d'utiliser une version la plus récente possible. Dans ce document on s'appuie sur les paquets construits à partir de la version fournie par Sun microsystems™.
Pour une installation Java «standard» comprenant la chaîne de développement, on obtient la liste suivante :
# dpkg -l sun-java5* | grep ^ii ii sun-java5-bin 1.5.0-13-1 Sun Java(TM) Runtime Environment (JRE) 5.0 (architecture dependent files) ii sun-java5-demo 1.5.0-13-1 Sun Java(TM) Development Kit (JDK) 5.0 demos and examples ii sun-java5-fonts 1.5.0-13-1 Lucida TrueType fonts (from the Sun JRE) ii sun-java5-jdk 1.5.0-13-1 Sun Java(TM) Development Kit (JDK) 5.0 ii sun-java5-jre 1.5.0-13-1 Sun Java(TM) Runtime Environment (JRE) 5.0 (architecture independent file ii sun-java5-plugin 1.5.0-13-1 The Java(TM) Plug-in, Java SE 5.0
Comme il est possible de faire coexister plusieurs versions Java sur le même système, on doit s'assurer que la version voulue sera bien utilisée par les autres outils.
# update-java-alternatives --jre --plugin -v -s java-1.5.0-sun resetting java alternatives Pas d'alternatives pour mozilla-snapshot-javaplugin.so. Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/ControlPanel » pour fournir « ControlPanel ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/java » pour fournir « java ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/java_vm » pour fournir « java_vm ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/javaws » pour fournir « javaws ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/keytool » pour fournir « keytool ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/orbd » pour fournir « orbd ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/pack200 » pour fournir « pack200 ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/policytool » pour fournir « policytool ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/rmid » pour fournir « rmid ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/rmiregistry » pour fournir « rmiregistry ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/servertool » pour fournir « servertool ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/tnameserv » pour fournir « tnameserv ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/bin/unpack200 » pour fournir « unpack200 ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so » pour fournir « firefox-javaplugin.so ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so » pour fournir « iceape-javaplugin.so ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so » pour fournir « iceweasel-javaplugin.so ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so » pour fournir « midbrowser-javaplugin.so ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so » pour fournir « mozilla-javaplugin.so ». Utilisation de « /usr/lib/jvm/java-1.5.0-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so » pour fournir « xulrunner-javaplugin.so ».
Il reste ensuite à vérifier que le paquet correspondant au processeur fop est bien installé :
# dpkg -l fop* | grep ^ii ii fop 1:0.93.dfsg.1-2 XML to PDF Translator
L'un des principaux intérêts de l'utilisation de fop tient au traitement simplifé des images. En effet, avec les autres outils de traitement tels que jade et openjade, il était nécessaire de créer des fichiers sous deux formats distincts : un pour les pages web (jpeg, png ou gif) et un pour les documents imprimables (eps). Avec fop on ne spécifie plus qu'un seul format de fichier image quelque soit le traitement. La simplification des sources et des manipulations de format est donc significative.
Cette simplification a un coût l'installation du JIMI Software Development Kit.
Une fois le kit téléchargé les manipulations sont les suivantes :
$ cd ~/tmp $ unzip jimi1_0.zip $ find . -type f -name JimiProClasses.zip $ cd /usr/share/java/ $ su # cp /home/phil/tmp/Jimi/JimiProClasses.zip jimi-1.0.jar
Ouf ! A partir de là, le paquet Debian fop 0.20.5 pourra traiter les images au format PNG.
Comme on l'a déjà indiqué, un des principaux intérêts de l'utilisation de fop tient au traitement simplifé des images. Là encore, cette simplification a un coût l'installation du kit Java Advanced Imaging (JAI) API.
À partir du site, on télécharge un fichier du type :
jai-1_1_4-pre-dr-b03-lib-linux-i586-08_Oct_2007.zip. Le
nom de ce fichier dépend de la cible sur laquelle le kit sera utilisé. Une
fois le téléchargement effectué, les manipulations sont les
suivantes :
:~/src$ rm -rf jai :~/src$ mkdir jai ; cd jai :~/src/jai$ unzip ../jai-1_1_4-pre-dr-b03-lib-linux-i586-08_Oct_2007.zip Archive: ../jai-1_1_4-pre-dr-b03-lib-linux-i586-08_Oct_2007.zip inflating: COPYRIGHT.txt inflating: LICENSE.txt inflating: LICENSE-JRL.txt inflating: LICENSE-JDL.txt inflating: LICENSE-mediaLibJAI.txt inflating: lib/ext/jai_codec.jar inflating: lib/ext/jai_core.jar inflating: lib/ext/mlibwrapper_jai.jar inflating: lib/i386/libmlib_jai.so :~/src/jai$ su Mot de passe : :/home/phil/src/jai# cp -r lib/* /usr/lib/jvm/java-1.5.0-sun/jre/lib/ :/home/phil/src/jai# exit :~/src/jai$ cd .. :~/src$ rm -rf jai
Pour s'assurer que le kit a bien été installé au bon endroit dans l'arborescence du système de fichiers, on peut utiliser la commande suivante :
$ find /usr/lib/jvm/java-1.5.0-sun/jre/lib/ -type f -name "*jai*" /usr/lib/jvm/java-1.5.0-sun/jre/lib/i386/libmlib_jai.so /usr/lib/jvm/java-1.5.0-sun/jre/lib/ext/jai_codec.jar /usr/lib/jvm/java-1.5.0-sun/jre/lib/ext/jai_core.jar /usr/lib/jvm/java-1.5.0-sun/jre/lib/ext/mlibwrapper_jai.jar
Pour bénéficier des toutes dernières avancées sur le développement de fop, il est nécessaire de construire l'outil à partir de ses sources. Pour ce faire, il faut télécharger les sources à partir du dépôt du serveur Subversion du projet. On passe ensuite au opérations de construction avec ant, l'équivalent de make dans l'environnement Java.
La récupération de l'arborescence des sources du projet fop se fait avec svn la commande principale du paquet subversion :
:~$ mkdir ~/SVN/fop :~$ cd ~/SVN/fop/ :~/SVN/fop$ svn co https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk <snip/> A trunk/examples/embedding/README A trunk/examples/embedding/build.xml U trunk Révision 410929 extraite.
Après ce téléchargement initial, toutes les opérations de mises à jour
se font à l'aide de la commande svn update.
On construit ensuite le processeur à l'aide des directives données à
la commande ant. La première instruction
ant clean élimine toute trace de fichiers
binaires issus de la construction précédente et la seconde
ant package construit les paquets
jar nécessaires à l'utilisation de
fop.
$ cd ~/SVN/fop/trunk/ :~/SVN/fop/trunk$ ant clean Buildfile: build.xml clean: [delete] Deleting directory /home/phil/SVN/fop/trunk/build BUILD SUCCESSFUL Total time: 6 seconds
:~/SVN/fop/trunk$ ant package
Buildfile: build.xml
init-avail:
[echo] ------------------- Apache FOP svn-trunk [1999-2007] ----------------
[echo] See build.properties and build-local.properties for additional build settings
[echo] Apache Ant version 1.7.0 compiled on August 24 2007
[echo] VM: 1.5.0_13-b05, Sun Microsystems Inc.
[echo] JAVA_HOME: ${env.JAVA_HOME}
[echo] Jimi Support NOT Present
[echo] JAI Support PRESENT
[echo] JCE Support PRESENT
[echo] JUnit Support PRESENT
[echo] XMLUnit Support PRESENT
init-filters-jdk14:
[echo] Use GraphicsConfiguration adapter for JDK 1.4.
init-filters-jdk13:
init:
<snip/>
uptodate-jar-main:
jar-main:
[jar] Building jar: /home/phil/SVN/fop/trunk/build/fop.jar
compile-hyphenation:
[mkdir] Created dir: /home/phil/SVN/fop/trunk/build/classes/hyph
uptodate-jar-hyphenation:
jar-hyphenation:
[jar] Warning: skipping jar archive /home/phil/SVN/fop/trunk/build/fop-hyph.jar because no files were included.
[jar] Building MANIFEST-only jar: /home/phil/SVN/fop/trunk/build/fop-hyph.jar
uptodate-jar-sandbox:
jar-sandbox:
[jar] Building jar: /home/phil/SVN/fop/trunk/build/fop-sandbox.jar
package:
BUILD SUCCESSFUL
Total time: 29 seconds
On peut maintenant vérifier que l'outil est disponible.
:~/SVN/fop/trunk$ ./fop -v FOP Version svn-trunk <snip/>
Dernière étape essentielle, il faut positionner la variable
FOP fichier principal des règles de génération des pages
XHTML et des fichiers imprimables :
Makefile.Rules.
# fop -> Génération FO-PDF FOP=~/SVN/fop/trunk/fop
Voilà, c'est prêt !. On dispose maintenant d'un processeur qui va permettre de générer des documents PDF en quantités industrielles. Il ne reste plus qu'à rédiger ;)).
Vous êtes ici :