Міграція з pdfminer.six на PDF Oxide
Повний посібник з переходу з pdfminer (pdfminer.six) на PDF Oxide. Охоплює всі API, які ви зараз використовуєте, та способи їх заміни.
Чому варто перейти з pdfminer?
Чотири вагомі причини для міграції:
- Приблизно в 30 разів швидше — pdfminer є найповільнішою з популярних Python PDF-бібліотек. PDF Oxide обробляє сторінку в середньому за 0,8 мс, pdfminer — за десятки мілісекунд. Пакетні завдання, що займали хвилини, тепер виконуються за секунди.
- Активна підтримка — pdfminer.six оновлюється рідко і має великий список невирішених issue. PDF Oxide активно розвивається з регулярними релізами.
- Все в одному — pdfminer вміє лише витягувати текст. PDF Oxide також створює PDF, редагує їх, рендерить сторінки в зображення, витягує зображення, обробляє форми та конвертує в Markdown/HTML.
- Без налаштувань — 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)
Ключові відмінності
- Без налаштування LAParams — PDF Oxide обробляє макет автоматично. Налаштовувати
word_margin,line_marginта інші параметри не потрібно. - Швидкість — pdfminer є найповільнішою Python PDF-бібліотекою. PDF Oxide приблизно в 30 разів швидший.
- Все в одному — 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}")
Інші посібники з міграції
Пов’язані сторінки
- Початок роботи з Python — посібник зі встановлення
- Витягування тексту з PDF — посібник з витягування тексту