Міграція з pypdf на PDF Oxide
Повний посібник з переходу з pypdf на PDF Oxide. Охоплює всі API, які ви зараз використовуєте, та способи їх заміни.
Чому варто перейти з pypdf?
Чотири вагомі причини для міграції:
- У 15 разів швидше — PDF Oxide обробляє сторінку в середньому за 0,8 мс, pypdf — за 12,1 мс. Обробка 500-сторінкового документа займає 0,4 секунди замість 6.
- 100% надійність — PDF Oxide проходить 100% тестів PDF-набору. pypdf зазнає невдачі на 1,6% файлів (98,4% успішних), тобто приблизно кожен 60-й документ обробляється з помилками.
- Вбудовані Markdown і HTML — pypdf витягує лише простий текст. PDF Oxide конвертує сторінки в Markdown (зі збереженням таблиць і структури) та HTML — критично для LLM- та RAG-пайплайнів.
- Вбудовані 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}")
Інші посібники з міграції
Пов’язані сторінки
- PDF Oxide vs pypdf — детальне порівняння
- Початок роботи з Python — посібник зі встановлення
- Витягування тексту з PDF — посібник з витягування тексту