Skip to content

Migrar do pypdf para o PDF Oxide

Guia completo para migrar do pypdf para o PDF Oxide, cobrindo todas as APIs que você usa atualmente e como substituí-las.

Por que migrar do pypdf?

Quatro razões convincentes para migrar:

  1. 15x mais rápido — O PDF Oxide processa em média 0,8ms por página, contra 12,1ms do pypdf. O processamento de um documento de 500 páginas cai de 6 segundos para 0,4 segundos.
  2. 100% de confiabilidade — O PDF Oxide passa 100% da suíte de testes PDF. O pypdf falha em 1,6% dos arquivos (98,4% de aprovação), o que significa saída incorreta em aproximadamente 1 a cada 60 documentos.
  3. Markdown e HTML integrados — O pypdf extrai apenas texto puro. O PDF Oxide converte páginas para Markdown (preservando tabelas e estrutura) e HTML, essencial para pipelines de LLM e RAG.
  4. OCR e renderização integrados — O pypdf não possui OCR nem renderização de páginas. O PDF Oxide inclui PaddleOCR para documentos digitalizados e renderiza páginas em imagens sem dependências externas.

Passo 1: Instalação

pip install pdf_oxide
pip uninstall pypdf  # opcional

Passo 2: Substituir imports

# Antes
from pypdf import PdfReader, PdfWriter, PdfMerger

# Depois
from pdf_oxide import PdfDocument, Pdf

Passo 3: Tabela de mapeamento de API

Tarefa pypdf PDF Oxide
Abrir PDF PdfReader("file.pdf") PdfDocument("file.pdf")
Número de páginas len(reader.pages) doc.page_count()
Extrair texto reader.pages[0].extract_text() doc.extract_text(0)
Extrair imagens reader.pages[0].images doc.extract_image_bytes(0)
Campos de formulário reader.get_fields() doc.get_form_fields()
Metadados reader.metadata doc.metadata()
PDF criptografado reader.decrypt("pw") PdfDocument("file.pdf", password="pw")
Mesclar PDFs PdfMerger() + .append() doc.merge_from("doc2.pdf")
Dividir páginas PdfWriter() + .add_page() doc.extract_pages([0,1,2,3,4], "out.pdf")
Para Markdown Não disponível doc.to_markdown(0)
Renderizar Não disponível doc.render_page(0)
OCR Não disponível doc.extract_text_ocr(0)

Passo 4: Mudanças em padrões comuns

Extração de texto

# pypdf
from pypdf import PdfReader
reader = PdfReader("report.pdf")
for page in reader.pages:
    print(page.extract_text())

# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
    print(doc.extract_text(i))

Mesclar PDFs

O pypdf requer a criação de um objeto merger e a adição de arquivos um a um. O PDF Oxide faz em uma única chamada:

# pypdf
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("doc1.pdf")
merger.append("doc2.pdf")
merger.write("merged.pdf")

# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("doc1.pdf")
doc.merge_from("doc2.pdf")
doc.save("merged.pdf")

Dividir / extrair páginas

# pypdf — cópia manual página a página
from pypdf import PdfReader, PdfWriter
reader = PdfReader("report.pdf")
writer = PdfWriter()
for page in reader.pages[0:5]:
    writer.add_page(page)
writer.write("first_5_pages.pdf")

# PDF Oxide — uma chamada
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
doc.extract_pages([0, 1, 2, 3, 4], "first_5_pages.pdf")

PDFs criptografados

# pypdf — dois passos: open + decrypt
from pypdf import PdfReader
reader = PdfReader("encrypted.pdf")
reader.decrypt("password")
text = reader.pages[0].extract_text()

# PDF Oxide — senha no construtor
from pdf_oxide import PdfDocument
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)

Conversão para Markdown (nova funcionalidade)

O pypdf não suporta Markdown. O PDF Oxide facilita a integração de PDFs em pipelines de LLM:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
    md = doc.to_markdown(i)
    print(md)

Extração de imagens

# pypdf
from pypdf import PdfReader
reader = PdfReader("report.pdf")
for image in reader.pages[0].images:
    with open(image.name, "wb") as f:
        f.write(image.data)

# 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"])

Passo 5: Testando a migração

Execute seus arquivos de teste existentes em ambas as bibliotecas e compare as saídas:

from pdf_oxide import PdfDocument

doc = PdfDocument("your-test-file.pdf")

# Verificar extração de texto
text = doc.extract_text(0)
print(text[:500])

# Verificar número de páginas
print(f"Pages: {doc.page_count()}")

# Verificar campos de formulário (se aplicável)
fields = doc.get_form_fields()
for f in fields:
    print(f"{f.name}: {f.value}")

Outros guias de migração

Páginas relacionadas