Skip to content

Міграція з pypdf на PDF Oxide

Повний посібник з переходу з pypdf на PDF Oxide. Охоплює всі API, які ви зараз використовуєте, та способи їх заміни.

Чому варто перейти з pypdf?

Чотири вагомі причини для міграції:

  1. У 15 разів швидше — PDF Oxide обробляє сторінку в середньому за 0,8 мс, pypdf — за 12,1 мс. Обробка 500-сторінкового документа займає 0,4 секунди замість 6.
  2. 100% надійність — PDF Oxide проходить 100% тестів PDF-набору. pypdf зазнає невдачі на 1,6% файлів (98,4% успішних), тобто приблизно кожен 60-й документ обробляється з помилками.
  3. Вбудовані Markdown і HTML — pypdf витягує лише простий текст. PDF Oxide конвертує сторінки в Markdown (зі збереженням таблиць і структури) та HTML — критично для LLM- та RAG-пайплайнів.
  4. Вбудовані OCR і рендеринг — pypdf не підтримує OCR та рендеринг сторінок. PDF Oxide включає PaddleOCR для сканованих документів і рендеринг сторінок у зображення без зовнішніх залежностей.

Крок 1: Встановлення

pip install pdf_oxide
pip uninstall pypdf  # необов'язково

Крок 2: Заміна імпортів

# Було
from pypdf import PdfReader, PdfWriter, PdfMerger

# Стало
from pdf_oxide import PdfDocument, Pdf

Крок 3: Таблиця відповідності API

Завдання pypdf PDF Oxide
Відкрити PDF PdfReader("file.pdf") PdfDocument("file.pdf")
Кількість сторінок len(reader.pages) doc.page_count()
Витягти текст reader.pages[0].extract_text() doc.extract_text(0)
Витягти зображення reader.pages[0].images doc.extract_image_bytes(0)
Поля форм reader.get_fields() doc.get_form_fields()
Метадані reader.metadata doc.metadata()
Зашифрований PDF reader.decrypt("pw") PdfDocument("file.pdf", password="pw")
Об’єднати PDF PdfMerger() + .append() doc.merge_from("doc2.pdf")
Розділити сторінки PdfWriter() + .add_page() doc.extract_pages([0,1,2,3,4], "out.pdf")
У Markdown Не підтримується doc.to_markdown(0)
Рендеринг Не підтримується doc.render_page(0)
OCR Не підтримується doc.extract_text_ocr(0)

Крок 4: Типові зміни в коді

Витягування тексту

# pypdf
from pypdf import PdfReader
reader = PdfReader("report.pdf")
for page in reader.pages:
    print(page.extract_text())

# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
    print(doc.extract_text(i))

Об’єднання PDF

pypdf потребує створення об’єкта злиття та послідовного додавання файлів. PDF Oxide робить це за один виклик:

# pypdf
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("doc1.pdf")
merger.append("doc2.pdf")
merger.write("merged.pdf")

# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("doc1.pdf")
doc.merge_from("doc2.pdf")
doc.save("merged.pdf")

Розділення / витягування сторінок

# pypdf — ручне посторінкове копіювання
from pypdf import PdfReader, PdfWriter
reader = PdfReader("report.pdf")
writer = PdfWriter()
for page in reader.pages[0:5]:
    writer.add_page(page)
writer.write("first_5_pages.pdf")

# PDF Oxide — один виклик
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
doc.extract_pages([0, 1, 2, 3, 4], "first_5_pages.pdf")

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

# pypdf — два кроки: open + decrypt
from pypdf import PdfReader
reader = PdfReader("encrypted.pdf")
reader.decrypt("password")
text = reader.pages[0].extract_text()

# PDF Oxide — пароль у конструкторі
from pdf_oxide import PdfDocument
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)

Конвертація в Markdown (нова можливість)

pypdf не підтримує Markdown. PDF Oxide дозволяє легко передавати PDF у LLM-пайплайни:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
    md = doc.to_markdown(i)
    print(md)

Витягування зображень

# pypdf
from pypdf import PdfReader
reader = PdfReader("report.pdf")
for image in reader.pages[0].images:
    with open(image.name, "wb") as f:
        f.write(image.data)

# 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"])

Крок 5: Тестування міграції

Прогоніть наявні тестові файли через обидві бібліотеки та порівняйте результати:

from pdf_oxide import PdfDocument

doc = PdfDocument("your-test-file.pdf")

# Перевірка витягування тексту
text = doc.extract_text(0)
print(text[:500])

# Перевірка кількості сторінок
print(f"Pages: {doc.page_count()}")

# Перевірка полів форми (за потреби)
fields = doc.get_form_fields()
for f in fields:
    print(f"{f.name}: {f.value}")

Інші посібники з міграції

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