Міграція з pdfplumber на PDF Oxide
Повний посібник з переходу з pdfplumber на PDF Oxide. Охоплює всі API, які ви зараз використовуєте, та способи їх заміни.
Чому варто перейти з pdfplumber?
Чотири вагомі причини для міграції:
- У 29 разів швидше — PDF Oxide обробляє сторінку в середньому за 0,8 мс, pdfplumber — за 23,2 мс. 100-сторінковий документ обробляється за 80 мс замість 2,3 секунди.
- Підтримка зашифрованих PDF — pdfplumber взагалі не може відкривати зашифровані PDF. PDF Oxide прозоро обробляє всі методи шифрування, включаючи AES-256.
- Витягування зображень — pdfplumber не вміє витягувати зображення. PDF Oxide витягує вбудовані зображення за один виклик.
- Вивід у Markdown — pdfplumber повертає таблиці у вигляді списків Python, які потрібно форматувати вручну. PDF Oxide видає структурований Markdown зі збереженням таблиць, готовий для LLM.
Крок 1: Встановлення
pip install pdf_oxide
pip uninstall pdfplumber # необов'язково
Крок 2: Заміна імпортів
# Було
import pdfplumber
# Стало
from pdf_oxide import PdfDocument
Крок 3: Таблиця відповідності API
| Завдання | pdfplumber | PDF Oxide |
|---|---|---|
| Відкрити PDF | pdfplumber.open("file.pdf") |
PdfDocument("file.pdf") |
| Кількість сторінок | len(pdf.pages) |
doc.page_count() |
| Витягти текст | pdf.pages[0].extract_text() |
doc.extract_text(0) |
| Позиції символів | pdf.pages[0].chars |
doc.extract_chars(0) |
| Витягти таблиці | pdf.pages[0].extract_tables() |
doc.to_markdown(0) |
| Поля форм | Не підтримується (лише читання) | doc.get_form_fields() |
| Зашифрований PDF | Не підтримується | PdfDocument("file.pdf", password="pw") |
| Витягти зображення | Не підтримується | doc.extract_image_bytes(0) |
| У Markdown | Не підтримується | doc.to_markdown(0) |
| Рендеринг | Не підтримується | doc.render_page(0) |
| OCR | Не підтримується | doc.extract_text_ocr(0) |
| Створити PDF | Не підтримується | Pdf.from_markdown("# Title") |
Крок 4: Типові зміни в коді
Витягування тексту
pdfplumber потребує контекстний менеджер. PDF Oxide — ні:
# pdfplumber — потрібен контекстний менеджер
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
for page in pdf.pages:
text = page.extract_text()
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)
Витягування таблиць
pdfplumber повертає таблиці у вигляді вкладених списків Python. PDF Oxide виводить їх у форматі Markdown:
# pdfplumber — повертає список списків
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
tables = pdf.pages[0].extract_tables()
for table in tables:
for row in table:
print(row)
# PDF Oxide — структурований Markdown
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
md = doc.to_markdown(0)
print(md) # Таблиці відображені як Markdown-таблиці
Посимвольне витягування
# pdfplumber
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
chars = pdf.pages[0].chars
for c in chars:
print(f"{c['text']} at ({c['x0']}, {c['top']})")
# PDF Oxide
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
chars = doc.extract_chars(0)
for c in chars:
print(f"{c.char} at ({c.x}, {c.y})")
Зашифровані PDF (нова можливість)
pdfplumber не може відкривати зашифровані PDF. PDF Oxide обробляє їх прозоро:
from pdf_oxide import PdfDocument
# Підтримує всі методи шифрування, включаючи AES-256
doc = PdfDocument("encrypted.pdf", password="password")
text = doc.extract_text(0)
print(text)
Витягування зображень (нова можливість)
pdfplumber не вміє витягувати зображення. 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"])
OCR для сканованих документів (нова можливість)
pdfplumber не обробляє скановані PDF. PDF Oxide включає вбудований OCR:
from pdf_oxide import PdfDocument
doc = PdfDocument("scanned.pdf")
text = doc.extract_text_ocr(0)
print(text)
Ключові відмінності
- Без контекстного менеджера — pdfplumber використовує
with pdfplumber.open(...) as pdf:. PDF Oxide не потребує контекстного менеджера. - Зашифровані PDF — pdfplumber взагалі не може їх відкрити. PDF Oxide обробляє шифрування прозоро.
- Таблиці — pdfplumber повертає списки Python. PDF Oxide виводить таблиці у форматі Markdown або HTML. Для складних таблиць із візуальним налагодженням можна використовувати pdfplumber паралельно з PDF Oxide.
Крок 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}")
Інші посібники з міграції
Пов’язані сторінки
- PDF Oxide vs pdfplumber — детальне порівняння
- Початок роботи з Python — посібник зі встановлення
- Витягування тексту з PDF — посібник з витягування тексту