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:
- 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.
- 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.
- 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.
- 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
- PDF Oxide vs pypdf — comparação detalhada
- Começando com Python — guia de instalação
- Extrair texto de PDF — guia de extração de texto