Чтение метаданных PDF в PHP - PullRequest
10 голосов
/ 20 декабря 2010

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

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

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

Ответы [ 6 ]

8 голосов
/ 23 декабря 2010

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

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

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

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

6 голосов
/ 28 марта 2014

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

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

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

6 голосов
/ 20 декабря 2010

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

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

3 голосов
/ 06 марта 2013

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

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

2 голосов
/ 03 августа 2017
<?php 

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

    preg_match('/(?<=Title )\S(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))./', $stringedPDF, $title);
    echo $all = $title[0];
1 голос
/ 09 января 2017

Вы можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...