Недавно мне пришлось столкнуться с задачей извлечения информации из PDF-документа и последующего преобразования этих данных в JSON-объект для дальнейшей обработки. Текстовые данные было относительно просто обработать, но изображения без разметки потребовали более сложного подхода. В этой статье я поделюсь своим опытом решения этой задачи.
Для извлечения текстовой информации я использовал утилиту pdftotext, которая позволяет конвертировать содержимое PDF в текстовый формат с поддержкой кодировки UTF-8 и сохранением структуры документа.
Таким образом, текстовая информация была успешно извлечена и сохранена в массиве $anagrafica для дальнейшего использования.
Извлечение Изображений из PDF
Когда дело дошло до обработки изображений, стандартные методы не подошли, так как изображения в PDF не имели явной разметки. Для их извлечения я обратился к утилите pdftohtml, которая позволяет преобразовать PDF в HTML или XML с сохранением всех элементов, включая изображения.
С помощью pdftohtml я сгенерировал XML-документ, содержащий записи для каждого изображения в PDF. Затем я преобразовал эти записи в объекты SimpleXML и добавил их в массив $images.
Обработка Изображений
После того как изображения были извлечены и сохранены, мне нужно было найти нужные изображения по их характеристикам, таким как ширина. Например, я отфильтровал изображения, ширина которых равнялась 77 пикселям, и отсортировал их по вертикальному положению.
Далее, используя команду convert из библиотеки ImageMagick, я извлек цвет пикселя из конкретных позиций на изображениях и сохранил результаты в JSON-объект:
$color = shell_exec('convert "'.$imagePath.'" -format \'%[pixel:p{100,50}]\' info:- ');
switch ($color) {
case 'srgb(253,78,83)':
$anagrafica[$this::chekcs[$pos]] = 'red';
break;
case 'srgb(123,196,78)':
$anagrafica[$this::chekcs[$pos]] = 'green';
break;
case 'srgb(254,211,80)':
$anagrafica[$this::chekcs[$pos]] = 'yellow';
break;
}
Эта команда позволяет получить цвет конкретного пикселя на изображении, что помогает определить, какое именно изображение использовать для дальнейшей обработки.
Заключение
Этот подход к извлечению и обработке данных из PDF-документов оказался весьма эффективным. Используя комбинацию утилит pdftotext, pdftohtml и convert из ImageMagick, я смог извлечь и обработать как текстовую информацию, так и изображения без разметки, что позволило мне успешно преобразовать их в JSON-объект для последующей обработки. Надеюсь, этот опыт будет полезен тем, кто столкнется с аналогичной задачей.