Учитывая PDF, как извлечь изображения * и их местоположение на странице * из командной строки?

У меня есть PDF, который включает в себя текст и изображения. Я хочу извлечь изображения из PDF с помощью командной строки linux. Я могу использовать pdfimages для извлечения изображений, но также хочу найти местоположение на каждой странице, где находится это изображение. pdfimages может сказать мне, какая страница каждого изображения (из имени файла), однако все это дает мне. Есть ли другой инструмент FLOSS, который может это сделать?

Ответ 1

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

  • Преобразуйте каждую страницу PDF в изображение с помощью pdftoppm
  • Извлеките изображения с каждой страницы с помощью pdfimages
  • Преобразование изображений в один 8-битный серо-масштабный канал (для более быстрого анализа) с помощью cvCvtColor
  • Обнаружение объекта с помощью matchTemplate

Шаг 1 может выглядеть примерно так: Шаг 2:

for i in {0..99} ; do pdfimages -f $((i)) -l $((i+1)) file.pdf page$((i)); done

Шаг 3 здесь * простой пример

На шаге 4 у вас не должно быть проблем с обучением, потому что изображение будет точным совпадением. matchTemplate( imageToSearch, pdfPageImg, outputMap, 'CV_TM_SQDIFF')

(* - ссылка удалена, поскольку теперь она, похоже, указывает на сайт ransomware)

Ответ 2

В PDF нет гарантии, что при повторном использовании изображения это не будет отдельный образ. В файле PDF очень мало метаданных изображений, кроме места страницы и его фактического размера на странице. Я написал статью, объясняющую, как изображения хранятся внутри PDF в http://www.jpedal.org/PDFblog/2010/09/understanding-the-pdf-file-format-images/

Ответ 3

Здесь есть переключатель -xml для команды pdftohtml, которая даст положение изображения, размерность и информацию об источнике.

pdftohtml -xml file.pdf