Skip to content

PDF Oxide vs pypdfium2

Tanto PDF Oxide como pypdfium2 son bibliotecas PDF de Python rápidas y compiladas de forma nativa. pypdfium2 envuelve el motor PDFium de Google; PDF Oxide está construido sobre un núcleo en Rust. La diferencia clave es el alcance: pypdfium2 es principalmente un lector y renderizador, mientras que PDF Oxide cubre todo el ciclo de vida del PDF.

Diferencias clave

Velocidad. Ambos son rápidos. PDF Oxide es ligeramente más rápido: 0,8 ms de media frente a 4,1 ms (diferencia de 5,1×). Ambos son drásticamente más rápidos que las bibliotecas de Python puro.

Funciones. pypdfium2 es de solo lectura con renderizado. PDF Oxide añade creación, edición, escritura de formularios, cifrado, salida en Markdown/HTML y OCR.

Fiabilidad. PDF Oxide procesa con éxito el 100 % de los PDF válidos. pypdfium2 alcanza el 99,2 %: 31 fallos.

Licencia. Ambas son permisivas. PDF Oxide es MIT; pypdfium2 es Apache-2.0. Ninguna plantea preocupaciones de AGPL.

Comparación rápida

PDF Oxide pypdfium2
Tiempo medio de extracción 0,8 ms 4,1 ms
Tasa de éxito (3830 PDF) 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 en Markdown No
Salida en 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 cannot create PDFs.
# It is a read-only library with rendering capabilities.

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 medio de extracción 0,8 ms 4,1 ms
Tiempo de extracción p99 9 ms 42 ms
Tasa de éxito (PDF válidos) 100 % (3823/3823) 99,2 % (3792/3823)

Ambas bibliotecas usan código nativo (Rust y C, respectivamente), pero la canalización de extracción de texto de PDF Oxide está optimizada específicamente para esta tarea: extracción en una sola pasada con búferes preasignados y árboles de páginas en caché.

Consulta la metodología completa del benchmark para conocer los detalles del corpus.

Completitud de funciones

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

Capacidad PDF Oxide pypdfium2
Leer y extraer
Renderizar páginas
Crear PDF Sí (Markdown, HTML, imágenes) No
Editar PDF existentes Sí (texto, imágenes, anotaciones) No
Rellenar campos de formulario No
Escribir cifrado Sí (AES-256) No
Salida en 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 PDF, pypdfium2 es una opción sólida. Si necesitas cualquier capacidad de escritura —creación, edición, relleno de formularios o cifrado—, PDF Oxide es la solución de biblioteca única.

Licencia de pypdfium2 (Apache-2.0)

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

Consideraciones clave:

  • Apache-2.0 — permisiva, permite el uso comercial, requiere atribución
  • Dependencia de PDFium — el binario incluye el motor PDFium de Chromium (~15 MB)
  • Ciclo de lanzamientos de Google — pypdfium2 depende de los lanzamientos de PDFium del proyecto Chromium
  • Sin garantía de estabilidad de la API de 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 la distribución de binarios.

Cuándo usar cada uno

Elige PDF Oxide si:

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

Elige pypdfium2 si:

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

Páginas relacionadas