Skip to content

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:

  1. 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.
  2. 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.
  3. Extração de imagens — O pdfplumber não possui extração de imagens. O PDF Oxide extrai imagens incorporadas em uma única chamada.
  4. 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

  1. Sem gerenciador de contexto — O pdfplumber usa with pdfplumber.open(...) as pdf:. O PDF Oxide não requer gerenciador de contexto.
  2. PDFs criptografados — O pdfplumber não consegue abri-los. O PDF Oxide lida com a criptografia de forma transparente.
  3. 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