Faig una petita pausa en les publicacions sobre arduino per comentar una sèrie de comandes que he fet servir força últimament.
Introducció
Fa poc, he tingut la necessitat d'imprimir alguns pdf Din-A4 en format de plec per tal de generar un dossier. Això, bàsicament, significa generar un nou pdf que, en imprimir-se a doble cara (pel cantó curt), genera un conjunt de full que si es dobleguen pel mig formen un dossier que es pot llegir com si d'un llibre (o llibreta) es tractés.
Per exemple, si tenim un pdf amb 4 fulls i imprimim a dos fulls per cara i doble cara, les pàgines ens quedaran impreses amb el següent ordre:
[1] [2] | [3] [4]
En canvi, si es converteix a plec, les pàgines queden ordenades de la següent manera:
[4] [1] | [2] [3]
D'aquesta manera, al doblegar el full en quedarà visible la pàgina [1] i, en obrir-la, tindrem la [2] a la esquerra i la [3] a la dreta per, finalment, arribar a la [4] en tancar el dossier.
Algunes impressores venen de base amb la possibilitat de fer plecs, però no es molt comú. Per un altre costat, quan estem imprimint moltes pàgines, un sol plec seria massa gruixut i es més convenient separar-ho en més d'un. Òbviament, això implica enquadernar-ho després per unir els plecs, però això és un altre tema.
Gràcies a les eines pstools de GNU-Linux és relativament senzill d'aconseguir. Després de mirar un parell de guies (
SonsoTux i
La Espiral) he arribat a un shell script que fa justament això.
Arxiu .sh
A continuació poso el codi i comento després com es fa servir (codi formatejat amb
http://hilite.me/):
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Sintaxis: $0 <arxiu pdf origen> [arxiu pdf desti] [nombre de fulls per plec]"
exit
fi
echo "Convertint $1"
rm /tmp/duplex.ps
rm /tmp/duplex_a5.ps
pdftops $1 /tmp/duplex.ps
if [ $# -eq 3 ]
then
echo "plecs de $3 fulls"
pags=$(($3*4))
psbook -s$pags /tmp/duplex.ps | psnup -pa4 -2 > /tmp/duplex_a5.ps
else
psbook /tmp/duplex.ps | psnup -pa4 -2 > /tmp/duplex_a5.ps
fi
if [ $# -gt 1 ]
then
a=$2
else
a=duplex_$1
fi
echo "El nou arxiu es diu $a"
ps2pdf /tmp/duplex_a5.ps $a
rm /tmp/duplex.ps
rm /tmp/duplex_a5.ps
El següent codi es pot guardar en un arxiu ".sh" per executar-lo en qualsevol moment.
Com fer-lo servir
Suposant que el guardem en un arxiu anomenat "plec.sh" per cridar-lo podem fer-ho de tres maneres:
./plec.sh arxiu_origen.pdf
Aquesta crida generarà un document anomenat "duplex_arxiu_origen.pdf" a punt per ser imprès en un únic plec. Alternativament també podem fer:
./plec.sh arxiu_origen.pdf arxiu_desti.pdf
Aquesta comanda és idèntica a l'anterior, però l'arxiu resultant es dirà "arxiu_desti.pdf". Finalment:
./plec.sh arxiu_origen.pdf arxiu_desti.pdf 8
Amb aquesta comanda no només generarem un arxiu anomenat "arxiu_desti.pdf", sinó que aquesta estarà preparat per imprimir-se en plecs de 8 fulls cadascún.
Breu explicació del funcionament
No entraré en masses detalls. A nivell bàsic, la comanda fa els següents passos:
- Convertir el pdf original en un arxiu ps temporal (comanda "pdftops")
- Amb la comanda "psbook" reordena les pàgines en plecs (les pàgines per plec es determina amb el paràmetre "-s", si no s'especifica fa un únic plec)
- Un cop reordenat, la comanda "psnup -pa4 -2" converteix el pdf Din-A4 en un pdf amb dues pàgines Din-A5 per cara.
- Convertir el ps resultant en el pdf final (comanda "ps2pdf")