Technical

Como funciona a edição de PDFs baseada em navegador (e por que a privacidade é importante)

Uma explicação técnica de como o LuraPDF processa PDFs inteiramente no seu navegador usando pdf-lib, pdfjs-dist, Tesseract.js e WebAssembly — sem uploads, sem nuvem e sem exposição de dados.

LuraPDF Team
LuraPDF Team

Editorial & Technical Team · May 6, 2026 · 11 min read

Cada vez que você carrega um documento para uma ferramenta de PDF na nuvem, esse documento fica armazenado em servidores que você não controla, processado por um software que você não pode inspecionar e guardado por uma empresa com suas próprias políticas de retenção e segurança de dados. Por um curto período, a infraestrutura de terceiros armazena seus contratos, declarações de imposto de renda, prontuários médicos ou documentos comerciais confidenciais.

O LuraPDF funciona de forma diferente. Tudo acontece na aba do seu navegador, no seu hardware, com o gerenciamento de memória do seu sistema operacional. Este artigo explica a arquitetura técnica que torna isso possível e as compensações de engenharia envolvidas.

O navegador como plataforma de processamento de documentos

Os navegadores modernos não são mais apenas renderizadores de HTML. Eles são ambientes completos de execução de aplicativos com:

  • Mecanismo JavaScript (V8 no Chrome, SpiderMonkey no Firefox): executa o código em velocidade quase nativa
  • WebAssembly (WASM): executa código C/C++ compilado em velocidade quase nativa dentro de um ambiente isolado (sandbox).
  • API Canvas: permite a manipulação de imagens em nível de pixel.
  • API de Acesso ao Sistema de Arquivos: permite a leitura de arquivos locais sem a necessidade de enviá-los para o sistema.
  • Web Workers: executa cálculos em threads em segundo plano sem congelar a interface do usuário.
  • ArrayBuffer / Blob: gerencia dados binários brutos (como bytes de PDF) na memória.

Em conjunto, essas funcionalidades possibilitam um fluxo de processamento de documentos completo, que há cinco anos exigiria um servidor de back-end.

As três bibliotecas principais

O LuraPDF é construído sobre três bibliotecas fundamentais de código aberto:

biblioteca pdf

pdf-lib é uma biblioteca TypeScript para criar e modificar documentos PDF em qualquer ambiente JavaScript. Ela implementa uma parte substancial da especificação PDF (ISO 32000), incluindo:

  • Criação, modificação e exclusão de páginas
  • Incorporação de fontes (tanto fontes padrão do Google quanto fontes TTF/OTF personalizadas)
  • Incorporação de imagens (JPEG, PNG)
  • Posicionamento de anotações de texto
  • Criação e manipulação de campos de formulário
  • Metadados do documento (título, autor, data de criação, etc.)
  • Criptografia de PDF (AES-128 e AES-256)
  • Gerenciamento de tabelas de referência cruzada

Quando o LuraPDF mescla PDFs, ele usa a biblioteca pdf-lib para ler a árvore de páginas de cada documento, normalizar os recursos compartilhados e montar um novo PDF. Ao comprimir, ele recodifica os objetos de imagem com fatores de qualidade mais baixos. Ao criptografar, ele aplica o algoritmo AES-256 ao documento usando a API Web Crypto.

A biblioteca pdf-lib opera inteiramente com objetos ArrayBuffer — dados binários brutos na memória do navegador. Nenhuma chamada de rede é feita.

pdfjs-dist

O PDF.js é o mecanismo de renderização de PDF da Mozilla, distribuído como pdfjs-dist no npm. É o mecanismo que alimenta o visualizador de PDF integrado do Firefox, testado com milhões de PDFs reais.

O LuraPDF utiliza o pdfjs-dist para:

  • Renderização de páginas: Convertendo páginas PDF em dados de imagem Canvas para exibição.
  • Extração de texto: Leitura do conteúdo textual de páginas PDF.
  • Metadados da página: Obtenção das dimensões da página, valores de rotação e tipo de conteúdo.

Quando você vê seu PDF renderizado na interface do LuraPDF — a pré-visualização visual das páginas — isso significa que o pdfjs-dist está renderizando cada página em um elemento Canvas HTML.

Tesseract.js

Tesseract.js é a versão compilada em WebAssembly do Tesseract OCR. O Tesseract é um mecanismo de OCR de código aberto originalmente desenvolvido pela HP Labs (1985) e atualmente mantido pelo Google. Ele utiliza um modelo de rede neural LSTM (Long Short-Term Memory) para reconhecimento de caracteres.

Executar o Tesseract via WebAssembly no navegador significa:

O binário WASM de 22 MB é carregado uma única vez e armazenado em cache pelo navegador. O processamento de OCR é executado na CPU via WebAssembly, não na GPU. O processamento é mais lento do que o OCR na nuvem (que usa clusters de GPUs), mas produz a mesma qualidade de saída. O conteúdo do seu documento nunca sai do seu dispositivo.

Para uma digitalização de 20 páginas: o OCR do navegador leva aproximadamente de 30 a 120 segundos. Um serviço em nuvem pode levar de 2 a 5 segundos. A escolha é entre privacidade e velocidade.

A Arquitetura: Do Arquivo ao Resultado

Eis o que acontece quando você, por exemplo, compacta um PDF no LuraPDF:

  1. Seleção de arquivo: Você arrasta um PDF para a área de soltar. A API de Arquivos do navegador lê o arquivo e o armazena em um ArrayBuffer — bytes brutos na memória do navegador. Nenhum upload é realizado.

  2. Validação: Uma verificação rápida para garantir que os bytes mágicos %PDF apareçam no início do ArrayBuffer.

  3. Carregamento: PDFDocument.load() da pdf-lib analisa a tabela de referências cruzadas, lê a árvore de objetos e constrói uma representação do documento na memória.

  4. Enumeração de imagens: A biblioteca percorre os fluxos de conteúdo da página para encontrar objetos XObject de imagem (imagens incorporadas). A largura, a altura, o tipo de compressão e os dados em bytes de cada imagem são extraídos.

  5. Recodificação: Para cada imagem, os dados brutos dos pixels são desenhados em um elemento Canvas HTML e, em seguida, reexportados com um fator de qualidade JPEG inferior usando canvas.toBlob('image/jpeg', quality) . O objeto de imagem original é substituído pela versão codificada com tamanho menor.

  6. Serialização de documentos: O método save() da biblioteca pdf-lib serializa o documento modificado de volta para bytes. Os fluxos de objetos são comprimidos com DEFLATE.

  7. Download: Os bytes são encapsulados em um objeto Blob, um URL de objeto temporário é criado ( URL.createObjectURL(blob) ) e um clique programático <a> aciona o mecanismo de download do navegador.

Total de dados transmitidos para qualquer servidor externo: zero bytes.

Web Workers: Mantendo a interface do usuário responsiva

O processamento de PDFs exige muito da CPU. Executá-lo na thread principal do JavaScript congelaria a aba do navegador — você não conseguiria rolar a página, clicar ou ver atualizações de progresso enquanto o arquivo estivesse sendo processado.

O LuraPDF executa todos os cálculos complexos (OCR, análise de PDFs grandes, recodificação de imagens) em Web Workers — threads JavaScript separadas que são executadas em segundo plano. A thread principal gerencia a interface do usuário, exibe as barras de progresso e se comunica com o worker por meio de troca de mensagens (postMessage / onmessage).

Quando o OCR está em execução, um evento de progresso é disparado após cada página ser processada. O processo envia { page: 5, total: 20, confidence: 94 } para a thread principal, que atualiza a barra de progresso. Sua interface permanece interativa durante todo o processo.

Gerenciamento de memória

A memória do navegador é finita. Um PDF de 200 MB carregado na memória, processado e salvo pode exigir de 400 a 600 MB de RAM (bytes originais + dados intermediários do Canvas + bytes de saída). Em sistemas com RAM limitada, isso pode causar sobrecarga de memória.

Estratégias utilizadas:

  • Processamento de páginas em fluxo contínuo: Para operações com várias páginas, as páginas são processadas e os elementos Canvas intermediários são descartados após o uso.
  • URL.revokeObjectURL(): URLs temporários de blobs são revogados após o download para permitir a coleta de lixo.
  • Encerramento de Workers: Os Web Workers são encerrados após concluírem suas tarefas para liberar a memória utilizada.

Para arquivos muito grandes (acima de 100 MB), os navegadores modernos lidam com isso sem problemas em sistemas com 8 GB ou mais de RAM. Sistemas mais antigos ou com memória limitada podem ter dificuldades com arquivos de origem de mais de 100 MB.

A Arquitetura de Privacidade

O modelo de segurança é aplicado pela política de mesma origem e pela arquitetura de isolamento do navegador:

  • Sem requisições HTTP: Sem chamadas de API externas, sem telemetria, sem chamadas de análise durante o processamento de documentos.
  • Execução em sandbox: Web Workers não podem fazer chamadas de rede para origens externas.
  • Sem armazenamento persistente: Os arquivos processados ​​não são gravados no armazenamento do navegador (localStorage, IndexedDB ou acesso ao sistema de arquivos).
  • Memória com escopo de aba: Ao fechar a aba, todos os objetos ArrayBuffer e Blob associados a ela são coletados pelo coletor de lixo.

Essa arquitetura é verificável: abra a aba Rede do navegador nas Ferramentas de Desenvolvedor enquanto processa um arquivo. Você verá zero requisições durante a operação de processamento.

Bibliotecas de código aberto: inspecionáveis, não caixas pretas

Todas as três bibliotecas principais — pdf-lib, pdfjs-dist e Tesseract.js — são de código aberto com repositórios públicos no GitHub. As implementações podem ser inspecionadas por qualquer pessoa. O código de processamento de PDF que roda no LuraPDF não é uma caixa preta proprietária; é código público com usuários reais, problemas relatados e contribuições.

Isso é importante para a confiança. Quando um serviço em nuvem diz "processamos e excluímos seus arquivos", você está acreditando na palavra deles. Quando o LuraPDF usa bibliotecas de código aberto em um ambiente isolado do navegador, sem chamadas de rede, você pode verificar essa afirmação observando a aba de rede.

Vantagens e desvantagens do processamento em nuvem

O modelo baseado em navegador apresenta desvantagens reais que merecem ser consideradas com honestidade:

Velocidade: Os serviços em nuvem possuem clusters de GPUs e infraestrutura dedicada. O OCR em navegador, ao processar um documento grande, leva de 2 a 10 vezes mais tempo do que um equivalente em nuvem. A compressão é rápida porque utiliza a API Canvas diretamente.

Limites de tamanho de arquivo: A limitação está na memória do navegador. Arquivos muito grandes (acima de 300 MB) podem atingir os limites de memória em alguns sistemas. Serviços em nuvem não têm essa limitação.

Poder de processamento: O WASM opera a 40-80% da velocidade do C++ nativo. Os serviços em nuvem executam código nativo otimizado. Para a maioria dos documentos, essa diferença é imperceptível; para trabalhos de OCR com mais de 100 páginas, ela se torna perceptível.

Recursos: Alguns recursos avançados de PDF (verificação de conformidade com PDF/X, gerenciamento de cores profissional, fluxos de trabalho CMYK) exigem ferramentas especializadas no servidor. O processamento baseado em navegador lida com 95% dos casos.

Para o processamento diário de documentos — compactação, fusão, assinatura, conversão, redação — o modelo baseado em navegador é suficientemente rápido, privado por natureza e não requer conta ou assinatura.

Perguntas Frequentes

O LuraPDF coleta dados de telemetria ou de uso? O LuraPDF utiliza o Google Analytics para obter estatísticas agregadas de visualizações de página. As operações de processamento de documentos não geram eventos analíticos. O conteúdo dos seus arquivos nunca é transmitido.

Posso confirmar que nenhum upload ocorreu? Sim. Abra as Ferramentas de Desenvolvedor (F12), clique na aba Rede, filtre por "XHR" ou "Fetch". Processe um arquivo. Observe que não houve nenhuma requisição de rede relacionada ao documento durante o processamento.

Por que o OCR demora tanto em comparação com outros serviços? O Tesseract.js, baseado em navegador, é executado na CPU por meio do WebAssembly. Os serviços de OCR em nuvem são executados em clusters de GPUs que processam caracteres ordens de magnitude mais rapidamente. A desvantagem é que seu documento nunca sai do navegador.

O que acontece se eu fechar a aba durante o processamento? O processamento é interrompido imediatamente. A memória da aba do navegador é coletada pelo coletor de lixo. Seu arquivo original no disco permanece inalterado.

O código é de código aberto? As bibliotecas principais de processamento (pdf-lib, pdfjs-dist, Tesseract.js) são de código aberto. O código da interface do LuraPDF não é atualmente de código aberto, mas o pipeline de processamento utiliza apenas componentes de código aberto.

A transição para o processamento de documentos baseado em navegador não é um mero artifício. Trata-se de uma escolha arquitetônica genuína, com vantagens mensuráveis ​​em termos de privacidade e confiabilidade — ao custo de velocidade em operações intensivas. Para documentos que você preferiria que não existissem no servidor de terceiros, é a compensação ideal.

About the author

LuraPDF Team
LuraPDF Team

Editorial & Technical Team · May 6, 2026 · 11 min read

The LuraPDF team consists of document processing experts, software engineers, and technical writers dedicated to making professional PDF editing free, private, and accessible.