Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode

Утилиты для извлечения изображений и текста из PDF

В повседневной работе часто возникает задача быстро извлечь изображения или текст из PDF-документов — будь то подготовка презентаций, анализ документов, создание датасетов или автоматизация обработки большого количества файлов. Стандартные графические редакторы или онлайн-сервисы либо требуют ручной работы, либо работают медленно, либо не позволяют автоматизировать процесс.

Чтобы упростить и ускорить решение этих задач, я написал набор утилит на C++ — PDF2Images. Они позволяют:

  • Мгновенно извлекать все изображения из PDF-файлов в нужном формате (png, jpg, tiff и др.)
  • Получать текст с разбивкой по страницам или в один файл
  • Гибко настраивать параметры извлечения: диапазон страниц, формат выходных файлов, разрешение и пр.
  • Использовать утилиты в автоматических скриптах и пайплайнах

Я сам ежедневно использую эти инструменты для подготовки скриншотов и текстовых выборок из PDF, а также для построения RAG (Retrieval-Augmented Generation) — когда нужно быстро получить текстовую базу для дальнейшей работы с LLM.

Установка

Для работы потребуется установленная библиотека poppler:

apt install libpoppler-dev

Далее клонируем репозиторий:

git clone --recursive https://github.com/valmat/pdf2images
cd pdf2images

или, если без --recursive:

git clone https://github.com/valmat/pdf2images
cd pdf2images
git submodule update --init --recursive

Переходим в папку src и собираем проект:

cd src
make release

Для debug-сборки можно использовать:

make -j

Извлечение изображений

bin/extract_imgs.bin <input_file.pdf> [options]

Основные опции:

  • -i, --input — путь к PDF-файлу
  • -o, --output — папка для сохранения изображений (по умолчанию .)
  • -e, --ext — формат изображений (по умолчанию png, можно jpg, tiff и др.)
  • -f, --from — первая страница для обработки (по умолчанию 1)
  • -l, --lim — количество страниц для обработки (по умолчанию нет ограничений)
  • -x, --xres, -y, --yres, -d, --dpi — разрешение и dpi
  • -g, --gray — черно-белый режим
  • -q, --quiet — тихий режим (без вывода прогресса)

Пример:

bin/extract_imgs.bin -i mydoc.pdf -o imgs -e jpg -f 2 -l 5

Извлечет изображения со 2 по 6 страницу в папку imgs в формате jpg.

Извлечение текста

bin/extract_txts.bin -i <input_file.pdf> [options]

Основные опции:

  • -i, --input — входной PDF (обязательно)
  • -o, --out-dir — папка для сохранения текстов (по умолчанию ./)
  • -O, --out-file — имя выходного файла (если указано, все страницы будут в одном файле)
  • -f, --from — первая страница для извлечения (по умолчанию 1)
  • -l, --limit — сколько страниц извлекать (по умолчанию без ограничения)
  • -n, --nopagebreak — не добавлять разделитель между страницами (актуально при сохранении в один файл)

Пример:

bin/extract_txts.bin -i mydoc.pdf -O all_text.txt -f 1 -l 10

Извлечет текст с 1 по 10 страницу в файл all_text.txt.


Утилиты распространяются под лицензией MIT, исходники доступны на GitHub.