brt a écritSCRIPT : "Sauver des arbres"
Qui n'a jamais essayé d'imprimer en deux pages par feuilles, recto-verso, (sur une imprimante recto) sans se planter ?
J'ai rédigé un petit script python qui donne des instructions pour que tout fonctionne bien :
...
- J'aimerais faire évoluer ce script, pour qu'il communique directement avec cups, m'enfin j'en suis encore loin.
Bonjour,
voici mon premier script "Sauvons des arbres", qui communique directement avec cups.
Ce script utilise zenity pour un peu plus d'interaction.
Il permet d'imprimer
un pdf en deux pages par feuilles, recto-verso (simple ou en livret A5 sur du A4 plié en 2), en choisissant l'imprimante de destination parmi celles installées (sous cups).
Pour cela il faut avoir cups d'installé, ainsi pdfnup (disponible dans le paquet pdfjam), et pdfbook pour le mode livret (à compiler soi-même, on peut le trouver ici :
ftp://cam.ctan.org/tex-archive/support/pdfbook.zip)
Trêve de blabla, voici le script
#!/bin/bash
#!/bin/bash
#Propose d'imprimer un pdf format A4 en 2 page par feuilles recto-verso (simple ou livret), pour des imprimantes ne gérant pas le recto verso.
#(avec choix de l'imprimante en fonction des imprimantes installées)
#nécessite cups, ainsi que le programme pdfnup disponible dans le paquet pdfjam
#L'impression en mode livret nécessite l'installation de pdfbook (à compiler soi-même, on peut le trouver ici : ftp://cam.ctan.org/tex-archive/support/pdfbook.zip)
rvsimple="recto-verso simple"
livret="mode livret"
fich=$1
#Si aucun fichier n'est donné en argument, on en choisi un
if test $# -eq 0; then
if ! fich=`zenity --title="Entrez le fichier pdf à imprimer" --file-selection`; then exit; fi
fi
#choix de l'imprimante (l'imprimante par défaut est proposée par défaut ;)
if ! lpr=$(zenity --entry --title="imprimante" --text="Choix de l'imprimante" --entry-text="$(lpstat -d | awk -F": " '{print $2}')" $(lpstat -a | awk -F" " '{print $1}')); then exit; fi
basefich=`dirname $fich`/`basename $fich pdf`
tmpfich="$basefich"1.book.pdf
if ! choix=$(zenity --list --title="choix du format" --column="choix" --column="format" \
--radiolist true "$rvsimple" \
--radiolist false "$livret" ); then exit; fi
if ! $(zenity --title="Poursuivre l'impression?" --question --text="Impression du fichier $fich en mode $choix sur l'imprimante $lpr ! \nContinuez?"); then exit ; fi
#mise en page (2 pages par feuilles selon le mode choisi)
if [ "$choix" = "$livret" ]; then
pdfbook -2 "$fich" "$tmpfich"
else
pdfnup --nup 2 "$fich" --paper a4paper --orient landscape --outfile "$tmpfich"
fi
#attendre que la mise en page soit finie
wait
#impression du recto
lp -d "$lpr" -o page-set=odd -o number-up=1 -o outputorder=reverse "$tmpfich" | zenity --title="Impressio du recto" --progress --pulsate --auto-close
if ! $(zenity --title="Recto imprimé" --question --text="Recto envoyé à l'impression \nAttendez la fin de l'impression et retournez les feuilles dans le bac de l'imprimante! \nContinuez?"); then
rm "$tmpfich"
exit
fi
#impression du verso
lp -d "$lpr" -o page-set=even -o number-up=1 "$tmpfich" | zenity --title="Impressio du verso" --progress --pulsate --auto-close
rm "$tmpfich"
#confirmation
zenity --title="Impression ok" --info --text="Verso envoyé à l'impression"
Usage :
sh ./print-pdf2book.sh document.pdf
ou alors, a placer dans les scripts nautilus, et l'utiliser en cliquant sur une fichier pdf.
Si aucun fichier n'est donné en argument, un fenêtre apparait et permet de choisir un fichier.
Le plus gros problème reste de savoir comment retourner les feuilles (attention, je crois que ce n'est pas pareil en r&v simple et en livret, à vous de tester).
Pour info, c'est une modif' dun script trouvé ici :
http://memo-gf.blogspot.com/2008/03/a5book.html (j'en remercie l'auteur, jusque là je n'avais jamais jeté un oeil à Zenity).
NB : il est ultra facile de réécrire ce script pour des fichiers ps, mais personnellement, j'imprime plus de pdf.
PS : si qqn à besoin d'une version ligne de commande seulement (en enlevant l'utilisation de zenity), qu'il me le fasse savoir.