77 lines
2.5 KiB
Markdown
77 lines
2.5 KiB
Markdown
# 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 стр.)
|
||
```
|