Skip to content

Migrar de pdfplumber a PDF Oxide

Guía completa para migrar de pdfplumber a PDF Oxide, cubriendo todas las APIs que usas actualmente y cómo reemplazarlas.

¿Por qué migrar de pdfplumber?

Cuatro razones convincentes para migrar:

  1. 29 veces más rápido — PDF Oxide procesa en promedio 0.8ms por página, pdfplumber 23.2ms. Un documento de 100 páginas se procesa en 80ms en lugar de 2.3 segundos.
  2. Soporte para PDFs cifrados — pdfplumber no puede abrir PDFs cifrados en absoluto. PDF Oxide maneja todos los métodos de cifrado de forma transparente, incluyendo AES-256.
  3. Extracción de imágenes — pdfplumber no tiene capacidad de extracción de imágenes. PDF Oxide extrae imágenes incrustadas en una sola llamada.
  4. Salida en Markdown — pdfplumber devuelve tablas como listas de Python que necesitan formateo manual. PDF Oxide genera Markdown estructurado con tablas preservadas, listo para usar con LLMs.

Paso 1: Instalación

pip install pdf_oxide
pip uninstall pdfplumber  # opcional

Paso 2: Reemplazar imports

# Antes
import pdfplumber

# Después
from pdf_oxide import PdfDocument

Paso 3: Tabla de mapeo de API

Tarea pdfplumber PDF Oxide
Abrir PDF pdfplumber.open("file.pdf") PdfDocument("file.pdf")
Número de páginas len(pdf.pages) doc.page_count()
Extraer texto pdf.pages[0].extract_text() doc.extract_text(0)
Posiciones de caracteres pdf.pages[0].chars doc.extract_chars(0)
Extraer tablas pdf.pages[0].extract_tables() doc.to_markdown(0)
Campos de formulario No soportado (solo lectura) doc.get_form_fields()
PDF cifrado No soportado PdfDocument("file.pdf", password="pw")
Extraer imágenes No soportado doc.extract_image_bytes(0)
A Markdown No soportado doc.to_markdown(0)
Renderizar No soportado doc.render_page(0)
OCR No soportado doc.extract_text_ocr(0)
Crear PDF No soportado Pdf.from_markdown("# Title")

Paso 4: Cambios en patrones comunes

Extracción de texto

pdfplumber requiere un administrador de contexto. PDF Oxide no:

# pdfplumber — administrador de contexto requerido
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)

# PDF Oxide — sin administrador 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)

Extracción de tablas

pdfplumber devuelve tablas como listas de Python anidadas. PDF Oxide genera Markdown:

# pdfplumber — devuelve 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 — salida Markdown estructurada
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
md = doc.to_markdown(0)
print(md)  # Tablas renderizadas como tablas Markdown

Extracción a nivel de carácter

# 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 cifrados (nueva funcionalidad)

pdfplumber no puede abrir PDFs cifrados. PDF Oxide los maneja de forma transparente:

from pdf_oxide import PdfDocument

# Funciona con cualquier método de cifrado, incluyendo AES-256
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)
print(text)

Extracción de imágenes (nueva funcionalidad)

pdfplumber no tiene extracción de imágenes. PDF Oxide lo hace simple:

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 escaneados (nueva funcionalidad)

pdfplumber no puede procesar PDFs escaneados. PDF Oxide incluye OCR integrado:

from pdf_oxide import PdfDocument

doc = PdfDocument("scanned.pdf")
text = doc.extract_text_ocr(0)
print(text)

Diferencias clave

  1. Sin administrador de contexto — pdfplumber usa with pdfplumber.open(...) as pdf:. PDF Oxide no requiere administrador de contexto.
  2. PDFs cifrados — pdfplumber no puede abrirlos en absoluto. PDF Oxide maneja el cifrado de forma transparente.
  3. Tablas — pdfplumber devuelve listas de Python. PDF Oxide genera tablas en formato Markdown o HTML. Para tablas complejas con depuración visual, puedes usar pdfplumber junto con PDF Oxide.

Paso 5: Probar la migración

Ejecuta tus archivos de prueba existentes con ambas bibliotecas y compara las salidas:

from pdf_oxide import PdfDocument

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

# Verificar extracción 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 formulario (si aplica)
fields = doc.get_form_fields()
for f in fields:
    print(f"{f.name}: {f.value}")

Otras guías de migración

Páginas relacionadas