piątek, 8 lutego 2013

Drukowanie broszurek pod Linuksem

Zdarza się, że potrzeba wydrukować z internetu spory plik papieru w formacie A5 (lub jak kto woli A4 2 strony na 1). Dodatkowo gdy zachodzi potrzeba częstego korzystania z wydruku, warto zrobić sobie z tego książeczkę (broszurkę) zszywaną wzdłuż środka strony (grzbietu złożonej strony A4). Żadne, znane mi, darmowe oprogramowanie nie oferowało takiej funkcjonalności. W efekcie, po krótkim googlowaniu, trafiłem na stronę Evince - printing a booklet. Tam znajduje się "fajny wzór", bez którego nijak sobie z tym problemem (w tym programie) nie można poradzić. Wszystko ok w przypadku niewielkiej objętości wolumenu, ale w przypadku 30+ stron szybciej byłoby napisać automat, który zrobi to za nas.

Ja potrzebowałem przygotować 92 strony do druku. Czy wyszło szybciej? W przypadku jednorazowego wydruku może nie, ale za to przypomniałem sobie o pętlach, instrukcjach warunkowych, logicznych oraz algebraicznych w bashu, a to wszystko w jednym miejscu :).

Oto "broszurkowa formuła" w bashu. Wystarczy ją wkleić do pliku i wykonać.#!/bin/bash # n - liczba stron do wydruku### zmień 0 na liczbę stron w pliku
n=0

# podnieś liczbę n do najbliższej podzielnej przez 4
while [ $[ $n%4 ] -gt 0 ]
  do n=$[ n+1 ]
done

# wygeneruj ciąg, który należy wprowadzić do pola "Strony:"
echo -ne $n
echo -ne ", "
for i in `seq 1 $[ $n/4 ]`
do
  echo -ne $[ $i*2 - 1 ]
  echo -ne ", "
  echo -ne $[ $i*2 ]
  echo -ne ", "
  echo -ne $[ $n - 2*$i + 1 ]
  if [ $i -ne $[ $n/4 ] ]
  then
    echo -ne ", "
    echo -ne $[ $n - 2*$i ]
    echo -ne ", "
  else
    echo ""
  fi
done