Présentations .pptx écrites en JavaScript, sans Office installé
PptxGenJS construit des présentations PowerPoint depuis du code JavaScript ou TypeScript. Une présentation se monte en quatre étapes : la créer, ajouter une slide, y poser des objets (texte, tableau, forme, image, média, graphique), enregistrer. Le fichier produit est de l'OOXML standard : PowerPoint, Keynote et LibreOffice Impress l'ouvrent, Google Slides l'importe, et aucune installation d'Office n'entre en jeu. La même bibliothèque tourne dans le navigateur, sous Node.js, dans un Web Worker, dans Electron ou dans une fonction serverless comme AWS Lambda.
Graphiques modifiables dans Excel et masques définis en code
- Graphiques natifs : dix types (aires, barres, barres 3D, bulles, bulles 3D, anneau, courbes, secteurs, radar, nuage de points), et des graphiques combinés avec axe secondaire en option. Chaque graphique embarque son classeur Excel, que PowerPoint rouvre pour en modifier les données.
- Masques de diapositive :
defineSlideMaster()fixe le fond, les marges, les objets récurrents comme un logo, la numérotation et des zones réservées (titre, corps, image, graphique, tableau, média). Le masque devient une vraie disposition du fichier, que l'on retouche ensuite dans le mode Masque des diapositives de PowerPoint. - Tableau HTML découpé en slides :
tableToSlides()reprend un<table>de la page et le répartit sur autant de slides que nécessaire, en-têtes répétés en option. Le style CSS n'est lu qu'au niveau de la cellule, et un tableau imbriqué ne garde que son texte. - Sorties au choix :
writeFile()déclenche un téléchargement dans le navigateur ou écrit sur disque sous Node.js ;write()rend du base64, un Blob, un ArrayBuffer, un Uint8Array ou un Buffer Node ;stream()alimente une réponse HTTP. La compression zip reste désactivée tant qu'on ne la demande pas. - Notes et sections :
addNotes()ajoute les notes du présentateur,addSection()regroupe les slides en sections nommées. - Typage TypeScript : les définitions sont livrées avec le paquet, et le champ
exportsdupackage.jsonoriente chaque bundler vers le build ESM ou CommonJS.
Gabarit d'entreprise à recoder, version 4.1 restée sur une branche
La bibliothèque n'ouvre aucun .pptx existant. Elle écrit des présentations et n'en lit aucune. Son auteur a tranché la question en 2021 dans le ticket #912 : l'import de documents existants « ne sera jamais implémenté ». Le modèle PowerPoint d'une entreprise ne se charge donc pas tel quel. Il se redécrit avec defineSlideMaster(), coordonnées en pouces ou en pourcentage de la slide.
Une option erronée se découvre à l'ouverture du fichier. Une valeur mal typée ou hors limites peut produire un XML non conforme ; PowerPoint propose alors de réparer la présentation, sans désigner l'élément fautif. La documentation consacre une page à ces erreurs « needs repair » et conseille de retirer slides puis objets un à un jusqu'à trouver la cause. Les versions 4.0.0 et 4.0.1 en corrigent encore, dans la pagination automatique des tableaux.
Le paquet npm déclare quatre dépendances. Le README annonce « zero runtime dependencies », mais le package.json de la 4.0.1 en liste quatre : JSZip, image-size, https et @types/node. La documentation d'intégration demande Node.js 18 ou plus. Elle signale aussi qu'un build Webpack 5, celui de Docusaurus 3.7 dans son exemple, échoue sur les modules préfixés node: tant qu'un plugin ne les écarte pas.
La dernière version, 4.0.1, date de juin 2025. Elle suit la 4.0.0 de mai 2025, publiée plus de deux ans après la 3.12.0 de mars 2023. La branche principale n'a plus reçu de commit depuis. Une branche version-4.1.0 en a reçu jusqu'en août 2025 sans aboutir à une publication. Au 26 octobre 2026, le dépôt compte 236 tickets et 70 pull requests ouverts.
