Accueil > Outillage > Brèves d’experts : quel(s) outil(s) de production de documents conseiller/utiliser ?

Brèves d’experts : quel(s) outil(s) de production de documents conseiller/utiliser ?

Régulièrement, nos clients veulent générer des documents… qu’à cela ne tienne ! Les outils sont nombreux et variés. Mais justement : lequel choisir ? Jasper (un outil d’expert, semble-t-il) ? Birt (plus orienté reporting et pas facile à manier, non plus) ? Apache POI (gratuit, certes, mais limité) ? A moins qu’on utilise le moteur Open Office, mode batch ? Et pourquoi pas Velocity (mais on me souffle à l’oreillette que c’est plutôt pour les emails/HTML) ? Ou iText ? Ou LaTeX ? Ou Aspose ? Ou Asciidoctor ? Ou txt2tags ? Argh, la liste n’est pas exhaustive et il y a déjà de quoi se perdre !

J’ai espionné quelques Viseo-ODésiens qui en discutaient…

Dominique :

Plusieurs clients m’ont posé récemment la question de la solution optimale pour générer des documents dans une application Java : PDF mais aussi bureautique (MS Office), emails, HTML, etc., le tout de manière paramétrable, si possible. Pourriez-vous me faire part de vos expériences sur le sujet ?

Frédéric :

iText pour les PDF. c’est du codage, mais si tu mixes avec des formulaires PDF dans lesquels tu remplis les champs, tu bénéficies de la capacité à créer ton PDF out of the box (avec les styles et toute la mise en forme) et tu ne fais que remplir des champs. Ça fonctionne assez bien.

POI fonctionne plutôt bien sur les fichiers Excel. On reste dans du codage, mais avec un fluent API maison, on arrive à écrire des doc lisibles, assez simplement.

J’ai utilisé OpenOffice il y a longtemps, dans lequel je faisais des templates avec des styles et tout et tout, puis je mettais des balises dans le XML généré. Du coup je pouvais facilement les remplacer au runtime pour créer un document final. Ça reste de la bidouille, ils doivent proposer des choses maintenant.

De manière générale, je trouve que pour avoir un rendu professionnel avec du Birt ou du Jasper, c’est la misère. Rien qu’en regardant leurs exemples, ça fait pleurer. Je ne connais pas de solution (qui plus est, gratuite) qui soit vraiment satisfaisante en terme de rendu, de support de formats, de simplicité.

Fabien :

Le choix entre une usine comme Jasper ou Birt ou de librairies plus légères comme iText et Apache POI découle essentiellement de la richesse et de la qualité du document attendu.
Jasper et Birt sont des outils dont la prise main est ardue. Ils sont néanmoins d’une extrême puissance et peuvent répondre à la plupart des besoins (indépendamment du type de document). Il faut donc investir un peu en formation. Pour générer du rapport de qualité professionnelle sans se ruiner, il n’y a pas, à ma connaissance, d’alternative à ces technologies.

iText(PDF), POI(Excel) et LaTeX ont l’avantage de la légèreté mais ne permettent pas de générer des documents complexes (pas de designer).

Velocity fait du remplacement de variable « intelligent » au sein d’un texte. Le texte (template de mail, par exemple) qui reçoit le contenu doit donc être fabriqué à l’aide d’un autre outil.

Hugues :

Il y a aussi Aspose que tu peux associer à un langage de script Java pour faire du templating avec des doc Office, mais pas open source…

Youri :

Je confirme la pertinence d’un outil comme Aspose que j’ai proposé de nombreuses fois à mes clients : très bonne lib, complète, capable de gérer pas mal de formats de fichier et versions de format (y compris ceux de Microsoft). De plus, la lib n’est pas très onéreuse si un seul déploiement est effectué.

Hugues :

Sinon, je suis assez fan de Asciidoctor. Nous générons notre doc projet en html/pdf avec l’asciidoctor-maven-plugin. Si c’est pour générer que du texte, pas de graphe et autre joyeuseté, ça peut répondre à ton besoin, après il existe peut-être des extensions à asciidoctor pour générer des graphiques

Cyril, de Ninja Squad :

Oui, Asciidoc(tor) s’en sort plutôt bien pour produire des documents de plusieurs types à partir d’une syntaxe facile à générer même en Java (Markdown++). Et le plugin Asciidoctor Diagram permet de générer des graphiques propres : http://asciidoctor.org/news/2014/02/18/plain-text-diagrams-in-asciidoctor/

Cyrille :

Je suis assez d’accord avec Cyril et Hugues, Asciidoctor est une bonne solution, txt2tags également… si on ne souhaite pas imprimer. En effet, ce sont des formats qui décrivent la sémantique du texte/document et non sa représentativité. Si le rendu est très important, ça peut être limitant.

Chez mon client, on utilise conjointement Alfresco, FreeMarker et LibreOffice

. Alfresco pour le stockage, mais en fait un ftp, nfs ou sshfs aurait pu très bien faire l’affaire. On y stocke les modèles au format OpenDocument et les documents résultat. 
Ces modèles contiennent des champs de fusion qui seront utilisés par FreeMarker pour les remplacer par nos données. Champs de fusion de type « Champs de saisie » dans LibreOffice. Enfin, on utilise une version headless de LibreOffice sur le serveur pour faire de la conversion vers PDF ou DOC si besoin, ou encore pour fusionner des documents.

On utilise aussi FreeMarker avec des modèles .html pour créer des emails, ça fonctionne de la même façon.

Les avantages :

  • Le rendu est bien maîtrisé.
  • Des personnes non techniques peuvent mettre à jour les modèles de documents.
  • Pas besoin d’apprendre deux nouvelles syntaxes (celle du modèle et celle des champs de fusion).
  • Des modifications simples peuvent être réalisées sur les champs.
  • Pas d’installation particulière pour les personnes définissant ces modèles, hors LibreOffice.
  • Les modèles sont lisibles, même non-fusionnés.
  • Facilité de mise à disposition des données pour être lues par FreeMarker (une Map ou un Pojo suffisent).

Les inconvénients de FreeMarker :

  • Les messages d’erreurs de fusion sont abscons.
  • Faire des blocs « if » ou des boucles n’est pas trivial et peu lisible dans le modèle.
  • Mauvaise gestion du « null ».
  • FreeMarker est orienté Java, et me semble difficile à utiliser avec un autre langage. »
  1. eric
    16/11/2014 à 12:43 | #1

    bonjour,

    juste une précision par rapport au commentaire qui dit que « txt2tags est bien /…/ si on ne souhaite pas imprimer. », ce n’est pas tout à fait exact, txt2tags peut exporter dans le format LaTeX, qui est un des meilleurs pour produire des documents imprimés.

    Et comme txt2tags permet également de créer ses propres balises (via le préprocesseur / postprocesseur intégré), on peut indiquer si nécessaire des marques pour la « représentativité ».

  1. Pas encore de trackbacks


+ 1 = sept