Утилиты для извлечения изображений и текста из 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.