C’est la saison des examens et devoirs divers, dont certains à faire chez soi et à envoyer en version électronique.
Pour les corrections, il est toujours mieux d’imprimer. Mais il peut être long d’imprimer un à un plus d’une centaine de fichiers de 3 ou 4 pages chacun.
La solution est d’enregistrer tous ces fichiers dans un même répertoire et de les fusionner (concaténer) en un seul fichier qui sera imprimé.
Pour cela, sous Linux, il y a pdftk et la commande suivante qui rassemble en un seul tous les fichiers pdf du répertoire dans lequel elle est exécutée.
pdftk *.pdf cat output tout_en_un_fichier.pdf
Oui, mais si les fichiers en question n’ont pas tous un nombre de pages pair, on se retrouve à l’impression avec la page 1 du devoir n+1 au verso de la page 1 ou 3 ou 5 du devoir n. Une fois imprimés, les devoirs ne sont plus individualisés, sauf bien sûr à imprimer seulement au recto des feuilles, mais ce serait un gros gaspillage de papier.
La solution est fournie ici par gigiair : un script bash permettant d’ajouter une page blanche à la fin d’un pdf si et seulement si ce pdf a un nombre de pages impair. Je recopie le script:
#!/bin/bash
# ------------------------------------------------------------------
# Author: gigiair@forum.ubuntu-fr.com
# Version: $Id: pdfpair ,v 0.0 2015/02/12 07:32:51 debjjr Exp
# Title pdfpair
# Description : Insère une page vierge à tous les fichiers pdf dont le nombre de pages est impair
# Vérifie l'existence d'une page blanche dans le répertoire courant
# sinon en crée une à condition que TeXLive soit présent sur l'installation
# Pas d'analyse d'erreur si ces conditions ne sont pas remplies !
# ------------------------------------------------------------------
USAGE="pdfpair
FICH=$1
# --- Body --------------------------------------------------------
# Vérification de l'existence d'une page blanche sinon
# Confection d'une page A4 blanche
if [ -e "/home/$USER/pageblanche.pdf" ]
then PAGEBLANCHE="/home/$USER/pageblanche.pdf"
else
if [ ! -e "/tmp/pageblanche.pdf" ]
then
TEX="$(which pdftex) -output-directory /tmp --interaction nonstopmode -jobname pageblanche ;
echo "\\pdfpagewidth 210mm\\pdfpageheight 297mm\\strut\\bye"|$TEX
fi
PAGEBLANCHE="/tmp/pageblanche.pdf"
fi
#Récupération du nombre de pages
PDFINFO=$(which pdfinfo)
NBPAGES=$($PDFINFO "$FICH" |awk '/Pages:/ {print $2}')
if [ $((NBPAGES%2)) == 1 ]
then pdftk "$FICH" "$PAGEBLANCHE" output "/tmp/$FICH"
cp "/tmp/$FICH" .
fi
# -----------------------------------------------------------------
Il n’y a plus qu’à lancer le script sur les fichiers du répertoire à traiter
for f in *.pdf; do pdfpair "$f" ;done
puis la commande pdftk déjà présentée ci-dessus:
pdftk *.pdf cat output tout_en_un_fichier.pdf
Un script très utile. Merci à son auteur.