PDF Oxide vs pypdfium2
O PDF Oxide e o pypdfium2 são bibliotecas PDF para Python rápidas e compiladas nativamente. O pypdfium2 encapsula o motor PDFium do Google; o PDF Oxide se apoia em um núcleo Rust. A diferença crucial é o escopo: o pypdfium2 é sobretudo leitor e renderizador, enquanto o PDF Oxide cobre o ciclo de vida completo — criação, extração, OCR, formulários, criptografia e compliance.
Principais Diferenças
Velocidade. Ambos são rápidos. O PDF Oxide é ligeiramente mais rápido: 0.8ms de média vs 4.1ms (diferença de 5.1×). Ambos são dramaticamente mais rápidos que bibliotecas em Python puro.
Funcionalidades. O pypdfium2 é somente leitura com renderização. O PDF Oxide adiciona criação, edição, escrita de formulários, criptografia, saída Markdown/HTML e OCR.
Confiabilidade. O PDF Oxide passa 100% dos PDFs válidos. O pypdfium2 passa 99.2% — 31 falhas.
Licença. Ambas são permissivas. O PDF Oxide é MIT; o pypdfium2 é Apache-2.0. Sem preocupações com AGPL em nenhuma das duas.
Comparação Rápida
| PDF Oxide | pypdfium2 | |
|---|---|---|
| Tempo médio de extração | 0.8ms | 4.1ms |
| Taxa de aprovação (3.830 PDFs) | 100% | 99.2% |
| Licença | MIT | Apache-2.0 |
| Linguagem | Rust + PyO3 | C (PDFium) |
| Extração de texto | Sim | Sim |
| Posições de caracteres | Sim | Sim |
| Extração de imagens | Sim | Sim |
| Saída Markdown | Sim | Não |
| Saída HTML | Sim | Não |
| Criação de PDF | Sim | Não |
| Edição de PDF | Sim | Não |
| Campos de formulário | Leitura + Escrita | Somente leitura |
| Criptografia | Leitura + Escrita | Somente leitura |
| Renderização | Sim | Sim |
| OCR | Integrado | Não |
| Busca | Regex + espacial | Sim |
Código Lado a Lado
Extração de Texto
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)
pypdfium2:
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
textpage = page.get_textpage()
text = textpage.get_text_range()
print(text)
Extração de Imagens
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
images = doc.extract_image_bytes(0)
for i, img in enumerate(images):
with open(f"image_{i}.{img['format']}", "wb") as f:
f.write(img["data"])
pypdfium2:
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
for i, obj in enumerate(page.get_objects()):
if obj.type == pdfium.FPDF_PAGEOBJ_IMAGE:
bitmap = obj.get_bitmap()
bitmap.to_pil().save(f"image_{i}.png")
Criação de PDF
PDF Oxide:
from pdf_oxide import Pdf
pdf = Pdf.from_markdown("# Report\n\nQuarterly results are in.")
pdf.save("report.pdf")
pypdfium2:
# pypdfium2 cannot create PDFs.
# It is a read-only library with rendering capabilities.
Renderização
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
image = doc.render_page(0, dpi=150)
image.save("page.png")
pypdfium2:
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
bitmap = page.render(scale=150/72)
bitmap.to_pil().save("page.png")
Detalhes do Benchmark
| Métrica | PDF Oxide | pypdfium2 |
|---|---|---|
| Tempo médio de extração | 0.8ms | 4.1ms |
| Tempo de extração p99 | 9ms | 42ms |
| Taxa de aprovação (PDFs válidos) | 100% (3.823/3.823) | 99.2% (3.792/3.823) |
Ambas as bibliotecas usam código nativo (Rust e C respectivamente), mas o pipeline de extração de texto do PDF Oxide é otimizado especificamente para esta tarefa — extração em passagem única com buffers pré-alocados e árvores de página em cache.
Veja a metodologia completa de benchmark para detalhes do corpus.
Completude de Funcionalidades
A maior diferença entre essas bibliotecas é o escopo. O pypdfium2 é um leitor com renderização; o PDF Oxide cobre o ciclo de vida completo do PDF:
| Capacidade | PDF Oxide | pypdfium2 |
|---|---|---|
| Ler e extrair | Sim | Sim |
| Renderizar páginas | Sim | Sim |
| Criar PDFs | Sim (Markdown, HTML, imagens) | Não |
| Editar PDFs existentes | Sim (texto, imagens, anotações) | Não |
| Preencher campos de formulário | Sim | Não |
| Escrever criptografia | Sim (AES-256) | Não |
| Saída Markdown/HTML | Sim | Não |
| OCR de páginas digitalizadas | Sim (PaddleOCR via ONNX) | Não |
| Validação PDF/A | Sim | Não |
Se você só precisa ler e renderizar PDFs, o pypdfium2 é uma escolha sólida. Se você precisa de qualquer capacidade de escrita — criação, edição, preenchimento de formulários ou criptografia — o PDF Oxide é a solução em biblioteca única.
Licença do pypdfium2 (Apache-2.0)
O pypdfium2 é licenciado sob Apache-2.0, que permite uso comercial. No entanto, ele encapsula o PDFium do Google (o motor PDF do Chromium), que tem sua própria licença no estilo BSD. Ambas são permissivas.
Considerações principais:
- Apache-2.0 — permissiva, permite uso comercial, requer atribuição
- Dependência do PDFium — o binário inclui o motor PDFium do Chromium (~15 MB)
- Ciclo de lançamento do Google — o pypdfium2 depende dos lançamentos do PDFium do projeto Chromium
- Sem garantia de estabilidade da API Python — a API segue de perto a API C do PDFium
O PDF Oxide é licenciado sob MIT — ainda mais permissivo que Apache-2.0, sem requisitos de atribuição para distribuição de binários.
Quando Usar Cada Uma
Escolha PDF Oxide se:
- Você precisa de mais do que leitura/renderização (criação, edição, formulários, criptografia)
- Você quer conversão para Markdown ou HTML
- Você quer OCR integrado para documentos digitalizados
- Você precisa da maior confiabilidade (100% vs 99.2%)
- Velocidade é crítica e a diferença de 5× importa em escala
Escolha pypdfium2 se:
- Você só precisa ler e renderizar PDFs
- Você prefere a saída de renderização específica do PDFium
- Você quer uma pegada de dependência menor
Páginas Relacionadas
- Benchmarks de Desempenho — resultados completos do corpus
- vs Bibliotecas PDF para Python — todas as bibliotecas Python comparadas
- Primeiros Passos com Python — instalação e primeira extração