Smalot / PDF Parser - это PHP-библиотека, которая предоставляет различные инструменты для чтения данных из PDF-файлов. На данном сайте она упакована для работы с Joomla 3 и Joomla 4.
Пример кода для Joomla 3 и Joomla 4.
<?php defined('_JEXEC') or die('Restricted access'); use \Smalot\PdfParser\Parser; // Для Joomla 3 JLoader::registerNamespace('Smalot', JPATH_LIBRARIES); // ИЛИ // для Joomla 4 JLoader::registerNamespace('Smalot', JPATH_LIBRARIES. '/Smalot'); $file_name = 'images/path_to_file.pdf'; $parser = new Parser(); $pdf = $parser->parseFile(JPATH_SITE . '/' . $file_name); $pdf_meta_data = $pdf->getDetails();
В Joomla 3 следует указывать путь, после которого начинается namespace.
В Joomla 4 следует указывать путь вплоть до каталога, где начинается namespace.
В настоящее время защищенные документы и извлечение данных формы не поддерживаются.
<?php // Parse PDF file and build necessary objects. $parser = new \Smalot\PdfParser\Parser(); $pdf = $parser->parseFile('/path/to/document.pdf'); $text = $pdf->getText(); echo $text;
Более подробную информацию можно получить здесь.
Для начала создадим объект парсера pdf и укажем ему файл.
$parser = new \Smalot\PdfParser\Parser(); $pdf = $parser->parseFile('document.pdf'); // .. или ... $pdf = $parser->parseContent(file_get_contents('document.pdf'))
Получить текстовое содержимое из pdf-файла с помощью PHP можно следующим образом.
$text = $pdf->getText(); // or extract the text of a specific page (in this case the first page) $text = $pdf->getPages()[0]->getText();
Вы можете извлечь матрицу преобразования (индексы 0-3) и положение текстовых объектов по x,y (индексы 4,5).
$data = $pdf->getPages()[0]->getDataTm(); Array ( [0] => Array ( [0] => Array ( [0] => 0.999429 [1] => 0 [2] => 0 [3] => 1 [4] => 201.96 [5] => 720.68 ) [1] => Document title ) [1] => Array ( [0] => Array ( [0] => 0.999402 [1] => 0 [2] => 0 [3] => 1 [4] => 70.8 [5] => 673.64 ) [1] => Calibri : Lorem ipsum dolor sit amet, consectetur a ) )
Если включено в конфигурации (`Config::setDataTmFontInfoHasToBeIncluded(true)`) идентификатор шрифта (index 2) и размер шрифта (index 3) будут добавлены в dataTm.
// create config $config = new Smalot\PdfParser\Config(); $config->setDataTmFontInfoHasToBeIncluded(true); // use config and parse file $parser = new Smalot\PdfParser\Parser([], $config); $pdf = $parser->parseFile('document.pdf'); $data = $pdf->getPages()[0]->getDataTm(); Array ( [0] => Array ( [0] => Array ( [0] => 0.999429 [1] => 0 [2] => 0 [3] => 1 [4] => 201.96 [5] => 720.68 ) [1] => Document title [2] => R7 [3] => 27.96 ) [1] => Array ( [0] => Array ( [0] => 0.999402 [1] => 0 [2] => 0 [3] => 1 [4] => 70.8 [5] => 673.64 ) [1] => Calibri : Lorem ipsum dolor sit amet, consectetur a [2] => R9 [3] => 11.04 ) )
Ширина текста должна быть рассчитана для текста из dataTm, чтобы убедиться, что доступны все значения ширины символов. В следующем примере мы используем данные, приведенные выше.
$fonts = $pdf->getFonts(); $font_id = $data[0][2]; //R7 $font = $fonts[$font_id]; $text = $data[0][1]; $width = $font->calculateTextWidth($text, $missing);
С помощью PHP парсера вы можете извлекать мета-данные из PDF-файла. Доступны различные данные, которые могут меняться от файла к файлу.
$metaData = $pdf->getDetails(); Array ( [Producer] => Adobe Acrobat [CreatedOn] => 2022-01-28T16:36:11+00:00 [Pages] => 35 )
Если Вы работаете с PDF файлом, закодированным в Base64, Вы можете распарсить файл без сохранения его на диск.
Данный пример распарсит PDF файл в кодировке Base64 и получит текстовое содержимое всего файла.
<?php // Parse Base64 encoded PDF string and build necessary objects. $parser = new \Smalot\PdfParser\Parser(); $pdf = $parser->parseContent(base64_decode($base64PDF)); $text = $pdf->getText(); echo $text;