Come stampare tanti file pdf velocemente? Semplice c’è la bash :)
Questa sera avevo voglia di stampare alcuni, tanti, file pdf. Questi file contenevano dei test a crocette a me utili per valutare la mia preparazione scolastica.
Generalmente per stampare si apre il file con un qualsiasi lettore pdf (il mio preferito è Okular) e poi si lancia la stampa.
Però dovere aprire tutti i file uno alla volta…selezionare stampa, selezionare la stampante e poi inviare la stampa è noioso e dispendioso in termini di tempo. Tanto più che volevo fare una stampa fronte e retro e la mia stampante non possiede il dispositivo per fare la stampa fronte-retro automatica. Quindi dovevo anche selezionare le pagine pari da stampare, indicare l’ordine inverso di stampa, lanciare la stampa, reinserire i fogli nel cassetto della stampante e dunque di nuovo stampa->seleziona pagine dispari, controllare che sia in ordine e poi stampare. Una rottura di scatole…
Beh per fortuna con bash tutte queste cose si risolvo facilmente tramite un banale script e un comando molto, molto utile: lp, presente nel pacchetto di CUPS (per gli utenti Fedora basta aver installato il pacchetto rpm cups
).
Con lp
è possibile inviare tramite la linea di comando un qualsiasi file supportato da CUPS ad una stampante collegata e configurata correttamente. Ad esempio si possono stampare agilmente file di testo, immagini, file PostScript e appunto file PDF semplicemente con:
$ lp file.pdf
In tal caso si invia il file di nome file.pdf
alla stampante predefinita di sistema per la stampa.
Esiste anche un altro comando simile a lp
che si chiama lpr
, quest’ultimo offre però meno opzioni ed in genere si preferisce l’uso di lp
.
Dalla manpage di lp si può capire tutta la sua potenzialità. A me interessavano in particolar modo le opzioni per indicare la stampante differente da quella predefinita di sistema e per poter stampare le pagine pari o dispari anche in ordine inverso se necessario.
Dunque tramite questo comando:
$ lpstat -p -d
la stampante Cups-PDF è in attesa. Abilitata da gio 04 ago 2011 20:00:43 CEST
la stampante EPSON-AL-M2000 è in attesa. Abilitata da gio 04 ago 2011 21:07:57 CEST
la stampante è adesso in linea.
la stampante EPSON-Epson-Stylus-SX110 è disabilitata da lun 13 giu 2011 14:33:21 CEST -
Unplugged or turned off
la stampante Stylus-COLOR-680 è disabilitata da lun 21 giu 2010 13:30:13 CEST -
Unplugged or turned off
destinazione predefinita di sistema: Cups-PDF
Si possono vedere le stampanti installate, configurate e disponibili sul sistema ed anche la stampante predefinita (nel mio caso Cups-PDF
).
Le opzioni del comando lp utili per la stampa delle pagine pari o dispari o per cambiare l’ordine di stampa si passano con l’opzione -o
, dunque:
-o page-set=odd # stampa pagine dispari
-o page-set=even # stampa pagine pari
-o outputorder=reverse # stampa in ordine inverso
Dunque posso procedere così se voglio stampare con EPSON-AL-M2000, prima le pari in ordine inverso:
$ lp -d EPSON-AL-M2000 -o outputorder=reverse -o page-set=even file.pdf
Quando ha finito metto i fogli nel cassetto apposito con la faccia “bianca” rivolta al lato corretto e poi stampo le dispari:
$ lp -d EPSON-AL-M2000 -o page-set=odd file.pdf
Come si può vedere l’opzione -d
serve ad indicare la stampante che si desidera utilizzare.
E ora per automatizzare il tutto? Facile, mi sono creato uno script bash, eccolo:
#!/bin/bash -
#===============================================================================
#
# FILE: printquickly.sh
#
# USAGE: ./printquickly.sh [filename]
#
# DESCRIPTION: Print file quickly from bash
#
# AUTHOR: Mario Santagiuliana (M.S.), mario at marionline.it
# COMPANY: marionline.it
# CREATED: 04/08/2011 20:15:15 CEST
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see .
#
#===============================================================================
PRINTER=EPSON-AL-M2000
printquickly() {
echo -e -n "Process file: $1 [y/...]?"
read a
if [[ $a = 'y' || $a = '' ]]; then
echo -e "...print the even pages in reverse order..."
lp -d $PRINTER -o outputorder=reverse -o page-set=even $1
echo -e -n "> Moved printed papers in the printer tray so I can print odd pages [y/...]?"
read b
if [[ $b = 'Y' || $b = '' ]]; then
echo -e "..print the odd pages in normal order..."
lp -d $PRINTER -o page-set=odd $1
fi
fi
echo
}
if [[ $1 ]]; then
printquickly $1
else
for file in *; do
printquickly $file
done
fi
Se non gli indico nessun file per la stampa in automatico cerca di stampare tutti i file della directory in cui si trova.
Inoltre attende un mio comando per partire con la stampa delle pagine dispari 🙂
Ovviamente lo script può essere migliorato e potenziato, per ora mi va bene così.
Della documentazione utile sull’uso dei comandi lp
e lpr
può essere trovata qui sul sito di cups.org.
Un’altra pagina che può risultare interessante è questa.
E buona stampa 🙂
P.S. perdonate eventuali errori di Inglese…
2 Commenti
Aggiungi un commento Annulla risposta
Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.
Grazie mille per aver condiviso la tua esperienza e ci aiuta.
Di niente 🙂