CLI AI

Склеить и разрезать PDF из командной строки

2026-08-13

pdfunite a.pdf b.pdf out.pdf соединяет документы, а pdfseparate in.pdf page-%d.pdf разбирает один на части. Обе команды из poppler-utils, работают быстро и без потерь. Чего они не умеют — вытащить диапазон страниц одним документом и сжать файл — делает ghostscript, и это разделение труда и есть суть статьи.

1. Сколько здесь страниц

clai
$ clai сколько страниц в merged.pdf→ pdfinfo merged.pdf | grep '^Pages'Pages:           4

pdfinfo печатает пару десятков строк метаданных, а нужна обычно одна. Она же служит быстрой проверкой после любой операции ниже.

2. Соединить несколько файлов

clai
$ clai склей invoice.pdf и contract.pdf в один документ→ pdfunite invoice.pdf contract.pdf merged.pdf

Последний аргумент — всегда результат, всё перед ним — источники в порядке склейки. Команда ничего не печатает, проверяйте через pdfinfo.

3. Разобрать по страницам

clai
$ clai разбей merged.pdf по одной странице в файл→ pdfseparate merged.pdf page-%d.pdfpage-1.pdfpage-2.pdfpage-3.pdfpage-4.pdf

%d обязателен — на его место подставляется номер страницы. Список выше получен через ls -1, сама pdfseparate молчит.

4. Вырезать диапазон страниц

clai
$ clai вытащи страницы со 2 по 3→ pdfseparate -f 2 -l 3 merged.pdf slice-%d.pdfslice-2.pdfslice-3.pdf

-f — первая страница, -l — последняя. Обратите внимание на результат: два файла, а не один документ из двух страниц, и нумерация сохранила исходные номера.

5. Диапазон одним документом

clai
$ clai вытащи страницы 2-3 в один документ→ gs -q -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dFirstPage=2 -dLastPage=3 -sOutputFile=pages-2-3.pdf merged.pdf

У poppler такой команды нет, поэтому за дело берётся ghostscript. Проверено: pdfinfo pages-2-3.pdf показывает Pages: 2. Без gs путь такой: pdfseparate, затем pdfunite slice-2.pdf slice-3.pdf range.pdf — те же две страницы.

6. Уменьшить размер файла

clai
$ clai сожми pdf, чтобы влез во вложение письма→ gs -q -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -sOutputFile=small.pdf merged.pdf

Проверено на демо-файле: 84991 байт до, 31876 после — почти втрое меньше. /ebook — средний профиль; /screen жмёт сильнее и это видно на картинках, /prepress бережёт качество. Текст в любом случае не страдает: сжимаются растровые изображения внутри.

Gotchas

  • pdfunite перезаписывает последний аргумент. Это место всегда считается выходным файлом. pdfunite part1.pdf part2.pdf без третьего имени уничтожит part2.pdf — привычки «последний файл тоже источник» здесь нет.
  • pdfseparate ничего не собирает. Даже с -f и -l на выходе будет горка одностраничных файлов. Собирать обратно — работа pdfunite или ghostscript.
  • Зашифрованный PDF не откроет ни одна из них. Сначала снимается пароль (qpdf --decrypt, где он есть), иначе обе утилиты просто откажутся читать файл.

Related questions

Как повернуть страницы? Ghostscript умеет переиздать файл с -dAutoRotatePages=/None, но повернуть одну конкретную страницу заметно проще в qpdf.

Как вытащить текст? pdftotext file.pdf - напечатает текст в терминал. Для сканов без текстового слоя нужен OCR.

Как превратить страницы в картинки? pdftoppm -png -r 150 file.pdf page создаст page-1.png, page-2.png и далее с разрешением 150 dpi.

See also

CliAI знает, какой из двух наборов инструментов делает описанную вами работу, и показывает команду до запуска. Поставить одной строкой.