Skip to content

Migrar de pdfminer.six a PDF Oxide

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

¿Por qué migrar de pdfminer?

Cuatro razones convincentes para migrar:

  1. Aproximadamente 30 veces más rápido — pdfminer es la biblioteca Python de PDF más lenta entre las principales. PDF Oxide procesa en promedio 0.8ms por página mientras que pdfminer toma decenas de milisegundos. Tareas por lotes que tomaban minutos ahora se completan en segundos.
  2. Mantenimiento activo — pdfminer.six recibe actualizaciones con poca frecuencia y tiene un gran número de issues abiertos. PDF Oxide se desarrolla activamente con lanzamientos regulares.
  3. Biblioteca todo-en-uno — pdfminer solo hace extracción de texto. PDF Oxide también crea PDFs, los edita, renderiza páginas como imágenes, extrae imágenes, procesa formularios y convierte a Markdown/HTML.
  4. Sin configuración necesaria — pdfminer requiere ajuste manual de LAParams (word_margin, line_margin, char_margin) para obtener resultados aceptables. PDF Oxide detecta el diseño automáticamente.

Paso 1: Instalación

pip install pdf_oxide
pip uninstall pdfminer.six  # opcional

Paso 2: Reemplazar imports

# Antes
from pdfminer.high_level import extract_text, extract_pages
from pdfminer.layout import LAParams

# Después
from pdf_oxide import PdfDocument

Paso 3: Tabla de mapeo de API

Tarea pdfminer PDF Oxide
Extraer texto extract_text("file.pdf") PdfDocument("file.pdf").extract_text(0)
Extraer páginas extract_pages("file.pdf") Página por página con doc.extract_text(i)
Análisis de diseño Configuración LAParams() Detección de diseño integrada
Posiciones de caracteres Objetos LTChar doc.extract_chars(0)
PDF cifrado Limitado (falla con AES-256) Soporte completo
A Markdown No soportado doc.to_markdown(0)
Campos de formulario No soportado doc.get_form_fields()

Paso 4: Cambios en patrones comunes

Extracción básica de texto

extract_text de pdfminer procesa el documento completo de una vez. PDF Oxide ofrece control por página:

# pdfminer — documento completo de una vez
from pdfminer.high_level import extract_text
text = extract_text("report.pdf")
print(text)

# PDF Oxide — control por página
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
    text = doc.extract_text(i)
    print(text)

Análisis de diseño

pdfminer requiere configuración manual de LAParams. PDF Oxide lo hace automáticamente:

# pdfminer — configuración manual de diseño
from pdfminer.high_level import extract_text
from pdfminer.layout import LAParams

params = LAParams(
    word_margin=0.1,
    line_margin=0.5,
    char_margin=2.0,
    boxes_flow=0.5,
)
text = extract_text("report.pdf", laparams=params)

# PDF Oxide — detección automática de diseño
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)  # Diseño procesado automáticamente

Extracción a nivel de carácter

pdfminer usa un árbol complejo de objetos de diseño. PDF Oxide devuelve una lista plana:

# pdfminer — recorrer árbol de diseño
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTChar, LTTextBox

for page_layout in extract_pages("report.pdf"):
    for element in page_layout:
        if isinstance(element, LTTextBox):
            for line in element:
                for char in line:
                    if isinstance(char, LTChar):
                        print(f"{char.get_text()} at ({char.x0}, {char.y0})")

# PDF Oxide — lista plana de caracteres
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for c in doc.extract_chars(0):
    print(f"{c.char} at ({c.x}, {c.y})")

PDFs cifrados

pdfminer tiene soporte limitado de cifrado y falla con archivos AES-256:

# pdfminer — falla con muchos PDFs cifrados
from pdfminer.high_level import extract_text
text = extract_text("encrypted.pdf", password="password")
# Puede generar error con archivos cifrados con AES-256

# PDF Oxide — soporte completo de cifrado
from pdf_oxide import PdfDocument
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)  # Funciona con todos los métodos de cifrado

Conversión a Markdown (nueva funcionalidad)

pdfminer no soporta Markdown. PDF Oxide facilita la integración de PDFs en 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)

Extracción de campos de formulario (nueva funcionalidad)

pdfminer no puede extraer campos de formulario. PDF Oxide sí:

from pdf_oxide import PdfDocument

doc = PdfDocument("form.pdf")
fields = doc.get_form_fields()
for f in fields:
    print(f"{f.name}: {f.value}")

Renderizado de páginas (nueva funcionalidad)

pdfminer no tiene capacidad de renderizado. PDF Oxide puede renderizar páginas como imágenes:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
png_bytes = doc.render_page(0, dpi=150)
with open("page.png", "wb") as f:
    f.write(png_bytes)

Diferencias clave

  1. Sin ajuste de LAParams — PDF Oxide maneja el diseño automáticamente. No es necesario configurar word_margin, line_margin, etc.
  2. Velocidad — pdfminer es la biblioteca Python de PDF más lenta. PDF Oxide es aproximadamente 30 veces más rápido.
  3. Todo-en-uno — pdfminer solo hace extracción. PDF Oxide también crea, edita y renderiza PDFs.

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