Я пытаюсь прочитать метаданные, прикрепленные к произвольным файлам PDF: название, автор, тема и ключевые слова.
Есть ли библиотека PHP, желательно с открытым исходным кодом, которая может читать метаданные PDF? Если это так, или нет, как использовать библиотеку (или ее отсутствие) для извлечения метаданных?
Чтобы быть ясным, я не заинтересован в создании или изменении PDF-файлов или их метаданных, и мне не нужны тела PDF. Я просмотрел несколько библиотек, в том числе FPDF (которые все, кажется, рекомендуют), но, похоже, это только для создания PDF, а не для извлечения метаданных.
В основу Zend входит Zend_Pdf , что делает это очень просто:
$pdf = Zend_Pdf::load($pdfPath); echo $pdf->properties['Title'] . "\n"; echo $pdf->properties['Author'] . "\n";
Ограничения: работает только с файлами без шифрования меньше 16 МБ.
Не знаю о библиотеках, но простой способ добиться такого же результата может заключаться в открытии файла и анализе всего, что происходит после последнего «конца».
Попробуйте открыть pdf-файл в текстовом редакторе, синтаксический анализатор не должен принимать более пяти строк.
PDF Parser делает именно то, что вы хотите, и это довольно просто:
$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;
Для меня это работает! Все спасибо исключительно создателю класса … ну, может быть, только немного благодаря мне тоже для поиска класса;)
Вы можете использовать PDFtk для извлечения количества страниц:
// 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]*
Если ImageMagick доступен, вы также можете использовать:
$cmd = "identify -format %n {$path}";
Выполнить в PHP через shell_exec () :
$res = shell_exec($cmd);
<?php $sourcefile = "file path"; $stringedPDF = file_get_contents($sourcefile, true); preg_match('/(?<=Title )\S(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))./', $stringedPDF, $title); echo $all = $title[0];