Читать ключевые слова pdf с php

Кто-нибудь знает простой способ «читать»/извлекать ключевые слова из файла .pdf? Этот файл не защищен паролем и был создан на том же сервере с использованием класса FPDF.

Я знаю, что есть какой-то «мощный» инструмент (не бесплатный) для управления .pdf, который обеспечивает простой способ получить все метаданные.

Я также знаю, что .pdf хранит все метаданные внутри символа ‹‹ >>, используя специальный символ / перед именем метаданных, чтобы идентифицировать это. Что мне нужно, так это строка после «/Keywords» и сохранение в переменной.

Любая идея разобрать и получить только эту строку?

(в настоящее время я пишу строку JSON внутри ключевых слов, так что это выглядит так: ([{"FirstName":"7bis","LastName":"lastName","email":"[email protected]"}]) )

Открытие файла pdf в текстовом редакторе выглядит так:

/F1 6 0 R
>>
/XObject <<
>>
>>
endobj
7 0 obj
<<
/Keywords ([{"FirstName":"7bis","LastName":"lastName","email":"[email protected]"}])
/Producer (FPDF 1.81)
/CreationDate (D:20160531084015)
>>
endobj

Спасибо за все предложения ;)


person Andrea    schedule 31.05.2016    source источник


Ответы (2)


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

$file = "/directory/of/file/example.pdf";
$stringedPDF = file_get_contents($file, true);
preg_match('/(?<=Keywords )\S+/i', $stringedPDF, $match);
return $match[0];

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

person Andrea    schedule 31.05.2016

Вы можете попробовать приведенный ниже код из source.

$parser = new \Smalot\PdfParser\Parser();
$pdf    = $parser->parseFile('document.pdf');
$text   = $pdf->getDetails();
person Ankit Doshi    schedule 31.05.2016
comment
На самом деле я хотел бы избежать любого класса, для которого требуется Composer, подобный тому, который вы предложили. Я попробовал онлайн-демонстрацию и работает так, как мне нужно, но в данный момент я не использую композитор, и, похоже, без него невозможно включить этот класс. - person Andrea; 31.05.2016