Skip to content

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