Skip to content

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
  • Вам нужен меньший объём зависимостей

Связанные страницы