LuraPDF charge votre PDF à l'aide de pdf.js, qui affiche le contenu de chaque page sur un canevas HTML. Une couche interactive fabric.js se superpose au rendu pdf.js, permettant la sélection, le glisser-déposer, le redimensionnement et l'édition de texte. Lorsque vous modifiez un élément de texte, vous modifiez un objet texte fabric.js qui se superpose au rendu PDF original. Les nouveaux objets (formes, signatures, zones de texte, images) sont ajoutés en tant qu'objets fabric.js positionnés sur le canevas. Cette architecture vous offre un éditeur réactif et interactif fonctionnant entièrement dans le navigateur, sans aucune communication avec un serveur.
Lorsque vous cliquez sur « Enregistrer au format PDF », pdf-lib prend le relais. Ce module analyse le PDF d'origine et applique chaque modification aux flux de contenu : les changements de texte sont convertis en opérateurs de texte PDF mis à jour, et les nouveaux objets sont ajoutés sous forme d'objets XObject de formulaire PDF positionnés sur la page. Le résultat est un document PDF/1.7 valide — et non une image aplatie de la page, mais un véritable PDF avec la couche de texte, les hyperliens et les champs de formulaire préservés. Le PDF ainsi généré est téléchargé directement sur votre appareil.