Перші кроки з PDF Oxide (PHP)
PDF Oxide — це найшвидша PHP-бібліотека для видобування тексту з PDF: у середньому 0.8 мс, 100% успішних результатів на 3830 PDF. Одна бібліотека для видобування, конвертування та створення PDF, побудована на тому самому ядрі Rust, що й прив’язки для Python, Node, Go, C#, Ruby та Java.
Встановлення
composer require oxide/pdf-oxide
Post-install хук Composer завантажує відповідну готову нативну бібліотеку до vendor/oxide/pdf-oxide/lib/ під вашу платформу (linux-x86_64, linux-aarch64, darwin-x86_64, darwin-arm64, windows-x64).
Вимоги: PHP 8.2+ (8.2, 8.3, 8.4, 8.5) з увімкненим ext-ffi. Перевірте командою php -m | grep -i ffi. Деякі керовані хостинги вимикають ext-ffi; у такому разі скористайтеся Docker-образом на кшталт php:8.3-cli.
Відкриття PDF
Використовуйте PdfDocument::open(), щоб завантажити файл і переглянути його метадані.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('research-paper.pdf');
echo $doc->pageCount(), " pages\n";
$version = $doc->version(); // ['major' => int, 'minor' => int]
printf("PDF version: %d.%d\n", $version['major'], $version['minor']);
$doc->close(); // або покладіться на __destruct()
Видобування тексту
Одна сторінка
Видобувайте звичайний текст із будь-якої сторінки за її індексом, що починається з нуля.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('report.pdf');
echo $doc->extractText(0);
$doc->close();
Усі сторінки
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('book.pdf');
for ($i = 0; $i < $doc->pageCount(); $i++) {
echo "--- Page " . ($i + 1) . " ---\n";
echo $doc->extractText($i), "\n";
}
$doc->close();
Видобування за один виклик
extractTextOnce() — це статичний помічник, який одним викликом відкриває файл, видобуває сторінку 0 і закриває його.
use PdfOxide\PdfDocument;
echo PdfDocument::extractTextOnce('report.pdf');
Видобування з автоматичним вибором
extractTextAuto() повертає нативний текст, якщо він наявний, і коректно переходить до будь-якого тексту, який вдається відновити, — на резервному шляху він ніколи не кидає виняток.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('mixed.pdf');
echo $doc->extractTextAuto(0);
$doc->close();
Page API
pages() повертає масив подань PdfPage, а pagesIter() віддає їх ліниво разом з індексом. Кожна сторінка делегує видобування назад документу.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('paper.pdf');
foreach ($doc->pagesIter() as $index => $page) {
echo "Page {$index}:\n";
echo $page->text(), "\n";
}
// Або отримайте окрему сторінку напряму:
$page = $doc->page(0);
echo $page->toMarkdown();
$doc->close();
Методи PdfPage: index(), parent(), text(), textAuto(), toMarkdown(), toHtml().
Конвертування у Markdown та HTML
Конвертуйте окрему сторінку чи весь документ у Markdown або відрендеріть сторінку в HTML.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('paper.pdf');
echo $doc->toMarkdown(0); // одна сторінка (за замовчуванням сторінка 0)
echo $doc->toMarkdownAll(); // весь документ
echo $doc->toHtml(0); // одна сторінка як HTML
$doc->close();
Статичний MarkdownConverter надає ті самі конвертації без зберігання індексу сторінки на стороні виклику документа.
use PdfOxide\PdfDocument;
use PdfOxide\MarkdownConverter;
$doc = PdfDocument::open('paper.pdf');
echo MarkdownConverter::toMarkdown($doc, 0);
echo MarkdownConverter::toMarkdownAll($doc);
echo MarkdownConverter::toHtml($doc, 0);
echo MarkdownConverter::toPlainText($doc, 0);
$doc->close();
Структуроване видобування
extractStructured() повертає подання сторінки з урахуванням розкладки у вигляді асоціативного масиву — регіони з їхнім типом, текстом, обмежувальним прямокутником та індексом колонки.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('paper.pdf');
$structured = $doc->extractStructured(0);
printf("Page %d: %.0f x %.0f\n",
$structured['page_index'],
$structured['page_width'],
$structured['page_height']);
foreach ($structured['regions'] as $region) {
echo "[{$region['kind']}] {$region['text']}\n";
}
$doc->close();
Відкриття з байтів
Відкривайте PDF із рядка в пам’яті — зручно, коли дані надходять із S3, HTTP або бази даних.
use PdfOxide\PdfDocument;
$bytes = file_get_contents('report.pdf');
$doc = PdfDocument::openBytes($bytes);
echo $doc->extractText(0);
$doc->close();
Перевірка можливостей документа
Дослідіть документ перед його обробкою.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('form.pdf');
var_dump($doc->hasStructureTree()); // тегований PDF?
var_dump($doc->hasFormFields()); // поля AcroForm?
var_dump($doc->hasSignatures()); // цифрові підписи?
$doc->close();
Створення PDF
Клас Pdf надає фабричні методи для побудови PDF із Markdown, HTML або звичайного тексту.
use PdfOxide\Pdf;
$pdf = Pdf::fromMarkdown("# Invoice\n\n**Total:** \$42.00\n");
$pdf->saveTo('invoice.pdf'); // записати у файл за шляхом
$pdf->close();
$pdf = Pdf::fromHtml('<h1>Report</h1><p>Quarterly figures.</p>');
$bytes = $pdf->save(); // або отримати сирі байти
file_put_contents('report.pdf', $bytes);
$pdf->close();
$pdf = Pdf::fromText("Plain text document.\n\nSecond paragraph.");
$pdf->saveTo('notes.pdf');
$pdf->close();
Наступні кроки
- Перші кроки з Python – використання PDF Oxide з Python
- Перші кроки з Rust – використання PDF Oxide з Rust
- Видобування тексту – докладні параметри й рецепти видобування
- Створення PDF – розширене створення з метаданими та стилізацією
- Редагування – зміна наявних PDF, анотації та поля форм