LuraPDF utilise l'API `getTextContent()` de PDF.js, qui analyse le flux de contenu de chaque page et renvoie un tableau d'éléments de texte. Chaque élément contient la chaîne Unicode, les paramètres de police et la position x/y sur la page. En mode Mise en page, l'extracteur regroupe les éléments par position verticale en lignes, puis trie chaque ligne de gauche à droite, en insérant des espaces proportionnels à l'écart entre les glyphes. Ceci reconstitue approximativement la mise en page visuelle des colonnes et des listes à recoins. En mode Flux, les éléments sont écrits dans l'ordre du flux de contenu sans tri spatial, produisant des paragraphes compacts, idéaux pour les analyseurs lexicaux.
Une fois le texte assemblé, il est encodé dans le jeu de caractères choisi à l'aide de l'API TextEncoder du navigateur et enregistré dans un objet Blob. Une URL d'objet temporaire déclenche le téléchargement. Aucune donnée ne quitte l'onglet du navigateur. Si les sauts de page sont activés, un caractère de saut de page est inséré entre chaque bloc de texte, ce qui simplifie considérablement le fractionnement des pages par programmation. L'ensemble du processus s'exécute de manière synchrone pour chaque page et se termine en moins d'une seconde pour la plupart des documents.