Утилита на Python 3 для «умной» нарезки больших PDF-файлов на части с заданным максимальным размером (МБ). Анализирует страницы (наличие изображений/шрифтов, оценка «сложности») и адаптивно подбирает количество страниц в каждом сегменте, чтобы минимизировать количество частей и избежать превышения лимита.
- Анализ страниц: изображения, встроенные шрифты, оценка сложности и примерный размер страницы.
- Адаптивная нарезка с бинарным/адаптивным поиском оптимального диапазона страниц.
- Защитный запас (safety margin), минимальное число страниц и адаптивный рост сегмента.
- Вывод подробного логирования — информирует о размерах и статистике.
- Python 3.8+ (рекомендовано 3.10+).
qpdf(system package) — используется для создания сегментов.- Python-зависимость:
pypdf(скрипт попытается установить через pip при отсутствии).
Примеры установки:
# Установка qpdf (Debian/Ubuntu)
sudo apt-get update && sudo apt-get install -y qpdf
# Установка Python-зависимостей
pip install pypdf# Запуск (по умолчанию лимит 10 МБ)
python3 pdf_smart_split.py input.pdf
# Указать лимит в мегабайтах
python3 pdf_smart_split.py input.pdf 15- Скрипт анализирует документ, берёт выборку страниц и вычисляет скорректированный средний размер страницы.
- По оценке формирует начальную границу, затем уточняет её с помощью тестов
qpdf(адаптивное расширение + бинарный поиск). - При проблеме (например, страница больше лимита) создаёт отдельную часть и выводит предупреждение.
- Если скрипт не находит
qpdf, установите пакет системой (apt-get install qpdf). - Для больших/повреждённых PDF возможно увеличение safety_margin или ручная предварительная проверка проблемных страниц.
- Скрипт печатает информацию о каждом созданном сегменте — удобно для логирования и интеграции в CI.
#!/bin/bash
mapfile -t files < <(printf '%s\n' part-*.pdf | sort -V)
qpdf --empty --pages "${files[@]}" -- merged.pdf