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:
- 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.
- 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.
- 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.
- 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
- Sin administrador de contexto — pdfplumber usa
with pdfplumber.open(...) as pdf:. PDF Oxide no requiere administrador de contexto. - PDFs cifrados — pdfplumber no puede abrirlos en absoluto. PDF Oxide maneja el cifrado de forma transparente.
- 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
- PDF Oxide vs pdfplumber — comparación detallada
- Comenzar con Python — guía de instalación
- Extraer texto de PDF — guía de extracción de texto