Skip to content

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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