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:
- 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.
- 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.
- 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.
- 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
- Sin ajuste de LAParams — PDF Oxide maneja el diseño automáticamente. No es necesario configurar
word_margin,line_margin, etc. - Velocidad — pdfminer es la biblioteca Python de PDF más lenta. PDF Oxide es aproximadamente 30 veces más rápido.
- 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
- Comenzar con Python — guía de instalación
- Extraer texto de PDF — guía de extracción de texto