Dans le cadre d’une veille stratégique pour un de nos clients publics, nous avons étudié le sujet des outils de générations PDF. Il s’agit de produire des documents PDF respectant les normes d’accessibilité. L’article suivant constitue la 2ème partie sur les bibliothèques de génération PDF libres.
1. Critères de sélection
Nous avons retenu dans cette partie, les solutions disposant :
d’une licence libre ;
des fonctionnalités de création et d’édition de PDF : les outils de conversion PDF seront étudiés ultérieurement ;
d’une activité de développement récente.
Les solutions qui ont été retenues en plus d’iText sont :
PDFBox : boîte à outils Java de la fondation Apache pour manipuler des PDF
PDF Clown : bibliothèque Java et .Net polyvalente
Nous listons ci-dessous les bibliothèques qui n’ont pas été retenues et les motifs
IcePDF1 : modèle freemium, version open source avec uniquement de la lecture de PDF
jPod2 : version open source non maintenu, dernière version 12/2013
JPedal3 : modèle freemium, version open source avec uniquement de la lecture de PDF
PDFJet4 : modèle freemium
2. iText
2.1 Présentation
Licence : AGPL (depuis la version 5)
Site Officiel : http://itextpdf.com/
Dernière version : 5.5.9 (03/2016)
IText est une librairie Java qui permet de générer des fichiers PDF à la volée. Elle a été développée par Bruno Lowagie, un développeur belge de l’Université de Gand en 1998. Le but d’iText est de permettre aux développeurs Java de créer des documents PDF sans connaître les détails du format. La bibliothèque iText est publiée sous double licence libre (MPL/LGPL) en 2000, étape considérée comme importante dans l’ouverture du standard PDF.
En 2009, la société iText Software Corp est fondée et la version 5 du logiciel passe sous une licence AGPL. Les utilisateurs qui ne veulent pas divulguer le code source de leurs applications utilisant iText doivent acheter une licence commerciale pour échapper aux obligation de la licence.
La solution iText a également été portée sur .Net sous le nom de iTextSharp. Un certain nombre de logiciels ont intégré la bibliothèque iText notamment Eclipse BIRT et Jasper Reports.
Si aujourd’hui certains utilisateurs sont restés sur la dernière version 2.1.7 sous licence MPL/LGPL du logiciel, la société dissuade l’utilisation de ces versions. Au-delà des bugs et des lacunes fonctionnelles, les raisons avancées sont également légales :, certaines parties du code d’iText sous MPL/LGPL porteraient atteinte aux droits de propriété intellectuelle. Une entreprise qui n’utiliserait pas iText à partir de la version 5.1 pour ses projets commerciaux, s’exposerait à des poursuites judiciaires des tiers5.
À noter que les PDF générés avec iText contient des filigranes spécifiques qui permettent à la société iText Software Corp de s’assurer du respect de la licence AGPL6. La société iText n’hésite pas à contacter les entreprises fautives pour parvenir à un arrangement commercial.
Il n’est pas possible de supprimer le code d’Itext qui génère les filigranes. En effet, les conditions AGPL7 interdisent expressément que la mention iText soir retiré en particulier la licence AGPL, les droits réservées iText dans les métadonnées du fichier PDF généré.
2.2 Fonctionnalités
IText est particulièrement adapté pour générer des documents PDF dans un environnement Web dynamique. Il permet en particulier de :
Faire un travail d’édition : blocs de texte, colonnes, tableaux, images, annotations, etc ;
Manipuler le contenu d’un PDF : extraire, modifier, fusionner, ajouter des entêtes, etc ;
Faire du cryptage et de la signature électronique.
Les fonctionnalités avancées d’iText 5 non incluses dans la version 2.1.7 sont notamment :
Le marquage des PDF (Tagged PDF) ;
Le support des normes d’archivage PDF/A-1, PDF/A-2 et PDF/A-3 ;
Le support de l’accessibilité PDF/UA ;
La conversion HTML, XML et CSS au PDF (XML Worker) ;
Le support des formulaires avec XFA Forms (XFA Worker) ;
La signature électronique PadES et XFA.
La bibliothèque iText permet donc à la fois de créer et de convertir des documents PDF qui respectent les spécifications avancées du standard PDF.
3 PDFBox
3.1 Présentation
Licence : Apache 2.0
Site Officiel : https://pdfbox.apache.org/
Dernière version : 2.0.0 (01/2016)
PDFBox est une librairie open source qui permet essentiellement de manipuler des PDF. Elle a été développée en 2002 par Ben Litchfield pour l’extraction de texte pour le moteur de recherche Lucene. Le projet rejoint la fondation Apache en 2009. Il est aujourd’hui maintenu par une vingtaine de collaborateurs.
Il est composé de 4 modules
PDFBox qui est le cœur de la librairie ;
FontBox pour gérer l’information sur les polices ;
XMPBox pour gérer les métadonnées XMP ;
Preflight pour vérifier la conformité de PDF à la norme PDF/A-1b.
3.2 Fonctionnalités
La librairie PDFBox est surtout adaptée pour lire ou modifier un PDF existant – extraction de texte, division, fusion de PDF ou remplissage de formulaires. L’interface API fournit un accès de bas niveau au fichier PDF. La création de documents est très rudimentaire et ne permet pas de créer nativement des objets sophistiqués comme des tableaux.
Le module TaggedPDF8 fournit un mécanisme pour incorporer des marquages dans un document, indispensable pour avoir un PDF accessible. Cependant il nécessite un effort de développement complémentaire important pour implémenter l’ensemble du standard PDF/UA dans PDFBox.
4 PDFClown
4.1 Présentation
Licence : LGPL
Site Officiel : http://pdfclown.org/
Dernière version : 0.1.2 (09/2013)
PDFClown est une librairie open source pour manipuler des PDF à travers plusieurs couches d’abstraction et répondant rigoureusement à la norme PDF 1.7. Cette librairie PDF se veut polyvalente en prenant en charge l’ensemble du cycle de vie du PDF (création, édition, affichage, lecture) au sein d’un seul outil. PDFClown est développé par l’italien Stefano Chizzolini.
4.2 Fonctionnalités
Le statut du développement et de support de l’ensemble du standard PDF 1.7 est détaillé sur le site officiel9. Les fonctionnalités autour de la syntaxe, le graphique, le texte et les polices sont relativement complètes.
La roadmap de PDFClown prévoit de développer en priorité le support de l’accessibilité et le marquage des PDF. Nous pouvons cependant émettre des doutes sur la réalisation à court terme de ce travail. En effet la version 0.2.0 prévue pour juillet 2015 n’a jamais été publiée et l’auteur ne s’est pas manifesté depuis.
5. Synthèse
5.1 Comparaison fonctionnelle
Le tableau ci-joint récapitule les fonctionnalités supportées par les bibliothèques de génération PDF étudiées :
iText 2.1.7 | iText 5.x | PdfBox | PDFClown | |
Licence | MPL/LGPL | AGPL | Apache v2 | LGPL |
Type de détenteur | Entreprise | Entreprise | Fondation | Communauté |
Date de la dernière version | 07/2009 | 01/2016 | 03/2016 | 09/2013 |
Modification et édition | Oui | Oui | Oui | Oui |
Division, fusion, extraction | Oui | Oui | Oui | Oui |
Création et mise en page | Oui | Oui | Limité | Oui |
Formulaires | Oui | Oui | Limité | Limité |
Signature et cryptage | Oui | Oui | Limité | Non |
Intégration native JasperReports | Oui | Limité* | Non | Non |
Importation XML/HTML | Non | Oui | Non | Non |
Marquage PDF (Tagged PDF) | Non | Oui | À implémenter | Planifié |
PDF/A | Non | Oui | À implémenter | Planifié |
PDF/UA | Non | Oui | Non | Planifié |
* Officiellement uniquement avec JasperReports de la version 6.0.0 à la version 6.0.3
5.2 Recommandations
Il n’existe aujourd’hui aucune bibliothèque de PDF qui permet de créer des PDF compatibles avec le standard PDF/UA mis à part iText 5 qui est sous licence AGPL.
Nous allons aborder dans la partie suivante d’autres méthodes de génération PDF indirecte notamment :
la conversion XML avec XSL-FO ;
la conversion HTML avec CSS ;
l’export de documents avec LibreOffice ;
le remplissage de modèles de formulaire PDF.