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 | Sí | Sí |
| Posiciones de caracteres | Sí | Sí |
| Extracción de imágenes | Sí | Sí |
| Salida Markdown | Sí | No |
| Salida 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 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 | Sí | Sí |
| Renderizar páginas | Sí | Sí |
| Crear PDFs | Sí (Markdown, HTML, imágenes) | No |
| Editar PDFs existentes | Sí (texto, imágenes, anotaciones) | No |
| Llenar campos de formulario | Sí | No |
| Escribir cifrado | Sí (AES-256) | No |
| Salida 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 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
- Benchmarks de rendimiento — resultados completos del corpus
- vs Bibliotecas PDF para Python — todas las bibliotecas Python comparadas
- Primeros pasos con Python — instalación y primera extracción