PDF Oxide vs pypdfium2
Tanto o PDF Oxide quanto o pypdfium2 são bibliotecas PDF para Python rápidas e compiladas nativamente. O pypdfium2 encapsula o motor PDFium do Google; o PDF Oxide é construído sobre um núcleo em Rust. A diferença principal é o escopo: o pypdfium2 é primordialmente um leitor e renderizador, enquanto o PDF Oxide cobre todo o ciclo de vida do PDF.
Principais diferenças
Velocidade. Ambos são rápidos. O PDF Oxide é ligeiramente mais rápido: 0,8 ms em média contra 4,1 ms (diferença de 5,1×). Ambos são drasticamente mais rápidos do que bibliotecas em Python puro.
Recursos. O pypdfium2 é somente leitura com renderização. O PDF Oxide adiciona criação, edição, escrita de formulários, criptografia, saída em Markdown/HTML e OCR.
Confiabilidade. O PDF Oxide processa com sucesso 100% dos PDFs válidos. O pypdfium2 atinge 99,2% — 31 falhas.
Licença. Ambas são permissivas. O PDF Oxide é MIT; o pypdfium2 é Apache-2.0. Nenhum deles apresenta preocupações com AGPL.
Comparação rápida
| PDF Oxide | pypdfium2 | |
|---|---|---|
| Tempo médio de extração | 0,8 ms | 4,1 ms |
| 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 em Markdown | Sim | Não |
| Saída em 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,8 ms | 4,1 ms |
| Tempo de extração p99 | 9 ms | 42 ms |
| 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 essa tarefa — extração em passagem única com buffers pré-alocados e árvores de páginas em cache.
Veja a metodologia completa de benchmark para detalhes do corpus.
Completude de recursos
A maior diferença entre essas bibliotecas é o escopo. O pypdfium2 é um leitor com renderização; o PDF Oxide cobre todo o ciclo de vida 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 em 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 precisa de qualquer capacidade de escrita — criação, edição, preenchimento de formulários ou criptografia —, o PDF Oxide é a solução de biblioteca única.
Licença do pypdfium2 (Apache-2.0)
O pypdfium2 é licenciado sob a 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, exige atribuição
- Dependência do PDFium — o binário inclui o motor PDFium do Chromium (~15 MB)
- Ciclo de lançamentos 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 permissiva que a Apache-2.0, sem exigências de atribuição para distribuição de binários.
Quando usar cada um
Escolha o 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% contra 99,2%)
- Velocidade é crítica e a diferença de 5× importa em escala
Escolha o pypdfium2 se:
- Você só precisa ler e renderizar PDFs
- Você prefere a saída de renderização específica do PDFium
- Você quer um menor volume de dependências
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