Executando verificação de segurança...
5

PDF Oxide — biblioteca PDF em Rust com bindings Python (0.8ms, 100% pass rate, MIT)

Criei uma biblioteca de extração de texto de PDF escrita em Rust com bindings para Python via PyO3. Licença MIT.

O problema: a maioria das bibliotecas PDF em Python te obriga a escolher entre velocidade, confiabilidade e licença permissiva. PyMuPDF é rápido mas AGPL-3.0. pypdf é MIT mas 15× mais lento. pdfplumber é ótimo para tabelas mas lento para processamento em lote.

PDF Oxide resolve isso: 0.8ms de latência média, 100% pass rate em 3.830 PDFs reais, licença MIT.

Benchmarks

Testado em 3.830 PDFs de três suítes públicas (veraPDF, Mozilla pdf.js, DARPA SafeDocs):

BibliotecaMédiap99Pass RateLicença
PDF Oxide0.8ms9ms100%MIT
PyMuPDF4.6ms28ms99.3%AGPL-3.0
pypdfium24.1ms42ms99.2%Apache/BSD
pypdf12.1ms97ms98.4%BSD
pdfplumber23.2ms189ms98.8%MIT

Instalação

Python:

pip install pdf_oxide

Rust:

cargo add pdf_oxide

Exemplo rápido (Python)

from pdf_oxide import PdfDocument

doc = PdfDocument("documento.pdf")
for i in range(doc.page_count()):
    print(doc.extract_text(i))

Exemplo rápido (Rust)

use pdf_oxide::PdfDocument;

let mut doc = PdfDocument::open("documento.pdf")?;
for i in 0..doc.page_count()? {
    println!("{}", doc.extract_text(i)?);
}

Conversão para Markdown

from pdf_oxide import PdfDocument

doc = PdfDocument("relatorio.pdf")
for i in range(doc.page_count()):
    print(doc.to_markdown(i))  # preserva headings, bold, listas

O que faz

  • Extração de texto com decodificação completa de fontes (Latin, CJK, árabe, fontes customizadas)
  • Conversão para Markdown com detecção de headings
  • Extração de imagens
  • Criação de PDF a partir de Markdown e HTML
  • Manipulação de páginas (merge, split, rotação)
  • Preenchimento de formulários
  • OCR integrado (PaddleOCR via ONNX Runtime)
  • Criptografia/descriptografia

Por que 100% pass rate importa

Com 98.4% de pass rate (pypdf), você perde ~60 documentos em 3.830. Em um pipeline processando 50K documentos, são ~800 falhas silenciosas — documentos que retornam texto vazio ou corrompido. Em pipelines RAG, isso significa documentos que nunca entram no índice vetorial.

Arquitetura

Escrito do zero em Rust — sem MuPDF, sem Poppler. Parser construído com nom (parser combinators), extração de texto conforme a especificação PDF (operadores Tc/Tw/Tz), gap statistics adaptativo para detecção de espaçamento, XY-Cut para layout multi-coluna, cadeia de fallback multi-nível para decodificação de fontes.

A jornada de otimização: 23.3ms → 0.8ms. Cache bulk do page tree transformou um PDF de 10.000 páginas de 55s para 332ms (O(n²) → O(1)).

GitHub: https://github.com/yfedoseev/pdf_oxide
Docs: https://oxide.fyi

Se quiserem testar com PDFs que outras bibliotecas não conseguem processar, adoraria ouvir o feedback.

Carregando publicação patrocinada...