Le projet Flying Saucer
Soucoupe volante dans le ciel du monde Java, le projet Flying Saucer est un outil de rendu XML/CSS que vous pouvez intégrer dans vos applications Java : partant d'un document XHTML ou XML formaté et stylisé en utilisant CSS, Flying Saucer saura générer un rendu dans une interface graphique Swing, dans un fichier image, ou encore dans un document PDF.
Génération de rapports en PDF
Compte tenu de l'universalité du format PDF, le projet Flying Saucer offre donc une solution remarquable de génération de rapports pour une application Java ; d'autant plus, parce qu'il y a une séparation entre données, dans le document XML, et la mise en forme à appliquer au moyen de CSS. Le document XML peut inclure directement les règles CSS à appliquer, ou bien faire référence à un ou plusieurs fichiers CSS.
Le développeur pourra ainsi se concentrer sur les données à produire, tandis que l'aspect visuel des rapports pourra être conçu par un designer.
L'article Generating PDFs for Fun and Profit with Flying Saucer and iText, de Joshua Marinacci, décrit la génération de documents PDF par programmation grâce à Flying Saucer.
Afin de générer un rapport, une partie des données constituant le document XML d'entrée pourrait très bien provenir, par exemple, de résultats d'appels JDBC, ou encore d'appels de méthodes de beans entités JPA ou Hibernate.
Dans le cas d'applications web, il est même possible de tirer partie de la partie vue de technologies comme JSP, JSF/Facelets, ou encore GSP (voir l'article Combine JSF Facelets and the Flying Saucer XHTML Renderer, de Jacobus Steenkamp) ; dans ce cas, le document de données est généré directement au travers d'une vue JSP, JSF, ou GSP.
Le principe général à retenir est que si vous savez générer un document XML/XHTML, vous pouvez générer des documents PDF avec Flying Saucer !
Générer des documents PDF avec Grails
Pour illustrer ce qui précède, notre site GrailsWorks propose de créer des documents PDF en manière interactive ici, et donne également plusieurs exemples du vues GSP servant à générer des documents PDF.
Merci à Glen Smith qui, dans son article Gravl: Insanely simple PDFs for Grails rapporte l'utilisation du projet Flying Saucer dans son projet Grails Gravl.
Nous avons ici utilisé Flying Saucer version 8 pre 2, qui permet en particulier d'utiliser un sous-ensemble de CSS 3.
Pour la partie interactive, l'utilisateur est invité à saisir du texte brut pouvant utiliser la syntaxe Markdown pour produire du code HTML, sans avoir à en connaître la syntaxe. On pourra également utiliser du code HTML bien formé. La sélection du bouton Générer PDF permettra de lancer la génération dynamique du document PDF correspondant.
La page PDF avec Flying Saucer donne également plusieurs exemples de vues GSP/XHTML servant à générer les documents PDF équivalents.
Vous pourrez vous servir de ces exemples pour savoir comment, par exemple, fixer les dimensions du document PDF, réaliser de la pagination pour une table HTML, définir un en tête et un pied de page, simplement en affichant le code source des pages XHTML.
Une dernière note sur la prise en charge des liens hypertextes dans un document PDF : ceux-ci ne seront activables que dans la mesure où il s'agit de lien absolus et donc complets.