Skip to content

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