Erste Schritte mit PDF Oxide (PHP)
PDF Oxide ist die schnellste PHP PDF-Bibliothek für die Textextraktion — 0,8 ms im Mittel, 100 % Erfolgsquote bei 3.830 PDFs. Eine Bibliothek zum Extrahieren, Konvertieren und Erstellen von PDFs, aufgebaut auf demselben Rust-Kern, der auch in den Bindings für Python, Node, Go, C#, Ruby und Java zum Einsatz kommt.
Installation
composer require oxide/pdf-oxide
Composers Post-Install-Hook lädt die passende vorkompilierte native Bibliothek für Ihre Plattform nach vendor/oxide/pdf-oxide/lib/ herunter (linux-x86_64, linux-aarch64, darwin-x86_64, darwin-arm64, windows-x64).
Voraussetzungen: PHP 8.2+ (8.2, 8.3, 8.4, 8.5) mit aktiviertem ext-ffi. Prüfen Sie dies mit php -m | grep -i ffi. Manche Managed-Hoster deaktivieren ext-ffi; in diesem Fall verwenden Sie ein Docker-Image wie php:8.3-cli.
Ein PDF öffnen
Verwenden Sie PdfDocument::open(), um eine Datei zu laden und ihre Metadaten zu untersuchen.
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(); // or rely on __destruct()
Textextraktion
Einzelne Seite
Extrahieren Sie reinen Text aus einer beliebigen Seite über ihren nullbasierten Index.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('report.pdf');
echo $doc->extractText(0);
$doc->close();
Alle Seiten
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();
Extraktion in einem Schritt
extractTextOnce() ist ein statischer Helfer, der in einem einzigen Aufruf öffnet, Seite 0 extrahiert und wieder schließt.
use PdfOxide\PdfDocument;
echo PdfDocument::extractTextOnce('report.pdf');
Automatisch geroutete Extraktion
extractTextAuto() liefert nativen Text, sofern vorhanden, und greift ansonsten elegant auf den jeweils wiederherstellbaren Text zurück — auf dem Fallback-Pfad wirft die Methode niemals eine Exception.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('mixed.pdf');
echo $doc->extractTextAuto(0);
$doc->close();
Page-API
pages() liefert ein Array von PdfPage-Ansichten zurück, und pagesIter() gibt sie zusammen mit ihrem Index verzögert (lazy) aus. Jede Seite delegiert die Extraktion zurück an das Dokument.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('paper.pdf');
foreach ($doc->pagesIter() as $index => $page) {
echo "Page {$index}:\n";
echo $page->text(), "\n";
}
// Or grab a single page directly:
$page = $doc->page(0);
echo $page->toMarkdown();
$doc->close();
PdfPage-Methoden: index(), parent(), text(), textAuto(), toMarkdown(), toHtml().
Markdown- & HTML-Konvertierung
Konvertieren Sie eine einzelne Seite oder das gesamte Dokument nach Markdown oder rendern Sie eine Seite als HTML.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('paper.pdf');
echo $doc->toMarkdown(0); // one page (defaults to page 0)
echo $doc->toMarkdownAll(); // entire document
echo $doc->toHtml(0); // one page as HTML
$doc->close();
Der statische MarkdownConverter bietet dieselben Konvertierungen, ohne dass am Aufrufort des Dokuments ein Seitenindex vorgehalten werden muss.
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();
Strukturierte Extraktion
extractStructured() liefert eine layout-bewusste Ansicht einer Seite als assoziatives Array zurück — Regionen mit ihrer Art, ihrem Text, ihrer Bounding Box und ihrem Spaltenindex.
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();
Aus Bytes öffnen
Öffnen Sie ein PDF aus einem String im Arbeitsspeicher — nützlich, wenn Sie es aus S3, per HTTP oder aus einer Datenbank laden.
use PdfOxide\PdfDocument;
$bytes = file_get_contents('report.pdf');
$doc = PdfDocument::openBytes($bytes);
echo $doc->extractText(0);
$doc->close();
Dokumenteigenschaften untersuchen
Untersuchen Sie ein Dokument, bevor Sie es verarbeiten.
use PdfOxide\PdfDocument;
$doc = PdfDocument::open('form.pdf');
var_dump($doc->hasStructureTree()); // tagged PDF?
var_dump($doc->hasFormFields()); // AcroForm fields?
var_dump($doc->hasSignatures()); // digital signatures?
$doc->close();
PDF-Erstellung
Die Klasse Pdf stellt Factory-Methoden bereit, um PDFs aus Markdown, HTML oder reinem Text zu erzeugen.
use PdfOxide\Pdf;
$pdf = Pdf::fromMarkdown("# Invoice\n\n**Total:** \$42.00\n");
$pdf->saveTo('invoice.pdf'); // write to a path
$pdf->close();
$pdf = Pdf::fromHtml('<h1>Report</h1><p>Quarterly figures.</p>');
$bytes = $pdf->save(); // or get the raw bytes
file_put_contents('report.pdf', $bytes);
$pdf->close();
$pdf = Pdf::fromText("Plain text document.\n\nSecond paragraph.");
$pdf->saveTo('notes.pdf');
$pdf->close();
Nächste Schritte
- Erste Schritte mit Python – PDF Oxide aus Python verwenden
- Erste Schritte mit Rust – PDF Oxide aus Rust verwenden
- Textextraktion – detaillierte Extraktionsoptionen und Rezepte
- PDF-Erstellung – fortgeschrittene Erstellung mit Metadaten und Styling
- Bearbeiten – bestehende PDFs, Annotationen und Formularfelder ändern