Frameworks PHP : Modules complémentaires (4/4)

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
PDF133

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