Skip to content

PDF Oxide vs pypdfium2

PDF Oxide y pypdfium2 son bibliotecas PDF para Python rápidas y compiladas nativamente. pypdfium2 envuelve el motor PDFium de Google; PDF Oxide se asienta sobre un núcleo en Rust. La diferencia clave está en el alcance: pypdfium2 es sobre todo lector y renderizador, mientras que PDF Oxide cubre todo el ciclo de vida — creación, extracción, OCR, formularios, cifrado y compliance.

Diferencias clave

Velocidad. Ambas son rápidas. PDF Oxide es ligeramente más rápido: 0.8ms promedio vs 4.1ms (diferencia de 5.1×). Ambas son dramáticamente más rápidas que las bibliotecas de Python puro.

Funcionalidades. pypdfium2 es solo lectura con renderizado. PDF Oxide agrega creación, edición, escritura de formularios, cifrado, salida Markdown/HTML y OCR.

Confiabilidad. PDF Oxide pasa el 100% de los PDFs válidos. pypdfium2 pasa el 99.2% — 31 fallos.

Licencia. Ambas son permisivas. PDF Oxide es MIT; pypdfium2 es Apache-2.0. Sin preocupaciones de AGPL con ninguna.

Comparación rápida

PDF Oxide pypdfium2
Tiempo promedio de extracción 0.8ms 4.1ms
Tasa de éxito (3,830 PDFs) 100% 99.2%
Licencia MIT Apache-2.0
Lenguaje Rust + PyO3 C (PDFium)
Extracción de texto
Posiciones de caracteres
Extracción de imágenes
Salida Markdown No
Salida HTML No
Creación de PDF No
Edición de PDF No
Campos de formulario Lectura + Escritura Solo lectura
Cifrado Lectura + Escritura Solo lectura
Renderizado
OCR Integrado No
Búsqueda Regex + espacial

Código lado a lado

Extracción de texto

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)

pypdfium2:

import pypdfium2 as pdfium

pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
textpage = page.get_textpage()
text = textpage.get_text_range()
print(text)

Extracción de imágenes

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"])

pypdfium2:

import pypdfium2 as pdfium

pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
for i, obj in enumerate(page.get_objects()):
    if obj.type == pdfium.FPDF_PAGEOBJ_IMAGE:
        bitmap = obj.get_bitmap()
        bitmap.to_pil().save(f"image_{i}.png")

Creación de PDF

PDF Oxide:

from pdf_oxide import Pdf

pdf = Pdf.from_markdown("# Report\n\nQuarterly results are in.")
pdf.save("report.pdf")

pypdfium2:

# pypdfium2 no puede crear PDFs.
# Es una biblioteca de solo lectura con capacidades de renderizado.

Renderizado

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
image = doc.render_page(0, dpi=150)
image.save("page.png")

pypdfium2:

import pypdfium2 as pdfium

pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
bitmap = page.render(scale=150/72)
bitmap.to_pil().save("page.png")

Detalles del benchmark

Métrica PDF Oxide pypdfium2
Tiempo promedio de extracción 0.8ms 4.1ms
Tiempo de extracción p99 9ms 42ms
Tasa de éxito (PDFs válidos) 100% (3,823/3,823) 99.2% (3,792/3,823)

Ambas bibliotecas usan código nativo (Rust y C respectivamente), pero el pipeline de extracción de texto de PDF Oxide está optimizado específicamente para esta tarea — extracción en una sola pasada con buffers preasignados y árboles de página en caché.

Ver metodología completa del benchmark para detalles del corpus.

Completitud de funciones

La mayor diferencia entre estas bibliotecas es el alcance. pypdfium2 es un lector con renderizado; PDF Oxide cubre el ciclo de vida completo del PDF:

Capacidad PDF Oxide pypdfium2
Leer y extraer
Renderizar páginas
Crear PDFs Sí (Markdown, HTML, imágenes) No
Editar PDFs existentes Sí (texto, imágenes, anotaciones) No
Llenar campos de formulario No
Escribir cifrado Sí (AES-256) No
Salida Markdown/HTML No
OCR de páginas escaneadas Sí (PaddleOCR vía ONNX) No
Validación PDF/A No

Si solo necesitas leer y renderizar PDFs, pypdfium2 es una opción sólida. Si necesitas cualquier capacidad de escritura — creación, edición, llenado de formularios o cifrado — PDF Oxide es la solución de una sola biblioteca.

Licencia de pypdfium2 (Apache-2.0)

pypdfium2 tiene licencia Apache-2.0, que permite uso comercial. Sin embargo, envuelve el PDFium de Google (el motor PDF de Chromium), que tiene su propia licencia tipo BSD. Ambas son permisivas.

Consideraciones clave:

  • Apache-2.0 — permisiva, permite uso comercial, requiere atribución
  • Dependencia de PDFium — el binario incluye el motor PDFium de Chromium (~15 MB)
  • Ciclo de lanzamiento de Google — pypdfium2 depende de los lanzamientos de PDFium del proyecto Chromium
  • Sin garantía de estabilidad de API Python — la API sigue de cerca la API C de PDFium

PDF Oxide tiene licencia MIT — aún más permisiva que Apache-2.0, sin requisitos de atribución para distribución binaria.

Cuándo usar cada uno

Elige PDF Oxide si:

  • Necesitas más que lectura/renderizado (creación, edición, formularios, cifrado)
  • Quieres conversión Markdown o HTML
  • Quieres OCR integrado para documentos escaneados
  • Necesitas la mayor confiabilidad (100% vs 99.2%)
  • La velocidad es crítica y la diferencia de 5× importa a escala

Elige pypdfium2 si:

  • Solo necesitas leer y renderizar PDFs
  • Prefieres la salida de renderizado específica de PDFium
  • Quieres una huella de dependencias más pequeña

Páginas relacionadas