psutils и печать буклета
« : 07 Октябрь 2009, 18:49:46 »
Однажды, когда мне потребовалось распечатать документ в виде буклета, вспомнился FinePrint из периода вендоюзерства. По понятным причинам, использовать сие платное (непонятно, правда, за что) чудо не стал. Таковых аналогов нет, на форуме несколько раз вопрошающие поднимали тему. Покопавшись в http://localhost:631/help/ и psutils, пришел к вот такому решению проблемы.
Дано: foo.pdf
Надо: буклет из листов А4
Решение:
1) устанавливаем poppler-utils и psutils
Код: [Выделить]
sudo aptitude install poppler-utils psutils
2)
Код: [Выделить]
pdftops foo.pdf - | psbook | psnup -l -pa4 -2 | psselect -o -r | lpr
3) переворачиваем "вверх дном" распечатанную стопку листов и вставляем вновь во входной лоток
4)
Код: [Выделить]
pdftops foo.pdf - | psbook | psnup -l -pa4 -2 | psselect -e -r | lpr
5) для счастливых обладателей принтера с дуплексом все упрощается до одного действия
Код: [Выделить]
pdftops foo.pdf - | psbook | psnup -l -pa4 -2 | lpr -o sides=two-sided-short-edge
Если принтеров в системе больше одного, необходимо использовать вместо lpr
Код: [Выделить]
lp -d {имя_принтера} -o sides=two-sided-short-edge
Список доступных принтеров можно получить с помощью
Код: [Выделить]
lpstat -v
Поясню, что мы тут творим.
pdftops - понятно, конвертит pdf в PostScript, "-" - вывод в stdout
далее - psbook - добавляет в документ пустые листы, чтобы общее число страниц стало кратным четырём и раскладывает их для печати буклета.
psnup - размещает на листе А4 2 страницы и формирует альбомный лист.
psselect - выбираем четные и нечетные листы, причем выводим их в реверсивном порядке - чтобы последний лист был напечатан первым, необходимо для того, чтобы после распечатки стопки не перебирать страницы вручную.
lpr - собственно, печатаем.
Все это мероприятие можно обернуть в гуй, но лично мне по душе использовать nautilus-script
Код: [Выделить]
#!/bin/sh
pdftops $1 - | psbook | psnup -l -pa4 -2 | lpr -o sides=two-sided-short-edge;