Dans le cadre d’une veille stratégique pour un de nos clients publics, nous avons étudié le sujet des frameworks PHP. Il s’agit de faire des préconisations pour aider à l’industrialisation de la filière de développement. L’article suivant constitue la 3ème partie avec un complément d’information sur les extensions bureautiques.
1. Documents bureautiques
La manipulation des documents textes et feuilles de calcul est bien prise en charge par des librairies sous PHP. Le projet PHPOffice114 est aujourd’hui un des plus matures avec les composants PHPWord et PHPExcel qui sont les plus utilisés.
Nom | Licence | Description |
PHPExcel115 | LGPL | Permet de lire et écrire les fichiers xls, xlsx, csv, ods, etc. Compatible avec CodeIgniter116. |
LaravelExcel117 | LGPL | Version spécifique de PHPExcel pour Laravel |
ExcelBundle118 | MIT | Version spécfique de PHPExcel pour Symfony |
PHPWord119 | LGPLv3 | Permet de lire et écrire les fichiers doc, docx (OOXML et OpenXML), ODF, RTF, etc. Des instructions d’intégration sont disponibles pour CodeIgniter120. |
LaravelWord121 | LGPL | Version spécifique de PHPWord pour Laravel |
phpword122 | LGPL | Version spécifique de PHPWord pour Symfony 2 |
Nous recommandons à l’Administration de continuer à utiliser PHPExcel et de remplacer rtflib par PHPWord dans un souci d’homogénéité. Ces composants ont une version spécifique avec un nom différent pour les frameworks Symfony et Laravel.
2 Génération de PDF
L’import et l’export de PDF est une fonctionnalité essentielle pour l’Administration relativement bien prise en charge par les librairies PHP. Il existe aujourd’hui de nombreuses librairies.
Nom | Licence | Description |
PDFLib Lite | « open source » | Version open source non maintenue. Usage strictement non commercial ou obligation de publication du code source de l’application utilisant PDFLib Lite123. Usage non recommandé. |
DomPDF124 | LGPL v2.1 (*) | Moteur de rendu HTML compatible avec les feuilles de style CSS utilisant PDFlib . Intégré avec PHPExcel et PHPWord. |
FPDF125 | LGPL v3 | Moteur PHP de génération de PDF qui se distingue par le non-recours à PDFlib. La solution n’est cependant plus maintenu. |
FPDI126 | MIT | Extension de FPDF pour lire les PDF. Il peux être utilisé pour produire des templates pour FPDF ou TCPDF. Compatible avec Symfony127. |
TCPDF128 | GPL | Basé sur FPDF, le composant lit et génère des PDF. Il fournit davantage d’options et gère en grande partie le HTML et le Javascript. Des adaptations existent pour Symfony129, Laravel130 et CodeIgniter131. |
HTML2PDF132 | LGPL | Convertisseur basée sur TCPDF pour faciliter la création de PDF à partir de pages HTML |
PHPGearbox | MIT | Convertisseur de PDF à partir de templates .docx remplissables utilisant Libreoffice et son outil Uniconv. Il est possible d’utiliser les templates générés par PHPWord. |
(*) Si la licence du code du port est open source, la licence du logiciel sous-jacent reste applicable.
Nous recommandons à l’Administration d’utiliser TCPDF pour les nouvelles applications au lieu de FPDF. Le composant FPDI qui fonctionne également avec TCPDF est conservé. À noter qu’à notre connaissance, il n’existe pas de librairie PDF libre qui permet de convertir des documents bureautiques hormis PDFlib. Cependant, dans le cas de génération de PDF dont quelques champs de texte changent, il est possible d’utiliser PHPGearbox PDF.
3. Génération de graphes
Il existe deux types de librairies pour générer des graphes : côté client ou côté serveur. L’avantage des librairies côté serveur est la compatibilité avec tous les appareils et navigateurs car les graphes sont sous forme d’images. L’inconvénient est une sollicitation plus importante du serveur et de la bande passante pour générer les images. La tendance aujourd’hui est de recourir des bibliothèques en javascript côté client pour offrir plus de fonctionnalités comme des animations et des interactions aux utilisateurs. Pour ces librairies, c’est le navigateur du client qui récupère du serveur les données en JSON ou en XML et se charge de l’affichage des graphiques localement. Elles offrent des animations et des interactions. Si le développeur ne souhaite pas coder directement en Javascript, il existe également des wrappers PHP qui se chargent de générer le code Javascript et HTML des graphiques sur le serveur à partir des librairies javascript. Ce code peut ensuite être transmis dans la page pour afficher le graphique.
La liste inclut uniquement des librairies PHP :
Nom | Licence | Description |
pChart134 | « GPLv3 » | Librairie pour générer des graphiques côté serveur. Des ports pour Laravel135 et Symfony136 existent. Usage strictement non commercial137. Plus de nouvelle version depuis 2 ans. Usage non recommandé. |
Lavacharts138 | MIT (*) | Wrapper PHP de Google Charts, compatible avec Symfony et Laravel. À noter qu’une connexion au serveur de Google est obligatoire pour le client et le serveur139. |
PHPGraphLib140 | MIT | Alternative libre à pChart pour tout usage. Il couvre seulement les graphiques simples (en ligne, à barre ou camembert). Il n’existe pas à notre connaissance de ports pour les frameworks PHP étudiés. |
Chart.JS-PHP141 | MIT | Wrapper PHP de la librairie côté client très populaire Chart-JS pour générer des charts plus rapidement. Seuls les modèles de graphiques simples sont supportés. |
(*) Si la licence du code du port est open source, la licence du logiciel sous-jacent reste applicable.
Il est souhaitable de ne plus utiliser pChart pour être en conformité avec les conditions d’utilisation de pChart. Si elle souhaite absolument reprendre une librairie côté serveur purement PHP, il convient de prendre PHPGraphLib qui est moins riche en fonctionnalité. La démarche à long terme que nous recommandons pour générer des graphiques est d’adopter une librairie comme Chart.JS. Dans ce cas, il convient de travailler dans le cadre de la refonte des modèles de page, sur des exemples de code toute faite pour différents types de graphique qui pourront ensuite être réutilisés facilement par les développeurs. À noter que les librairies comme Chart.JS, ne rentrent pas à proprement parler dans les composants d’un framework PHP.
Références
120http://www.ahowto.net/php/creating-ms-word-document-using-codeigniter-and-phpword/ (site inaccessible)