Skip to content

PDF Oxide vs pdfplumber

PDF Oxide видобуває текст у 29 разів швидше за pdfplumber, водночас пропонуючи ширший набір можливостей. Натомість pdfplumber має зріліші алгоритми видобування таблиць. Ця сторінка допоможе вам обрати правильний інструмент під вашу задачу.

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

Швидкість. pdfplumber написаний на чистому Python (на основі pdfminer). Ядро PDF Oxide на Rust видобуває текст у середньому за 0,8 мс проти 23,2 мс — у 29 разів швидше.

Надійність. PDF Oxide успішно проходить 100% із 3830 тестових PDF. Показник pdfplumber — 98,8%, тобто 46 збоїв на коректних PDF.

Таблиці. pdfplumber має найкраще видобування таблиць серед усіх Python-бібліотек для PDF. Виявлення таблиць у PDF Oxide робоче, але менш зріле для складних макетів із багатьма рядками й стовпцями та об’єднаними клітинками.

Охоплення. pdfplumber працює лише на читання. PDF Oxide додає створення, редагування, шифрування, рендеринг і виведення у Markdown/HTML.

Швидке порівняння

PDF Oxide pdfplumber
Середній час видобування 0,8 мс 23,2 мс
Частка успішних (3830 PDF) 100% 98,8%
Ліцензія MIT MIT
Мова Rust + PyO3 Чистий Python
Видобування тексту Так Так
Позиції символів Так Так
Видобування таблиць Базове Розширене
Видобування зображень Так Ні
Візуальне налагодження Ні Так
Виведення у Markdown Так Ні
Виведення у HTML Так Ні
Створення PDF Так Ні
Редагування PDF Так Ні
Шифрування Читання + запис Ні
Рендеринг Так Ні
Поля форм Читання + запис Лише читання

Паралельне порівняння коду

Видобування тексту

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)

pdfplumber:

import pdfplumber

with pdfplumber.open("report.pdf") as pdf:
    page = pdf.pages[0]
    text = page.extract_text()
    print(text)

Видобування на рівні символів

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
chars = doc.extract_chars(0)
for ch in chars[:10]:
    print(f"'{ch.char}' at ({ch.x:.1f}, {ch.y:.1f}) size={ch.font_size:.1f}")

pdfplumber:

import pdfplumber

with pdfplumber.open("report.pdf") as pdf:
    page = pdf.pages[0]
    for char in page.chars[:10]:
        print(f"'{char['text']}' at ({char['x0']:.1f}, {char['top']:.1f}) "
              f"size={char['size']:.1f}")

Видобування таблиць

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("invoice.pdf")
md = doc.to_markdown(0, detect_headings=True)
# Tables are converted to Markdown table syntax
print(md)

pdfplumber:

import pdfplumber

with pdfplumber.open("invoice.pdf") as pdf:
    page = pdf.pages[0]
    tables = page.extract_tables()
    for table in tables:
        for row in table:
            print(row)

extract_tables() у pdfplumber повертає структуровані дані рядків/стовпців із налаштовуваним виявленням ліній. Для складних таблиць із об’єднаними клітинками, заголовками, що охоплюють кілька стовпців, або макетами без рамок алгоритми pdfplumber надійніші.

Деталі бенчмарка

Метрика PDF Oxide pdfplumber
Середній час видобування 0,8 мс 23,2 мс
Час видобування p99 9 мс 189 мс
Частка успішних (коректні PDF) 100% (3823/3823) 98,8% (3777/3823)

Різниця у швидкості в 29 разів зумовлена суто Python-архітектурою pdfplumber. pdfplumber спирається на pdfminer для парсингу, а потім додає власний шар просторового аналізу — обидва написані на Python. PDF Oxide виконує весь парсинг, декодування шрифтів і складання тексту у скомпільованому Rust.

Див. повну методологію бенчмарка щодо деталей корпусу.

Коли що обирати

Обирайте PDF Oxide, якщо:

  • Важлива швидкість. Обробка тисяч PDF, де у 29 разів швидше означає хвилини замість годин.
  • Вам потрібно більше, ніж видобування. Створення, редагування, шифрування, рендеринг або виведення у Markdown.
  • Ви прагнете максимальної надійності. 100% успішних перевірок проти 98,8%.
  • Вам потрібне видобування зображень. pdfplumber не видобуває зображення.
  • Конвеєри пакетної обробки. 0,8 мс на PDF означає 3830 PDF за 3,1 секунди.

Обирайте pdfplumber, якщо:

  • Складне видобування таблиць — ваш основний сценарій. Алгоритми таблиць pdfplumber краще опрацьовують об’єднані клітинки, таблиці без рамок і заголовки, що охоплюють стовпці.
  • Вам потрібне візуальне налагодження. pdfplumber може рендерити анотовані зображення сторінок, показуючи виявлені лінії, символи та межі таблиць.
  • Ви надаєте перевагу чистому Python. Жодних скомпільованих залежностей, встановлюється будь-де.

Використовуйте обидва:

Для конвеєрів, яким потрібне і швидке видобування тексту, і розбір складних таблиць, використовуйте PDF Oxide для тексту й pdfplumber для таблиць:

from pdf_oxide import PdfDocument
import pdfplumber

# Fast text extraction with PDF Oxide
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)

# Complex table extraction with pdfplumber
with pdfplumber.open("report.pdf") as pdf:
    tables = pdf.pages[0].extract_tables()

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