Migrar do pdfplumber para o PDF Oxide
Guia completo para migrar do pdfplumber para o PDF Oxide, cobrindo todas as APIs que você usa atualmente e como substituí-las.
Por que migrar do pdfplumber?
Quatro razões convincentes para migrar:
- 29x mais rápido — O PDF Oxide processa em média 0,8ms por página, contra 23,2ms do pdfplumber. Um documento de 100 páginas é processado em 80ms em vez de 2,3 segundos.
- Suporte a PDFs criptografados — O pdfplumber não consegue abrir PDFs criptografados. O PDF Oxide lida com todos os métodos de criptografia de forma transparente, incluindo AES-256.
- Extração de imagens — O pdfplumber não possui extração de imagens. O PDF Oxide extrai imagens incorporadas em uma única chamada.
- Saída em Markdown — O pdfplumber retorna tabelas como listas Python que precisam de formatação manual. O PDF Oxide gera Markdown estruturado com tabelas preservadas, pronto para uso com LLMs.
Passo 1: Instalação
pip install pdf_oxide
pip uninstall pdfplumber # opcional
Passo 2: Substituir imports
# Antes
import pdfplumber
# Depois
from pdf_oxide import PdfDocument
Passo 3: Tabela de mapeamento de API
| Tarefa | pdfplumber | PDF Oxide |
|---|---|---|
| Abrir PDF | pdfplumber.open("file.pdf") |
PdfDocument("file.pdf") |
| Número de páginas | len(pdf.pages) |
doc.page_count() |
| Extrair texto | pdf.pages[0].extract_text() |
doc.extract_text(0) |
| Posições de caracteres | pdf.pages[0].chars |
doc.extract_chars(0) |
| Extrair tabelas | pdf.pages[0].extract_tables() |
doc.to_markdown(0) |
| Campos de formulário | Não suportado (somente leitura) | doc.get_form_fields() |
| PDF criptografado | Não suportado | PdfDocument("file.pdf", password="pw") |
| Extrair imagens | Não suportado | doc.extract_image_bytes(0) |
| Para Markdown | Não suportado | doc.to_markdown(0) |
| Renderizar | Não suportado | doc.render_page(0) |
| OCR | Não suportado | doc.extract_text_ocr(0) |
| Criar PDF | Não suportado | Pdf.from_markdown("# Title") |
Passo 4: Mudanças em padrões comuns
Extração de texto
O pdfplumber requer um gerenciador de contexto. O PDF Oxide não precisa:
# pdfplumber — gerenciador de contexto obrigatório
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
for page in pdf.pages:
text = page.extract_text()
print(text)
# PDF Oxide — sem gerenciador de contexto
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
text = doc.extract_text(i)
print(text)
Extração de tabelas
O pdfplumber retorna tabelas como listas Python aninhadas. O PDF Oxide gera Markdown:
# pdfplumber — retorna lista de listas
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
tables = pdf.pages[0].extract_tables()
for table in tables:
for row in table:
print(row)
# PDF Oxide — saída Markdown estruturada
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
md = doc.to_markdown(0)
print(md) # Tabelas renderizadas como tabelas Markdown
Extração em nível de caractere
# pdfplumber
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
chars = pdf.pages[0].chars
for c in chars:
print(f"{c['text']} at ({c['x0']}, {c['top']})")
# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
chars = doc.extract_chars(0)
for c in chars:
print(f"{c.char} at ({c.x}, {c.y})")
PDFs criptografados (nova funcionalidade)
O pdfplumber não consegue abrir PDFs criptografados. O PDF Oxide lida com eles de forma transparente:
from pdf_oxide import PdfDocument
# Funciona com qualquer método de criptografia, incluindo AES-256
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)
print(text)
Extração de imagens (nova funcionalidade)
O pdfplumber não possui extração de imagens. O PDF Oxide torna isso simples:
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"])
OCR para documentos digitalizados (nova funcionalidade)
O pdfplumber não consegue processar PDFs digitalizados. O PDF Oxide inclui OCR integrado:
from pdf_oxide import PdfDocument
doc = PdfDocument("scanned.pdf")
text = doc.extract_text_ocr(0)
print(text)
Principais diferenças
- Sem gerenciador de contexto — O pdfplumber usa
with pdfplumber.open(...) as pdf:. O PDF Oxide não requer gerenciador de contexto. - PDFs criptografados — O pdfplumber não consegue abri-los. O PDF Oxide lida com a criptografia de forma transparente.
- Tabelas — O pdfplumber retorna listas Python. O PDF Oxide gera tabelas em formato Markdown ou HTML. Para tabelas complexas com depuração visual, você pode manter o pdfplumber junto com o PDF Oxide.
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 pdfplumber — comparação detalhada
- Começando com Python — guia de instalação
- Extrair texto de PDF — guia de extração de texto