Чтение метаданных PDF в PHP
Я пытаюсь прочитать метаданные, прикрепленные к произвольным PDF-файлам: название, автор, тема и ключевые слова.
Существует ли библиотека PHP, предпочтительно с открытым исходным кодом, которая может читать метаданные PDF? Если да, или если нет, то как можно использовать библиотеку (или ее отсутствие) для извлечения метаданных?
Чтобы быть ясным, я не заинтересован в создании или изменении PDF-файлов или их метаданных, и меня не волнуют тела PDF. Я просмотрел ряд библиотек, в том числе FPDF (которые все кажется, рекомендуется), но, похоже, он предназначен только для создания PDF-файлов, а не для извлечения метаданных.
6 answers
Фреймворк Zend включает Zend_Pdf, что делает это действительно простым:
$pdf = Zend_Pdf::load($pdfPath);
echo $pdf->properties['Title'] . "\n";
echo $pdf->properties['Author'] . "\n";
Ограничения: Работает только с файлами без шифрования размером менее 16 МБ.
Не знаю о библиотеках, но простым способом достижения того же результата может быть открытие файла и анализ всего, что происходит после последнего "конечного потока".
Попробуйте открыть pdf в текстовом редакторе, синтаксический анализатор не должен занимать более пяти строк.
Анализатор PDF делает именно то, что вы хотите, и его довольно просто использовать:
$parser = new \Smalot\PdfParser\Parser();
$pdf = $parser->parseFile('document.pdf');
$text = $pdf->getDetails();
Сегодня я искал то же самое. И я наткнулся на небольшой класс PHP в http://de77.com/ это предлагает быстрое и грязное решение. Ты можешь скачать класс напрямую. Выходные данные закодированы в кодировке UTF-8.
Творец говорит:
Вот класс PHP, который я написал, который можно использовать для получения названия и автора и количества страниц любого PDF-файла. Он не использует никаких внешних приложений - просто чистый PHP.
// basic example
include 'PDFInfo.php';
$p = new PDFInfo;
$p->load('file.pdf');
echo $p->author;
echo $p->title;
echo $p->pages;
Для меня это работает! Вся благодарность адресована исключительно создателю класса... ну, может быть, и мне тоже немного спасибо за то, что нашел класс;)
<?php
$sourcefile = "file path";
$stringedPDF = file_get_contents($sourcefile, true);
preg_match('/(?<=Title )\S(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))./', $stringedPDF, $title);
echo $all = $title[0];
Вы можете использовать PDFТК чтобы извлечь количество страниц:
// Windows
$bin = realpath('C:\\pdftk\\bin\\pdftk.exe');
$cmd = "cmd /c {$bin} {$path} dump_data | grep NumberOfPages | sed 's/[^0-9]*//'";
// Unix
$cmd = "pdftk {$path} dump_data | grep NumberOfPages | sed 's/[^0-9]*
Если Образная магия доступно, вы также можете использовать:
$cmd = "identify -format %n {$path}";
Выполнить в PHP через shell_exec():
$res = shell_exec($cmd);