Technologies

XDocReport

Publié le : Auteur: Angelo ZERR Laisser un commentaire
technologies

Je me permets de poster sur ce blog pour vous faire connaître notre projet XDocReport qui est une API Java de reporting que je développe avec un ami.

En effet ce projet pourra peut être intéresser certains projets de Sodifrance qui ont besoin de générer des rapports (simples) dans leur application.

1) XDocReport API

Comparé à d’autres API de reporting (JasperReport, Birt, etc…) , XDocReport se distingue par le fait que le « template » du rapport s’effectue via OpenOffice/LibreOffice (odt) ou MS Word (docx). Autrement dit, une personne NON développeur peut modifier le template avec LibreOffice ou MS Word. Pas besoin de devoir installer un designer spécifiques pour créer le « template » du rapport.
XDocReport n’est pas un concurrent de JasperReport, Birt etc mais plus un complément. En effet dans des applications il existe :

  • des rapports complexes avec des graphiques, avec tableaux aux pixels prêts (ex : lettre chèque). Pour cela JasperReport, Birt est le mieux adapté.
  • des rapports simples comme des lettres de relances, des commandes etc. Pour cela XDocReport est à mon sens le mieux adapté. L’utilisateur qui souhaite par exemple juste changer son logo ouvre LibreOffice ou MS Word pour effectuer ce changement.

L’idée générale de XDocReport est de créer ses rapports en utilisant une syntaxe Freemarker ou Velocity pour mettre des champs à remplacer par des valeurs provenant d’un contexte Java. Ainsi il est possible de gérer des boucles, des conditions en utilisant une de  ces syntaxes.

Voici une liste des fonctionnalités de XDocReport :

  • création du « template » rapport avec MS Word (docx) ou OpenOffice (odt) et génération du rapport en docx-> docx ou odt->odt. Une macro word et unemacro OpenOffice sont disponibles pour aider à créer le « template » rapport (ces macros sont juste utiles pour créer le « template », pas pour la génération du rapport).
  • possibilité de convertir odt en PDF/HTML et docx en PDF/HTML. Mais il y a encore du travail a effectuer sur ce point (surtout docx)
  • utilisation d’une syntaxe Velocity ou Freemarker pour indiquer les champs à remplacer par des valeurs provenant d’un contexte Java.
  • text styling : permet de remplacer des champs par des valeurs Java en HTML pour styler les champs à remplacer. Vous avez une demo surhttp://xdocreport.opensagres.cloudbees.net/textStyling.jsp
  • performances : la génération des rapports s’effectue rapidement.
  • il est possible de mettre les rapports docx, odt dans une application web ou autres et de pouvoir les downloader/uploader via les macro (JAX-RS est utilisé pour cela).

Vous trouverez une démo en ligne sur http://xdocreport.opensagres.cloudbees.net.
Pour information, JBoss Seam Report et Nuxeo ont intégré XDocReport dans leur projet.

2) Eclipse RCP/RAP 

Dans le projet XDocReport, nous avons aussi développé une application Eclipse RCP (client lourd) et RAP (mode web) de gestion de CV orienté SSII (moteur de recherche de CV, creation de CV et génération de CV), gestion de pfiche projet, etc. Vous trouverez une démo en ligne sur http://xdocreport-rap.opensagres.cloudbees.net/xdocreport?startup=fr.opensagres.xdocreport.eclipse.ui.application.

Cette application permet de mettre dans un cas réel l’utilisation de XDocReport pour générer des CV, des fiches projets etc. Elle est aussi intéressante car nous utilisons Spring :

  • Spring DM qui permet d’utiliser Spring dans un contexte OSGi.
  • Spring Data JPA qui je pense devrait être utilisé dans tous les projets qui utilisent JPA. Il est incroyable car il permet d’éviter de coder toutes les requetes JPA de CRUD (create, update delete, find all, find avec pagination, etc) juste en utilisant une règle de nommange dans les méthodes des interfaces.
  • CXF DOSGi avec JAX-RS pour mettre en remoting les services et pouvoir gérer une application RCP en mode client/serveur.

Si vous êtes intéressé par cette architecture, j’ai tout expliqué sur mon blog dans les articles Eclipse RCP/RAP with Spring DM, Spring Data JPA and Remoting.