Понадобилось распечатать брошюру из файла PDF с разноориентированными листами.
Как оказалось, evince/atril, adobe reader этого не могут. Портят готовые страницы оборачивая их своими не настраиваемыми и не отключаемыми полями, да и с ориентацией неадекватно работают.
Страницы в PDF можно предварительно повернуть в pdfedit, pdfmod, pdftk. Однако, pdfedit портит повёрнутый русский текст; pdfmod портит таблицу xref в выходном файле, кроме того вот совсем не хочется, чтобы в системе исполнялись ехе-файлы; pdftk — вроде нормально делает, но это всё-таки лишняя сущность.
Помог ghostscript.
Пример для печати портретных страниц формата а6 на альбомные листы а5:
Следующая команда сориентирует в указанное положение все страницы, если они ещё и разного размера, то смасштабирует и отцентрирует:
gs -q -dNOPAUSE -dBATH -P- -dSAFER -sDEVICE=pdfwrite -sOutputFile=oriented.pdf -dDEVICEWIDTHPOINTS=297 -dDEVICEHEIGHTPOINTS=420 -dFitPage -dFIXEDMEDIA -dAutoRotatePages=/None -dCompatibilityLevel=1.4 -f infile.pdf -c quit
где 297 и 420 пункты (1/72 дюйма), для стандартных форматов можно посмотреть в документации ghostscript (файл Use.htm), для нестандартных — рассчитать из сантиметров/миллиметров. Если требуется можно указать ширину больше чем высоту, тогда страницы будут повёрнуты в альбомную ориентацию.
Далее, полученный файл oriented.pdf пропускаем через конвейер:
pdf2ps -dLanguageLevel=3 oriented.pdf - | psbook | psnup -pa5 -W10.5cm -H14.8cm -l -2 | ps2pdf -sPAPERSIZE=a5 -dAutoRotatePages=/None -dCompatibilityLevel=1.4 - booklet.pdf
тут:
-pa5 размер выходных листов (вместо этого можно указать как -w14.8cm -h21.0cm).
-W10.5cm -H14.8cm размер входных листов (psnup не знает формат а6 и не понимает размеры в пунктах).
Вместо -sPAPERSIZE=a5 (при нестандартных размерах листа можно указать -dDEVICEWIDTHPOINTS=пунктов -dDEVICEHEIGHTPOINTS=пунктов).
Полученный файл booklet.pdf можно печатать уже с помощью тех же evince/atril, adobe reader, отключив масштабирование, поворот, центрирование.
Для работы требуются пакеты ghostscript-common, ghostscript-utils, psutils.
Файлы с примерами во вложениях. Может кому пригодится.