Skip to content

PDF Oxide vs pypdf

PDF Oxide у 15 разів швидший за pypdf, має вищу частку успіху й одразу приносить рендеринг, експорт у Markdown/HTML, OCR та роботу з формами. Те, заради чого в pypdf збирають стек із кількох пакетів, PDF Oxide робить однією бібліотекою.

Чому розглянути PDF Oxide замість pypdf

Швидкість. pypdf — чистий Python. У PDF Oxide ядро на Rust, підключене через PyO3, працює прямо всередині Python-процесу. Середнє видобування тексту: 0,8 мс проти 12,1 мс — різниця у 15 разів.

Надійність. PDF Oxide проходить усі 3 830 тестових PDF на 100 %. pypdf — 98,4 %, 61 падіння на валідних файлах.

Обсяг можливостей. pypdf — бібліотека для маніпуляцій (склеювання, розділення, поворот, шифрування). Для видобування тексту, рендерингу, виводу в Markdown чи створення форм потрібні додаткові пакети. PDF Oxide покриває все це однією установкою.

Коротке порівняння

PDF Oxide pypdf
Середній час видобування 0,8 мс 12,1 мс
Частка успіху (3 830 PDF) 100 % 98,4 %
Ліцензія MIT BSD-3
Мова Rust + PyO3 Чистий Python
Видобування тексту Так Так
Позиції символів Так Частково
Видобування зображень Так Так
Вивід у Markdown Так Ні
Вивід у HTML Так Ні
Створення PDF Так (Markdown/HTML/зображення) Обмежено (лише склеювання)
Поля форм Читання + запис Читання + запис
Шифрування Читання + запис Читання + запис
Рендеринг Так Ні
OCR Вбудований Ні
Пошук Regex + просторовий Ні
Розмір встановлення ~5 МБ ~1 МБ

Код поруч

Видобування тексту

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)

pypdf:

from pypdf import PdfReader

reader = PdfReader("report.pdf")
text = reader.pages[0].extract_text()
print(text)

Обхід усіх сторінок

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("book.pdf")
for i in range(doc.page_count()):
    text = doc.extract_text(i)
    print(f"--- Page {i + 1} ---")
    print(text)

pypdf:

from pypdf import PdfReader

reader = PdfReader("book.pdf")
for page in reader.pages:
    text = page.extract_text()
    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"])

pypdf:

from pypdf import PdfReader

reader = PdfReader("report.pdf")
page = reader.pages[0]
for i, image in enumerate(page.images):
    with open(f"image_{i}.{image.name.split('.')[-1]}", "wb") as f:
        f.write(image.data)

Зашифровані PDF

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("encrypted.pdf", password="secret")
text = doc.extract_text(0)

pypdf:

from pypdf import PdfReader

reader = PdfReader("encrypted.pdf")
reader.decrypt("secret")
text = reader.pages[0].extract_text()

Конвертація у Markdown

PDF Oxide (вбудовано):

from pdf_oxide import PdfDocument

doc = PdfDocument("paper.pdf")
md = doc.to_markdown(0, detect_headings=True)
print(md)

pypdf:

# У pypdf немає конвертації у Markdown.
# Довелося б будувати окремий набір інструментів.

Подробиці бенчмарку

Метрика PDF Oxide pypdf
Середній час видобування 0,8 мс 12,1 мс
Час p99 9 мс 97 мс
Частка успіху (валідні PDF) 100 % (3 823/3 823) 98,4 % (3 762/3 823)

pypdf повністю на Python, тож кожна операція проходить через інтерпретатор. Ядро PDF Oxide на Rust виконує парсинг, декодування шрифтів і складання тексту нативно, і лише готовий результат перетинає межу з Python.

Докладніше про корпус — у повній методології бенчмарку.

Прогалини у функціоналі

pypdf сильний у маніпуляціях з PDF — склеювання, розділення, поворот, шифрування. Натомість бракує:

Можливість PDF Oxide pypdf
Конвертація у Markdown doc.to_markdown(0) Немає
Конвертація у HTML doc.to_html(0) Немає
Створення PDF із контенту Pdf.from_markdown(), Pdf.from_html() Немає
Рендеринг у зображення Так Немає
OCR для сканованих PDF Вбудований PaddleOCR Немає
Пошук по тексту doc.search("query") Немає
Bounding box по символах doc.extract_chars(0) Частково
Валідація PDF/A Так Немає

Якщо робочий процес — виключно склеювання/розділення/поворот, легкий Python-підхід pypdf цілком доречний. Щойно доходить до якості видобування, створення PDF чи конвертації форматів, PDF Oxide — суттєво повніший варіант.

Коли лишатися на pypdf

  • Потрібна залежність чисто на Python, без скомпільованих розширень
  • Сценарій виключно «склеювання/розділення/поворот/шифрування» без видобування тексту
  • Потрібні конкретні методи pypdf заради інтеграції зі застарілим кодом

Пов’язані сторінки