Перейти к содержанию

Разделение PDF на цветные и ЧБ страницы

Команда нужна, когда требуется быстро получить две версии итогового PDF: файл только с цветными страницами и файл только с черно-белыми страницами.

task pdf:split-color -- Куприянов_И221_диплом.pdf
docker compose --profile latex run --build --rm latex python3 scripts/split_pdf_color.py Куприянов_И221_диплом.pdf

Для входного файла document.pdf скрипт создаст:

Файл Содержимое
document_color.pdf Только страницы, где найдено покрытие C, M или Y выше порога
document_bw.pdf Остальные страницы

Как определяется цветность

Скрипт scripts/split_pdf_color.py запускает Ghostscript с устройством inkcov:

gs -q -dSAFER -dBATCH -dNOPAUSE -o - -sDEVICE=inkcov document.pdf

Страница считается цветной, если максимальное покрытие C/M/Y больше порога. По умолчанию порог равен 0.00001, чтобы отсечь нулевые значения и мелкий численный шум.

Если нужен другой порог:

task pdf:split-color -- document.pdf --threshold 0.001

Почему используется qpdf

Ghostscript подходит для анализа цветности, но при экспорте через pdfwrite он перегенерирует страницы и может изменить поворот или геометрию. Поэтому экспорт делает qpdf: он копирует выбранные страницы из исходного PDF без перерисовки.

Суммарное количество страниц в *_color.pdf и *_bw.pdf должно совпадать с количеством страниц исходного PDF.

Зависимости

Docker-команда использует LaTeX-образ проекта, где уже установлены Ghostscript и qpdf.

Для локального запуска без Docker нужны:

Инструмент Проверка
Ghostscript gs --version
qpdf qpdf --version
uv run python scripts/split_pdf_color.py document.pdf