Думаю не однократно многим хотелось распечатать некий документ в формате книги. Посему представляю на рассмотрение общественности скрипт, позволяющий автоматизировать это действие.
#!/bin/bash
#CONVERT_PDF_TO_PS=pdf2ps
CONVERT_PDF_TO_PS=pdftops
if [ ! -f "$1" ];
then
printf "Пример использования программы:\n\t$0 файл_формата_postscript.ps"
exit;
fi
if [ ! -r "$1" ];
then
printf "Не могу прочесть файл \"$1\"\n"
exit;
fi
ext=${1##*.}
name=`basename "$1" ".$ext"`
if [[ ps != "$ext" ]];
then
if [[ pdf != "$ext" ]];
then
printf "Предложенный файл не является файлом PostScript или PDF \"$1\"\n"
exit;
fi
fi
# количество листов бумаги в тетрадке
VAR_T=15
# количество страниц текста в тетрадке =
VAR_S=$[${VAR_T} * 4]
printf "${VAR_S}\n"
tmpfile=`basename $1`.XXX
tmpfile=`mktemp -t ${tmpfile}` || exit 1
printf "$tmpfile\n"
if [[ pdf == "$ext" ]];
then
$CONVERT_PDF_TO_PS $1 $tmpfile
fi
# добавляем, если требуется нужные пустые листы в конец документа
psbook $1 $tmpfile -q
# чтение количества страниц в файле
countpages=`head -n 30 $tmpfile |grep '%%Pages:' | (read p1 countpages; printf $countpages)`
printf "количества страниц в файле $countpages\n"
# расчет количества тетрадей
count_tetradi=$[$countpages / ${VAR_S}]
if [ $[ $count_tetradi * ${VAR_S}] -lt $countpages ];
then
count_tetradi="$[ $count_tetradi + 1 ]"
fi
printf "количество тетрадей $count_tetradi\n"
#разбиваем на тетради
for k in `seq 1 $count_tetradi`; do
i=$[ $k*${VAR_S} - ${VAR_S} + 1]
j=$[ $k*${VAR_S}]
printf "Обработка страниц с $i по $j - тетрадь № $k\n"
#psselect -p$i-$j $tmpfile `pwd`/part_$i-$j_`basename $1`
psselect -q -p$i-$j $tmpfile | psnup -2 -q | ps2pdf - `pwd`/lists_"$i"-"$j"_`basename $1 .ps`.pdf
done
rm $tmpfile
Скрипт формирует несколько файлов pdf из одного. В каждом полученном файле находится одна из тетрадей для сшивки книги.
Автоматической отправки книги на печать не стал делать специально ( не у всех дуплекс стоит ).
Думаю предусмотреть дополнительное разделение на четные и нечетные страницы, но пока не решил нужно ли именно в данном скрипте.
Жду ваших комментариев.