Migrar de pypdf a PDF Oxide
Guía completa para migrar de pypdf a PDF Oxide, cubriendo todas las APIs que usas actualmente y cómo reemplazarlas.
¿Por qué migrar de pypdf?
Cuatro razones convincentes para migrar:
- 15 veces más rápido — PDF Oxide procesa en promedio 0.8ms por página, pypdf 12.1ms. El procesamiento de un documento de 500 páginas baja de 6 segundos a 0.4 segundos.
- 100% de confiabilidad — PDF Oxide pasa el 100% de la suite de pruebas PDF. pypdf falla en 1.6% de los archivos (98.4% de aprobación), lo que significa salida incorrecta en aproximadamente 1 de cada 60 documentos.
- Markdown y HTML integrados — pypdf solo puede extraer texto plano. PDF Oxide convierte páginas a Markdown (preservando tablas y estructura) y HTML, esencial para pipelines de LLM y RAG.
- OCR y renderizado integrados — pypdf no tiene OCR ni renderizado de páginas. PDF Oxide incluye PaddleOCR para documentos escaneados y puede renderizar páginas como imágenes sin dependencias externas.
Paso 1: Instalación
pip install pdf_oxide
pip uninstall pypdf # opcional
Paso 2: Reemplazar imports
# Antes
from pypdf import PdfReader, PdfWriter, PdfMerger
# Después
from pdf_oxide import PdfDocument, Pdf
Paso 3: Tabla de mapeo de API
| Tarea | pypdf | PDF Oxide |
|---|---|---|
| Abrir PDF | PdfReader("file.pdf") |
PdfDocument("file.pdf") |
| Número de páginas | len(reader.pages) |
doc.page_count() |
| Extraer texto | reader.pages[0].extract_text() |
doc.extract_text(0) |
| Extraer imágenes | reader.pages[0].images |
doc.extract_image_bytes(0) |
| Campos de formulario | reader.get_fields() |
doc.get_form_fields() |
| Metadatos | reader.metadata |
doc.metadata() |
| PDF cifrado | reader.decrypt("pw") |
PdfDocument("file.pdf", password="pw") |
| Combinar PDFs | PdfMerger() + .append() |
doc.merge_from("doc2.pdf") |
| Dividir páginas | PdfWriter() + .add_page() |
doc.extract_pages([0,1,2,3,4], "out.pdf") |
| A Markdown | No disponible | doc.to_markdown(0) |
| Renderizar | No disponible | doc.render_page(0) |
| OCR | No disponible | doc.extract_text_ocr(0) |
Paso 4: Cambios en patrones comunes
Extracción de texto
# pypdf
from pypdf import PdfReader
reader = PdfReader("report.pdf")
for page in reader.pages:
print(page.extract_text())
# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
print(doc.extract_text(i))
Combinar PDFs
pypdf requiere crear un objeto merger y agregar archivos uno por uno. PDF Oxide lo hace en una sola llamada:
# pypdf
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("doc1.pdf")
merger.append("doc2.pdf")
merger.write("merged.pdf")
# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("doc1.pdf")
doc.merge_from("doc2.pdf")
doc.save("merged.pdf")
Dividir / extraer páginas
# pypdf — copia manual página por página
from pypdf import PdfReader, PdfWriter
reader = PdfReader("report.pdf")
writer = PdfWriter()
for page in reader.pages[0:5]:
writer.add_page(page)
writer.write("first_5_pages.pdf")
# PDF Oxide — una sola llamada
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
doc.extract_pages([0, 1, 2, 3, 4], "first_5_pages.pdf")
PDFs cifrados
# pypdf — dos pasos: open + decrypt
from pypdf import PdfReader
reader = PdfReader("encrypted.pdf")
reader.decrypt("password")
text = reader.pages[0].extract_text()
# PDF Oxide — contraseña en el constructor
from pdf_oxide import PdfDocument
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)
Conversión a Markdown (nueva funcionalidad)
pypdf 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 imágenes
# pypdf
from pypdf import PdfReader
reader = PdfReader("report.pdf")
for image in reader.pages[0].images:
with open(image.name, "wb") as f:
f.write(image.data)
# PDF Oxide
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"])
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 pypdf — comparación detallada
- Comenzar con Python — guía de instalación
- Extraer texto de PDF — guía de extracción de texto