pdf-merge
Скрипт для сборки PDF из страниц нескольких файлов по YAML-конфигу. Форматы страниц (A4, A3 и др.) сохраняются без изменений.
Требования
- uv — менеджер Python-окружений
curl -LsSf https://astral.sh/uv/install.sh | sh # или на Arch: sudo pacman -S uv
Зависимости (pypdf, pyyaml) устанавливаются автоматически при первом запуске.
Использование
chmod +x run.sh
# Запуск с конфигом по умолчанию (merge.yaml в текущей папке)
./run.sh
# Явно указать конфиг
./run.sh my_project.yaml
# Или напрямую через uv
uv run pdf_merge.py my_project.yaml
Конфиг (merge.yaml)
output: result.pdf # куда сохранить результат
pages:
- file: document_a4.pdf
pages: "1-5" # диапазон
- file: drawing_a3.pdf
pages: "1" # одна страница
- file: document_a4.pdf
pages: "3-15,20" # диапазон + отдельная страница
- file: appendix.pdf
pages: [1, 2, 5] # YAML-список
label: "приложение" # опциональная метка для читаемости
- file: other.pdf # pages не указан — берёт все страницы
Форматы поля pages
| Запись | Результат |
|---|---|
"1-5" |
страницы 1, 2, 3, 4, 5 |
"1,3,7" |
страницы 1, 3, 7 |
"1-3,7,9-11" |
страницы 1, 2, 3, 7, 9, 10, 11 |
[1, 3, 5] |
страницы 1, 3, 5 |
4 |
страница 4 |
"all" / пусто |
все страницы файла |
Нумерация с 1 (как в PDF-ридере).
Пример вывода
Конфиг: merge.yaml
+ document_a4.pdf [титул + оглавление]: страниц 2 (из 42) — индексы [1, 2]
+ drawing_a3.pdf [чертёж А3]: страниц 1 (из 3) — индексы [1]
+ document_a4.pdf [основной текст]: страниц 14 (из 42) — индексы [3, 4, ..., 20]
Готово: result.pdf (17 стр.)
Description
Languages
Python
88.7%
Shell
11.3%