mercredi 12 mars 2008

Outils de génération de PDF

Dans le cadre d'un de mes précédents projets, j'ai dû réaliser une veille concernant les outils de génération de PDF

En voici une synthèse :

J'avais identifié à l'époque différents outils/frameworks:
  • PDFBox
  • IText
  • FOP
  • Birt
  • JasperReport
  • Open Office

Cette liste n’est pas exhaustive mais les outils citées ci-dessus font partis des plus connus.

PdfBox est une simple librairie java à inclure dans une application. C’est un ensemble d’APIs utilisable pour manipuler un document au format PDF.

Il permet de récupérer une instance d’un document PDF pour y récupérer l’ensemble de ces caractéristiques (type du document, contenu du document, …). Il est possible de fusionner un document pdf existant avec des données de grâce aux variables présentes dans le document pdf appelé « formulaire » et grâce aux APIs de la librairie.

L’outil est assez limité en terme de fonctionnalités. Son utilisation est conseillée dans le cadre d’introspection dans un document PDF ou pour générer des pdfs à partir de modèles très rigides (exemples : un courrier type sur lequel il faut juste remplacer un nom, un prénom et une adresse).

IText est une simple librairie java à inclure dans une application. C’est un ensemble d’APIs utilisable dans un environnement d’exécution pour créer ou manipuler un document au format PDF.

Il fonctionne sur le même principe que PDFBOX mais offre beaucoup plus de fonctionnalités. Il permet notamment de générer un document pdf « from scratch » avec du texte et des images dynamiques ainsi que de fusionner des données de type texte avec un modèle de document (lui-même au format pdf).

L’avantage de l’outil est de pouvoir générer facilement et sans modèle un pdf. Il pourrait être intéressant d’utiliser l’outil si les pdfs à générer sont fortement variabilisés (peu de données statiques) et où il y a peu de valeur ajoutée à devoir d’abord concevoir un modèle puis développer le moyen de réaliser la fusion avec les données.L’outil sait tout faire, il faut simplement le développer en Java.

-FOP: http://xmlgraphics.apache.org/fop/


FOP correspond à un ensemble de librairies java. Il est plus complexe mais offre de nombreuses fonctionnalités. Il permet entre autre de générer des documents au format PDF. C’est un outil fortement orienté vers le langage XML.

FOP consiste à générer une représentation des données brutes à éditer au format XML. Il faut ensuite appliquer une première transformation qui va permettre de fusionner ces données brutes avec un modèle (qui est au format XML). Le fichier ainsi obtenu est une représentation de l’édition à effectuer au format XML. Il faut enfin appliquer la transformation FOP permettant de générer le format de sortie désiré (PDF, HTML, …).

L’avantage de l’outil est de gérer des modèles au format XSLT (feuille de transformation au format XML). La modification d’un modèle revient donc à éditer un fichier XML. L’utilisation classique de cet outil est de partir des données et de leur appliquer des transformations successives permettant d’aboutir au résultat final attendu. La grande flexibilité de l’outil est un atout. En revanche pour mettre en place l’édition d’un document, il faut concevoir la représentation XML des données brutes et la feuille de transformation XSLT. Il faut donc maîtriser ce langage de transformation qui est assez verbeux.

-BIRT: http://www.eclipse.org/birt/


Birt est un outil de reporting. Il intègre à la fois un éditeur graphique de modèle (intégrer dans eclipse avec une perspective de « report modeling ») ainsi qu’un moteur de génération d’impression permettant de le rendre autonome dans une application.

Il faut appréhender l’outil en deux temps :

  • L’outil de reporting : Cet outil est intégré dans la plateforme de développement d’eclipse. Il permet de façon graphique de concevoir le modèle à éditer par la suite. L’éditeur graphique est en fait un générateur de XML qui est le format de sauvegarde du modèle.
  • Le moteur de génération : Il permet de fusionner le modèle demandé avec les données du contexte au moment de l’exécution (provenant d’une BD ou d’objet java).

Cet outil est fortement orienté pour faire du reporting à partir de source de données. Les possibilités de génération d’état sont donc très vastes. L’utilisation classique de cet outil consiste, dans un premier temps, à concevoir le modèle grâce à l’éditeur et, dans un second temps, d’intégrer le modèle dans l’application cible grâce aux APIs fournit par le moteur de génération.

- JasperReport: http://jasperforge.org/sf/projects/jasperreports


Jasper Report est un moteur de génération de report intégrable dans des applicatifs java/j2EE. Il est associé à IReport qui est un outil de conception de modèle pour JasperReport.

Comme pour Birt l'outil est décomposable :
  • L’outil de reporting IReport : Cet outil est une application graphique (client lourd) permettant de concevoir de façon graphique (WYSIWYG) les modèles de report. Le format de stockage des modèles conçus est le XML. Il existe aussi maintenant un plugin eclipse IReport qui permet d’éditer des modèles dans l’environnement eclipse.
  • Le moteur d’exécution JasperReport : Il permet de fusionner le modèle demandé avec les données du contexte d’exécution et générer le report sous différent format.

Les formats de restitution sont variés (pdf, html, xml, csv, excel). Le moteur d’exécution est une simple dépendance à embarquer dans l’application. La documentation est claire sur le Web et les apis d’utilisation du moteur d’exécution sont simples à utiliser. L’outil est bien évidemment orienté pour faire du reporting en connexion directe avec une BD.

- Open Office: http://www.openoffice.org/



L’outil permet de créer des modèles de document grâce à l’éditeur classique d’open office. Les possibilités de mise en pages sont alors celles proposés par l’éditeur de texte. Les APIs d'utilisations sont complexes. il faut faire un réel effort pour s'approprier l'outil et le mettre en oeuvre car il est plus complexe que les autres. Ils offrent en revanche beaucoup de possibilités.

Conclusion

Il n'est pas possible de définir le meilleur outil d'impression/génération de pdf. Ils ont tous des philosophie de mise en oeuvre différentes. On peut noter que JasperReport et Birt sont des outils plus orientés vers le reporting alors qu'IText est propose des APIs plus bas niveau permettant la génération de PDF. Il faudra faire un choix en fonction de son besoin...

1 commentaire:

Gerald a dit…

Je voulais aussi ajouter que Qoppa Software produit des librairies 100% pour travailler avec les fichiers PDF. Ils ont des librairies pour creer, imprimer, manipuler, extraire champs, extraire images, securiser, extraire text... Ainsi que 2 beans pour visualiser et annoter les documents PDF. Et un serveur d'automation pour ceux qui ne veulent pas coder.