Skip to content

Architecture ​

Cette page explique comment les couches de pptx-viewer s'articulent entre elles.

Apercu des couches ​

Framework viewers (React / Vue / Angular / Svelte / Vanilla JS)
         │
pptx-viewer-shared      ← logique de rendu independante du framework
         │
pptx-viewer-core        ← moteur : analyse, edition, serialisation
    ├── emf-converter   ← metafichiers EMF/WMF → PNG
    └── mtx-decompressor ← polices MicroType Express

Le package Core ​

Le package Core (pptx-viewer-core) est un moteur purement TypeScript qui s'execute dans n'importe quel environnement JavaScript.

Pipeline de chargement ​

  1. L'appelant passe un ArrayBuffer a handler.load(buffer).
  2. JSZip extrait l'archive ZIP OpenXML.
  3. fast-xml-parser analyse le XML des parties.
  4. Les modules de parsing construisent un PptxData structure.
  5. Les themes, masques et mises en page sont resolus et attaches.

Pipeline de sauvegarde ​

  1. Les diapositives modifiees sont serialisees en XML OpenXML.
  2. Les relations et types de contenu sont reconstruits.
  3. JSZip repackage tout en un Uint8Array.

La composition par mixins du Runtime ​

PptxHandlerRuntime est compose de plus de 90 modules de mixins, chacun gerant un aspect specifique (parsing de texte, graphiques, animations, etc.). Ce pattern maintient les modules petits et concentres.

Les packages de visualiseur ​

Chaque package de visualiseur (React, Vue, Angular, Svelte et Vanilla JS) contient :

  • Composants de rendu - convertissent PptxElement en HTML/CSS/SVG.
  • Etat reactif - gestion de la selection, du zoom, de l'historique d'edition.
  • Hooks/composables - expose les operations du visualiseur (React : 67+ hooks personnalises).
  • Barre d'outils - le ruban Office en Tailwind CSS.

Le rendu CSS ​

Les diapositives sont rendues en HTML et CSS, pas en Canvas. Cela donne :

  • Un texte net a n'importe quel zoom.
  • Une accessibilite native (selection de texte, lecteurs d'ecran).
  • Une interactivite DOM.

La contrepartie est documentee dans les Limitations.

Lectures connexes ​

Released under the Apache-2.0 License.