# pdf-merge Скрипт для сборки PDF из страниц нескольких файлов по YAML-конфигу. Форматы страниц (A4, A3 и др.) сохраняются без изменений. ## Требования - [uv](https://docs.astral.sh/uv/getting-started/installation/) — менеджер Python-окружений ```bash curl -LsSf https://astral.sh/uv/install.sh | sh # или на Arch: sudo pacman -S uv ``` Зависимости (`pypdf`, `pyyaml`) устанавливаются автоматически при первом запуске. ## Использование ```bash chmod +x run.sh # Запуск с конфигом по умолчанию (merge.yaml в текущей папке) ./run.sh # Явно указать конфиг ./run.sh my_project.yaml # Или напрямую через uv uv run pdf_merge.py my_project.yaml ``` ## Конфиг (merge.yaml) ```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 стр.) ```