Skip to content

Міграція з pdfminer.six на PDF Oxide

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

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

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

  1. Приблизно в 30 разів швидше — pdfminer є найповільнішою з популярних Python PDF-бібліотек. PDF Oxide обробляє сторінку в середньому за 0,8 мс, pdfminer — за десятки мілісекунд. Пакетні завдання, що займали хвилини, тепер виконуються за секунди.
  2. Активна підтримка — pdfminer.six оновлюється рідко і має великий список невирішених issue. PDF Oxide активно розвивається з регулярними релізами.
  3. Все в одному — pdfminer вміє лише витягувати текст. PDF Oxide також створює PDF, редагує їх, рендерить сторінки в зображення, витягує зображення, обробляє форми та конвертує в Markdown/HTML.
  4. Без налаштувань — pdfminer потребує ручного налаштування LAParams (word_margin, line_margin, char_margin) для прийнятних результатів. PDF Oxide виконує розпізнавання макету автоматично.

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

pip install pdf_oxide
pip uninstall pdfminer.six  # необов'язково

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

# Було
from pdfminer.high_level import extract_text, extract_pages
from pdfminer.layout import LAParams

# Стало
from pdf_oxide import PdfDocument

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

Завдання pdfminer PDF Oxide
Витягти текст extract_text("file.pdf") PdfDocument("file.pdf").extract_text(0)
Витягти сторінки extract_pages("file.pdf") Посторінково через doc.extract_text(i)
Аналіз макету Конфігурація LAParams() Вбудоване розпізнавання макету
Позиції символів Об’єкти LTChar doc.extract_chars(0)
Зашифрований PDF Обмежена підтримка (AES-256 не працює) Повна підтримка
У Markdown Не підтримується doc.to_markdown(0)
Поля форм Не підтримується doc.get_form_fields()

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

Базове витягування тексту

extract_text у pdfminer обробляє весь документ цілком. PDF Oxide дає посторінковий контроль:

# pdfminer — весь документ цілком
from pdfminer.high_level import extract_text
text = extract_text("report.pdf")
print(text)

# PDF Oxide — посторінковий контроль
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for i in range(doc.page_count()):
    text = doc.extract_text(i)
    print(text)

Аналіз макету

pdfminer потребує ручного налаштування LAParams. PDF Oxide обробляє макет автоматично:

# pdfminer — ручне налаштування макету
from pdfminer.high_level import extract_text
from pdfminer.layout import LAParams

params = LAParams(
    word_margin=0.1,
    line_margin=0.5,
    char_margin=2.0,
    boxes_flow=0.5,
)
text = extract_text("report.pdf", laparams=params)

# PDF Oxide — автоматичне розпізнавання макету
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)  # Макет обробляється автоматично

Посимвольне витягування

pdfminer використовує складне дерево об’єктів макету. PDF Oxide повертає плоский список:

# pdfminer — обхід дерева макету
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTChar, LTTextBox

for page_layout in extract_pages("report.pdf"):
    for element in page_layout:
        if isinstance(element, LTTextBox):
            for line in element:
                for char in line:
                    if isinstance(char, LTChar):
                        print(f"{char.get_text()} at ({char.x0}, {char.y0})")

# PDF Oxide — плоский список символів
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
for c in doc.extract_chars(0):
    print(f"{c.char} at ({c.x}, {c.y})")

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

pdfminer має обмежену підтримку шифрування і не справляється з файлами AES-256:

# pdfminer — багато зашифрованих PDF не обробляються
from pdfminer.high_level import extract_text
text = extract_text("encrypted.pdf", password="password")
# Файли з AES-256 можуть викликати помилку

# PDF Oxide — повна підтримка шифрування
from pdf_oxide import PdfDocument
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)  # Підтримує всі методи шифрування

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

pdfminer не підтримує 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)

Витягування полів форм (нова можливість)

pdfminer не вміє витягувати поля форм. PDF Oxide справляється з цим:

from pdf_oxide import PdfDocument

doc = PdfDocument("form.pdf")
fields = doc.get_form_fields()
for f in fields:
    print(f"{f.name}: {f.value}")

Рендеринг сторінок (нова можливість)

pdfminer не має функції рендерингу. PDF Oxide може рендерити сторінки в зображення:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
png_bytes = doc.render_page(0, dpi=150)
with open("page.png", "wb") as f:
    f.write(png_bytes)

Ключові відмінності

  1. Без налаштування LAParams — PDF Oxide обробляє макет автоматично. Налаштовувати word_margin, line_margin та інші параметри не потрібно.
  2. Швидкість — pdfminer є найповільнішою Python PDF-бібліотекою. PDF Oxide приблизно в 30 разів швидший.
  3. Все в одному — pdfminer вміє лише витягувати дані. PDF Oxide також створює, редагує та рендерить PDF.

Крок 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}")

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

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