Чтение метаданных PDF в PHP


Я пытаюсь прочитать метаданные, прикрепленные к произвольным PDF-файлам: название, автор, тема и ключевые слова.

Существует ли библиотека PHP, предпочтительно с открытым исходным кодом, которая может читать метаданные PDF? Если да, или если нет, то как можно использовать библиотеку (или ее отсутствие) для извлечения метаданных?

Чтобы быть ясным, я не заинтересован в создании или изменении PDF-файлов или их метаданных, и меня не волнуют тела PDF. Я просмотрел ряд библиотек, в том числе FPDF (которые все кажется, рекомендуется), но, похоже, он предназначен только для создания PDF-файлов, а не для извлечения метаданных.

Author: Community, 2010-12-20

6 answers

Фреймворк Zend включает Zend_Pdf, что делает это действительно простым:

$pdf = Zend_Pdf::load($pdfPath);

echo $pdf->properties['Title'] . "\n";
echo $pdf->properties['Author'] . "\n";

Ограничения: Работает только с файлами без шифрования размером менее 16 МБ.

 7
Author: Community, 2011-08-15 11:02:10

Не знаю о библиотеках, но простым способом достижения того же результата может быть открытие файла и анализ всего, что происходит после последнего "конечного потока".

Попробуйте открыть pdf в текстовом редакторе, синтаксический анализатор не должен занимать более пяти строк.

 6
Author: cbrandolino, 2010-12-22 00:51:03

Анализатор PDF делает именно то, что вы хотите, и его довольно просто использовать:

$parser = new \Smalot\PdfParser\Parser();
$pdf    = $parser->parseFile('document.pdf');
$text   = $pdf->getDetails();

Вы можете попробовать это на демонстрационной странице .

 4
Author: Alessandro Cosentino, 2014-03-27 22:41:58

Сегодня я искал то же самое. И я наткнулся на небольшой класс 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;

Для меня это работает! Вся благодарность адресована исключительно создателю класса... ну, может быть, и мне тоже немного спасибо за то, что нашел класс;)

 3
Author: maxpower9000, 2013-03-06 10:48:24
<?php 

    $sourcefile = "file path";
    $stringedPDF = file_get_contents($sourcefile, true);

    preg_match('/(?<=Title )\S(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))./', $stringedPDF, $title);
    echo $all = $title[0];
 2
Author: ved uniyalas, 2017-08-03 12:30:52

Вы можете использовать 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);
 1
Author: maxpower9000, 2017-01-09 10:29:31