LuraPDF utilizza l'API getTextContent() di PDF.js, che analizza il flusso di contenuto di ogni pagina e restituisce un array di elementi di testo, ognuno dei quali contiene la stringa Unicode, le metriche del font e la posizione x/y sulla pagina. In modalità Layout, l'estrattore raggruppa gli elementi in righe in base alla posizione verticale, quindi ordina ogni riga da sinistra a destra, inserendo spazi proporzionali alla distanza tra i glifi. Questo ricostruisce il layout visivo approssimativo di colonne ed elenchi rientrati. In modalità Stream, gli elementi vengono scritti nell'ordine del flusso di contenuto senza ordinamento spaziale, producendo paragrafi compatti, formato preferito dai tokenizzatori.
Una volta assemblato il testo, viene codificato nel set di caratteri scelto utilizzando l'API TextEncoder del browser e scritto in un Blob. Un URL temporaneo dell'oggetto avvia il download. Nessun dato lascia la scheda del browser in alcun momento. Se i marcatori di interruzione di pagina sono abilitati, un carattere di avanzamento pagina viene inserito tra i blocchi di testo di ciascuna pagina, semplificando la suddivisione programmatica delle pagine. L'intero processo viene eseguito in modo sincrono per ogni pagina e si completa in meno di un secondo per la maggior parte dei documenti.