Ajouter une page blanche à un PDF seulement si le nombre de pages est impair

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 .pdf"
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.

Ce contenu a été publié dans Informatique, logiciels libres, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.