O LuraPDF utiliza a API getTextContent() do PDF.js, que analisa o fluxo de conteúdo de cada página e retorna um array de itens de texto — cada um contendo a string Unicode, as métricas da fonte e a posição x/y na página. No modo Layout, o extrator agrupa os itens por posição vertical em linhas e, em seguida, ordena cada linha da esquerda para a direita, inserindo espaços proporcionais à distância entre os glifos. Isso reconstrói o layout visual aproximado de colunas e listas recuadas. No modo Stream, os itens são gravados na ordem do fluxo de conteúdo, sem ordenação espacial — produzindo parágrafos compactos, que são preferidos pelos analisadores léxicos.
Após a montagem do texto, ele é codificado para o conjunto de caracteres escolhido usando a API TextEncoder do navegador e gravado em um Blob. Um URL de objeto temporário aciona o download. Nenhum dado sai da aba do navegador em nenhum momento. Se os marcadores de quebra de página estiverem habilitados, um caractere de alimentação de formulário é inserido entre os blocos de texto de cada página, tornando a divisão programática de páginas trivial. Todo o processo é executado de forma síncrona por página e concluído em menos de um segundo para a maioria dos documentos.