PDF Oxide vs pypdfium2
И PDF Oxide, и pypdfium2 — быстрые, нативно скомпилированные библиотеки для работы с PDF на Python. pypdfium2 оборачивает движок PDFium от Google; PDF Oxide построена на ядре Rust. Ключевое различие — в охвате: pypdfium2 в основном служит для чтения и рендеринга, тогда как PDF Oxide покрывает весь жизненный цикл PDF.
Ключевые различия
Скорость. Обе библиотеки быстрые. PDF Oxide немного быстрее: в среднем 0,8 мс против 4,1 мс (разница в 5,1 раза). Обе несравнимо быстрее, чем библиотеки на чистом Python.
Возможности. pypdfium2 работает только на чтение с рендерингом. PDF Oxide добавляет создание, редактирование, запись форм, шифрование, вывод в Markdown/HTML и OCR.
Надёжность. PDF Oxide успешно обрабатывает 100% корректных PDF. pypdfium2 проходит 99,2% — 31 сбой.
Лицензия. Обе лицензии разрешительные. PDF Oxide — MIT; pypdfium2 — Apache-2.0. Ни в одной нет проблем с AGPL.
Краткое сравнение
| PDF Oxide | pypdfium2 | |
|---|---|---|
| Среднее время извлечения | 0,8 мс | 4,1 мс |
| Доля успеха (3830 PDF) | 100% | 99,2% |
| Лицензия | MIT | Apache-2.0 |
| Язык | Rust + PyO3 | C (PDFium) |
| Извлечение текста | Да | Да |
| Позиции символов | Да | Да |
| Извлечение изображений | Да | Да |
| Вывод в Markdown | Да | Нет |
| Вывод в HTML | Да | Нет |
| Создание PDF | Да | Нет |
| Редактирование PDF | Да | Нет |
| Поля форм | Чтение + запись | Только чтение |
| Шифрование | Чтение + запись | Только чтение |
| Рендеринг | Да | Да |
| OCR | Встроенный | Нет |
| Поиск | Регулярные выражения + пространственный | Да |
Сравнение кода
Извлечение текста
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)
Извлечение изображений
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")
Создание 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.
Рендеринг
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")
Подробности бенчмарка
| Метрика | PDF Oxide | pypdfium2 |
|---|---|---|
| Среднее время извлечения | 0,8 мс | 4,1 мс |
| Время извлечения p99 | 9 мс | 42 мс |
| Доля успеха (корректные PDF) | 100% (3823/3823) | 99,2% (3792/3823) |
Обе библиотеки используют нативный код (Rust и C соответственно), но конвейер извлечения текста PDF Oxide оптимизирован именно под эту задачу — извлечение за один проход с предварительно выделенными буферами и кешированными деревьями страниц.
Подробности о корпусе см. в полной методологии бенчмарка.
Полнота функционала
Главное различие между этими библиотеками — охват. pypdfium2 — это средство чтения с рендерингом; PDF Oxide покрывает весь жизненный цикл PDF:
| Возможность | PDF Oxide | pypdfium2 |
|---|---|---|
| Чтение и извлечение | Да | Да |
| Рендеринг страниц | Да | Да |
| Создание PDF | Да (Markdown, HTML, изображения) | Нет |
| Редактирование существующих PDF | Да (текст, изображения, аннотации) | Нет |
| Заполнение полей форм | Да | Нет |
| Запись шифрования | Да (AES-256) | Нет |
| Вывод в Markdown/HTML | Да | Нет |
| OCR отсканированных страниц | Да (PaddleOCR через ONNX) | Нет |
| Проверка PDF/A | Да | Нет |
Если вам нужно только читать и рендерить PDF, pypdfium2 — надёжный выбор. Если же вам нужны любые возможности записи — создание, редактирование, заполнение форм или шифрование, — PDF Oxide станет решением «всё в одной библиотеке».
Лицензия pypdfium2 (Apache-2.0)
pypdfium2 распространяется под лицензией Apache-2.0, которая разрешает коммерческое использование. Однако она оборачивает PDFium от Google (движок PDF из Chromium), у которого собственная лицензия в стиле BSD. Обе лицензии разрешительные.
Ключевые соображения:
- Apache-2.0 — разрешительная, допускает коммерческое использование, требует указания авторства
- Зависимость от PDFium — бинарный файл включает движок PDFium из Chromium (~15 МБ)
- Цикл выпусков Google — pypdfium2 зависит от релизов PDFium проекта Chromium
- Нет гарантии стабильности Python API — API близко следует за C API PDFium
PDF Oxide лицензирована под MIT — ещё более разрешительной, чем Apache-2.0, без требований указания авторства при распространении бинарных файлов.
Когда что использовать
Выбирайте PDF Oxide, если:
- Вам нужно больше, чем чтение/рендеринг (создание, редактирование, формы, шифрование)
- Вам нужна конвертация в Markdown или HTML
- Вам нужен встроенный OCR для отсканированных документов
- Вам нужна максимальная надёжность (100% против 99,2%)
- Скорость критична, и пятикратная разница имеет значение при масштабировании
Выбирайте pypdfium2, если:
- Вам нужно только читать и рендерить PDF
- Вы предпочитаете именно рендеринг PDFium
- Вам нужен меньший объём зависимостей
Связанные страницы
- Бенчмарки производительности — полные результаты по корпусу
- vs Python-библиотеки для PDF — сравнение всех Python-библиотек
- Начало работы с Python — установка и первое извлечение