Como Desenvolvemos o Parser de PDF do LeafTok em React Native
Desenvolver um parser de PDF parece simples até você colocar em produção. Essa foi nossa jornada técnica:
Extrair texto completo + metadados de PDFs (até 100MB) no iOS/Android pro nosso app de leitura no estilo TikTok. Tinha que ser rápido, confiável e eficiente com memória.
Módulos Nativos
Criamos o react-native-pdf-text-extractor com:
- iOS: Wrapper em Swift do PDFKit
- Android: Wrapper em Kotlin do PDFBox Android 2.0.27
- Config do módulo Expo pra integração clean
O Problema da Bridge
A bridge do React Native trunca strings grandes (limite ~2KB). Nossa solução:
- iOS: Escrever texto extraído em arquivo temp e retornar o path
- Android: Processamento em chunks com validação antecipada
- Layer JS: Auto-detectar truncamento e disparar fallback página a página
Gestão de Memória
Android estava crashando em PDFs grandes. Resolvemos com:
- Processar 10 páginas de cada vez
- Forçar GC a cada 30 páginas
- Loading do PDDocument baseado em streams
- Try-catch com tratamento específico pra OOM
Fallbacks Inteligentes
Criamos uma cascata:
- Extração nativa (mais rápida)
- Extração paralela por páginas (20 páginas/lote)
- Somente metadados (pdf-lib JS)
Resultados em Produção
- 99.7% de sucesso na extração
- <3s para PDFs comuns
- Zero crashes por OOM em 3 meses
- Lida com PDFs criptografados + escaneados
A beleza do React Native não é escrever uma vez e rodar em qualquer lugar, é construir as abstrações certas sobre implementações específicas de cada plataforma.
Stack: React Native • Expo • PDFKit • PDFBox • TypeScript • Kotlin • Swift