Skip to content

PyMuPDF vs pypdf

PyMuPDF та pypdf — дві з найпопулярніших бібліотек PDF для Python, але обидві мають значні компроміси. PyMuPDF швидка, але заблокована ліцензією AGPL-3.0. pypdf має дозвільну ліцензію, але у 15× повільніша. Ця сторінка порівнює їх безпосередньо — та показує, чому PDF Oxide є кращим вибором, ніж будь-яка з них.

Коротка відповідь: PDF Oxide у 5.8× швидший за PyMuPDF, у 15× швидший за pypdf, з ліцензією MIT, та має більше функцій, ніж обидві — включаючи вбудований вивід Markdown/HTML, підтримку форм XFA та OCR без системних залежностей.

Швидке порівняння

PyMuPDF pypdf PDF Oxide
Ліцензія AGPL-3.0 BSD-3 MIT
Мова C (MuPDF) Чистий Python Rust + PyO3
Середній час вилучення 4.6мс 12.1мс 0.8мс
Час вилучення p99 28мс 97мс 9мс
Рівень успіху (3 830 PDF) 99.3% 98.4% 100%
Вилучення тексту Так Так Так
Позиції символів Так Частково Так
Вилучення зображень Так Так Так
Поля форм Читання + Запис Читання + Запис Читання + Запис
Створення PDF Так Обмежено (тільки об’єднання) Так (Markdown/HTML)
Вивід Markdown Ні Ні Так
Вивід HTML Ні Ні Так
Рендеринг Так Ні Так
OCR Tesseract Ні Вбудований (PaddleOCR)
Шифрування Читання + Запис Читання + Запис Читання + Запис

Ліцензування: AGPL vs BSD vs MIT

PyMuPDF — AGPL-3.0

PyMuPDF використовує MuPDF під ліцензією AGPL-3.0. Це сильна copyleft-ліцензія. Якщо ви розповсюджуєте будь-яке програмне забезпечення, що використовує PyMuPDF — включаючи SaaS-застосунки, Docker-контейнери, веб-сервіси, десктопні застосунки або CLI-інструменти — весь ваш застосунок повинен бути випущений під AGPL-3.0.

Альтернатива — придбання комерційної ліцензії від Artifex. Ціни не публікуються; потрібно зв’язатися з їхнім відділом продажів.

pypdf — BSD-3

pypdf використовує ліцензію BSD 3-Clause, яка є дозвільною. Ви можете використовувати pypdf у комерційних продуктах без зобов’язань відкривати код.

PDF Oxide — MIT

PDF Oxide має ліцензію MIT — найбільш дозвільну поширену ліцензію відкритого коду.

Підсумок ліцензування

Випадок використання PyMuPDF (AGPL) pypdf (BSD) PDF Oxide (MIT)
Комерційний продукт Потребує ліцензію Так Так
SaaS із закритим кодом Потребує ліцензію Так Так
Розповсюдження Docker Потребує ліцензію Так Так
Внутрішні інструменти Так Так Так
Відкритий код (сумісний з AGPL) Так Так Так
Відкритий код (MIT/BSD/Apache) Ні Так Так

Бенчмарки швидкості

Швидкість вилучення тексту

Бібліотека Середнє p99 Відносно PDF Oxide
PDF Oxide 0.8мс 9мс
PyMuPDF 4.6мс 28мс У 5.8× повільніший
pypdf 12.1мс 97мс У 15.1× повільніший

Надійність

Бібліотека Оброблено валідних PDF Рівень успіху
PDF Oxide 3 823 / 3 823 100%
PyMuPDF 3 796 / 3 823 99.3%
pypdf 3 762 / 3 823 98.4%

Що це означає на практиці

Для пайплайна, що обробляє тисячі PDF щоденно, 99,3 % показник PyMuPDF означає приблизно 7 збоїв на 1 000 документів. У pypdf показник 98,4 % — це 16 збоїв на 1 000. Ці документи доведеться обробляти резервною логікою, вручну переглядати або просто втрачати як “недоступні”.

100 % показник PDF Oxide на тестовому корпусі означає менше граничних випадків у продакшені.

Порівняння функцій

Вилучення тексту

Усі три бібліотеки підтримують базове вилучення тексту. API відрізняються стилем:

PyMuPDF:

import fitz

doc = fitz.open("report.pdf")
page = doc[0]
text = page.get_text()
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("report.pdf")
text = doc.extract_text(0)
print(text)

Усі три дають порівнянний текст на коректних PDF. PyMuPDF і PDF Oxide мають схожу продуктивність; pypdf у 15× повільніший.

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

PyMuPDF:

# PyMuPDF не має вбудованої конвертації в Markdown.
# Потрібен pymupdf4llm, окремий пакет:
import pymupdf4llm

md = pymupdf4llm.to_markdown("paper.pdf")

pymupdf4llm працює, але у 69× повільніший за вбудовану конвертацію PDF Oxide.

pypdf:

# pypdf не має конвертації в Markdown.

PDF Oxide:

from pdf_oxide import PdfDocument

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

Конвертація в HTML

PyMuPDF:

import fitz

doc = fitz.open("report.pdf")
html = doc[0].get_text("html")

pypdf:

# pypdf не має вбудованої конвертації в HTML.

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
html = doc.to_html(0)

PyMuPDF і PDF Oxide обидва конвертують у HTML. Вихід PDF Oxide зазвичай компактніший і ближчий до семантичного HTML.

Поля форми

Усі три бібліотеки підтримують читання та запис полів форм (AcroForm). Помітна різниця: PDF Oxide підтримує форми XFA (XML Forms Architecture), які використовуються в багатьох урядових та корпоративних PDF-формах. Ні PyMuPDF, ні pypdf не обробляють вилучення даних форм XFA.

Вилучення зображень

PyMuPDF:

import fitz

doc = fitz.open("report.pdf")
page = doc[0]
for img in page.get_images():
    xref = img[0]
    pix = fitz.Pixmap(doc, xref)
    pix.save(f"image_{xref}.png")

pypdf:

from pypdf import PdfReader

reader = PdfReader("report.pdf")
for i, img in enumerate(reader.pages[0].images):
    with open(f"image_{i}.png", "wb") as f:
        f.write(img.data)

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
for i, img in enumerate(doc.extract_images(0)):
    with open(f"image_{i}.png", "wb") as f:
        f.write(img.data)

Усі три дозволяють вилучати вбудовані зображення. API PDF Oxide і pypdf практично ідентичні; PyMuPDF вимагає роботи з Pixmap.

Рендеринг

PyMuPDF може рендерити сторінки у PNG / JPEG / PPM через page.get_pixmap(). pypdf не має рендерингу. PDF Oxide рендерить сторінки в зображення через doc.render_page(index, format="png") — без зовнішніх залежностей.

OCR

PyMuPDF + Tesseract: потрібно встановити Tesseract окремо як системну залежність і викликати його як підпроцес. Не входить до PyMuPDF напряму.

pypdf: OCR не підтримується.

PDF Oxide: вбудований OCR через PaddleOCR (ONNX Runtime). Без Tesseract, без підпроцесів — модель завантажена в бібліотеці:

from pdf_oxide import PdfDocument

doc = PdfDocument("scanned.pdf")
text = doc.extract_text_ocr(0)

Підтримує сімейства моделей PP-OCRv3 / v4 / v5. Python-колесо вже містить моделі, додаткового завантаження не потрібно.

Створення PDF

PyMuPDF може створювати PDF, але вимагає ручного розміщення тексту, зображень та фігур на сторінках.

pypdf не може створювати PDF з нуля.

PDF Oxide може створювати PDF з Markdown або HTML:

from pdf_oxide import Pdf

pdf = Pdf.from_markdown("# Invoice\n\n| Item | Price |\n|------|-------|\n| Widget | $9.99 |")
pdf.save("invoice.pdf")

Шифрування

PyMuPDF підтримує читання та створення зашифрованих PDF (AES-128 / AES-256) через doc.save(..., encryption=fitz.PDF_ENCRYPT_AES_256, owner_pw=..., user_pw=...).

pypdf підтримує шифрування RC4; підтримка AES обмежена.

PDF Oxide підтримує читання та створення PDF із AES-128 і AES-256:

from pdf_oxide import PdfDocument

doc = PdfDocument("input.pdf")
doc.save_encrypted("protected.pdf", "user-pw", "owner-pw")

PDF Oxide — MIT, тому шифрування можна використовувати в комерційних продуктах без застережень AGPL.

Підсумок функцій

Функція PyMuPDF pypdf PDF Oxide
Вилучення тексту Так Так Так
Позиції символів Так Частково Так
Вилучення зображень Так Так Так
Поля форм (AcroForm) Читання + Запис Читання + Запис Читання + Запис
Форми XFA Ні Ні Так
Створення PDF Ручне Ні Markdown/HTML
Вивід Markdown Ні (pymupdf4llm) Ні Вбудований
Вивід HTML Ні Ні Вбудований
Рендеринг Так Ні Так
OCR Tesseract Ні Вбудований (PaddleOCR)
Пошук Так Ні Regex + просторовий
Шифрування Читання + Запис Читання + Запис Читання + Запис
Валідація PDF/A Ні Ні Так
Експорт SVG Так Ні Ні
Об’єднання/розділення Так Так Так

Коли обирати кожну бібліотеку

Оберіть pypdf, якщо:

  • Вам потрібне рішення на чистому Python без скомпільованих розширень
  • Ви виконуєте просту маніпуляцію PDF (об’єднання, розділення, обертання)
  • Швидкість не критична для вашого випадку використання

Оберіть PyMuPDF, якщо:

  • Ви вже маєте комерційну ліцензію MuPDF від Artifex
  • Вам потрібен експорт SVG зі сторінок PDF
  • Ваш проєкт вже має ліцензію AGPL-3.0

Оберіть PDF Oxide, якщо:

  • Вам потрібна максимальна швидкість вилучення тексту
  • Ви хочете ліцензію MIT для комерційного використання або закритого коду
  • Вам потрібен вбудований вивід Markdown або HTML для конвеєрів LLM/RAG
  • Вам потрібна підтримка форм XFA
  • Ви хочете вбудований OCR без зовнішніх системних залежностей
  • Ви хочете 100% надійність на валідних PDF

Встановлення

# PyMuPDF
pip install pymupdf

# pypdf
pip install pypdf

# PDF Oxide
pip install pdf_oxide

Вердикт

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

Що вам важливо Найкращий вибір
Максимальна швидкість PDF Oxide (0.8мс)
Дозвільна ліцензія PDF Oxide (MIT) або pypdf (BSD)
Швидкість + дозвільна ліцензія PDF Oxide — єдиний варіант
Вивід Markdown/HTML PDF Oxide — вбудований
Форми XFA PDF Oxide — єдина бібліотека, що їх підтримує
100% надійність PDF Oxide — 100% рівень успіху
OCR без Tesseract PDF Oxide — вбудований PaddleOCR
Експорт SVG PyMuPDF
Чистий Python, без бінарних файлів pypdf

Розпочніть за 10 секунд:

pip install pdf_oxide
from pdf_oxide import PdfDocument

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

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