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 | Sí | Sí |
| Posiciones de caracteres | Sí | Sí |
| Extracción de imágenes | Sí | Sí |
| Salida en Markdown | Sí | No |
| Salida en HTML | Sí | No |
| Creación de PDF | Sí | No |
| Edición de PDF | Sí | No |
| Campos de formulario | Lectura + escritura | Solo lectura |
| Cifrado | Lectura + escritura | Solo lectura |
| Renderizado | Sí | Sí |
| OCR | Integrado | No |
| Búsqueda | Regex + espacial | Sí |
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 | Sí | Sí |
| Renderizar páginas | Sí | Sí |
| Crear PDF | Sí (Markdown, HTML, imágenes) | No |
| Editar PDF existentes | Sí (texto, imágenes, anotaciones) | No |
| Rellenar campos de formulario | Sí | No |
| Escribir cifrado | Sí (AES-256) | No |
| Salida en Markdown/HTML | Sí | No |
| OCR de páginas escaneadas | Sí (PaddleOCR vía ONNX) | No |
| Validación PDF/A | Sí | 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
- Benchmarks de rendimiento — resultados completos del corpus
- vs Bibliotecas PDF de Python — todas las bibliotecas de Python comparadas
- Primeros pasos con Python — instalación y primera extracción