--edit
Pour éviter à ceux qui seraient intéressés de parcourir toute la discussion qui suit, qui se rapproche d'ailleurs plutôt d'un monologue, voici ce que fait le script dont il s'agit.
Ce script fait de *l'imposition (
Lien pour une explication de l'imposition en imprimerie ;
plus technique):
- en un seul livret [pdfbook].
- en 4 feuilles par pages, en cahier d'autant de pages que voulues [pdfbook].
- en 8 feuilles par pages,
* en 8 pages par cahier
* ou en 16
- en 16 feuilles par pages, cahiers de 16 pages.
* Surtout ce script gère les décalages dus à l'épaisseur du papier et au pliage.
J'appelle gouttière cette gestion du décalage dû à l'épaisseur du papier. D'où l'option -g. Cette option prend comme valeur le décalage vers l'éxtérieur des pages extérieures des cahiers. Ainsi pour un cahier de 8 pages, les pages 1 et 8 sont décalées de G, 2 et 7 de 0,66 x G , 3 et 6 de 0,33 x G , 4 et 5 de 0 x G.
* on peut de plus décaler toutes les pages en hauteurs ou bien vers l'extérieur (vers la droite pour les pages impaires, l'inverse pour les pages paires, la page 1 étant une page droite).
* en utilisant l'option -m 'LISTE' le script ne fait plus d'imposition mais déplace les pages indiquées verticalement ou horizontalement.
L'option -h affiche une description des options. Si c'est pas clair, faîtes m'en part.
Pour les décalages il faut donner un nombre, qui correspond dans le script à des points (pt ; 1 point = 0,3759mm).
Le script n'ajoute aucunes autres modifications. Il faut donc prévoir ses marges et ses traits de coupe. À moins que quelqu'un ne veuille l'ajouter...
Côté qualité ce script utilise pdfjam et donc le résultat est de la même qualité que ce programme qui utilise lui-même TeX. Ayant une immense confiance en la qualité de TeX, je crois que le résultat ne peut-être que de qualité.
Côté programme ne vous étonnez pas de trouver des hérésies. Je suis prêt à tout avouer, reconnaître, corriger... Je suis autodidacte dans le domaine et c'est mon premier et sans doute mon dernier script de plus de 20 lignes. Corrigez donc tout ce que vous voulez. Pourquoi n'ai-je pas choisi tel ou tel langage ?... C'est celui que j'avais sous la main et ça marche sur toutes les machines linux.
Voici le script dans sa dernière version
(31/03/2015):
(Installation de pdfjam requise : sudo apt-get install pdfjam).
Mais avant, pour ceux qui n'ont jamais exécuté (promis c'est pas violent!) de script :
- créer un fichier texte vierge et le nommer uniquement : pdflivre.sh
- copier tout le texte du script ci-dessous dans ce fichier, le fermer en l'enregistrant.
- clic droit sur le fichier > Propriétés > Permissions > Cocher "Autoriser ce fichier à s'exécuter comme un programme".
- ouvrir un terminal, attraper le fichier et l'y faire glisser. Taper entrée, le message d'aide s'affiche.
En #5 des exemples.
#/bin/bash
# Ca semble très long mais :
# il y a une centaine de lignes pour l'aide et la définition des variables 1. Les variables
# une centaine de lignes de fonction dont l'une est un peu complexe 2. Les fonctions
# on reprend ensuite trois fois la même logique : 3 x 50 3. Le script
################ AIDE
aide ()
{
echo -e "
USAGE : pdflivre -i entrée.pdf [OPTIONS]\n
Manipulation de pdf utilisant pdfjam (TeX).
Imposition en livret ou en cahier, déplacement des pages, gouttière.\n
Seule la première option est obligatoire: par défaut imposition en 1
livret en 4 pages par feuille.
-i FICHIER FICHIER est un document pdf (format portrait pour
l'imposition).
-o FICHIER FICHIER est le document de sortie.
[Défaut : ~/pdflivre.pdf].
-f NPFEUILLE NPFEUILLE est le nombre de pages par feuilles.
* 4 : 2 pages par face (utilise pdfbook).
* 8
* 16 [Defaut: 4]
-c NPCAHIER NPCAHIER est le nombre de pages par cahier.
* 8, 16, 32... pour 4 pages par feuilles,
[Défaut: un seul livret].
* de 8 [défaut] ou de 16 pour 8 pages par feuilles.
* non disponible pour 16.
-d DELTAH DELTAH est un nombre. Il permet de décaler toutes
les pages vers le haut d'autant de pt.
-v DELTAV Décalage les pages vers l'extérieur d'autant de pt.
-g GOUTTIÈRE Toujours un nombre en point. C'est le décalage
vers l'extérieur des pages extérieures
des cahiers. Les autres pages sont décalées
proportionnelement. Ici les décimales ne sont
pas prises en compte : 1,95 -> 1 pt ...
Pour du papier 80g compter environ 1pt pour
2 feuilles. Autrement, prendre 10 feuilles, les
plier et mesurer le décalage.
pdflivre -i entrée.pdf -m 'LISTE'
-m 'LISTE' LISTE indique PAGE1,DeltaH,DeltaV:PAGE2,DeltaH...
Exemple : '10,5,-2:15,5,0' déplacera la page 10
de 5 pt vers la droite de -2 pt vers le haut
cad de 2 pt vers le bas ; puis la p 15 de 5pt
vers la droite.
Si cette option est utilisée l'imposition n'est
pas effectuée: il faut procéder en deux fois.
-s Ne pas effacer le dossier temporaire /tmp/pdflivre.
-h Cette aide.
"
exit 0
}
####################
mkdir -p /tmp/pdflivre
##########################################################
# 1. Les variables
##########################################################
while getopts "i:o:c:f:d:v:g:m:sh" option ; do
case $option in
i) IN="$OPTARG";;
o) OUT="$OPTARG";;
c) NPCAHIER="$OPTARG";;
f) NPFEUILLE="$OPTARG";;
d) DELTAG="$OPTARG";; # Décalage horizontal vers l'extérieur (pour toutes les pages)
v) DELTAV="$OPTARG";;
g) OFFSETG="$OPTARG";; # Offset (décalage vers l'extérieur des pages extérieures
#+ des cahiers, les intérieures sont décalées selon
# une fonction linéaire)
m) LISTEDELTA="$OPTARG";;
s) NETTOYAGE=0;;
h) aide ;;
?) echo "Option -$OPTARG inconnue" ; aide ;;
esac
done
NPAGE=`pdfinfo "$IN" |grep "Pages:"|cut -c 17-` # Nombre de page du pdf.
dim='pt'
### On traite les cas d'absence d'option en donnant des valeurs par défaut sauf pour l'entrée.
if [ -z "$IN" ]; then
aide
fi
if [ -z "$OUT" ]; then
OUT=`echo ~/pdflivre.pdf`
fi
if [ -z "$NPFEUILLE" ]; then # Le nombre de page par feuille : peut-être 4 (pdfbook), 8 ou 16
NPFEUILLE=4
fi
if [ -z "$NPCAHIER" ]; then # Nombre de page par cahier
# Il faut correctement définir $NPCAHIER car il sert au calcul de la gouttière:
if [ "$NPFEUILLE" = 8 ]
then NPCAHIER=8
else
let " NPCAHIER = 4*(($NPAGE +3)/4)" # On profite de ce que let ne connaisse
echo "NPCAHIER = $NPCAHIER"
LIVRET=1
echo 'LIVRET' #+ pas les demi-mesure.
fi
fi
if [ -z "$DELTAG" ]; then # Décalage horizontal vers l'extérieur (pour toutes les pages)
DELTAG=0
fi
if [ -z "$DELTAV" ]; then # Décalage vertical (pour toutes les pages)
DELTAV=0
fi
if [ -z "$OFFSETG" ]; then # Offset (décalage vers l'extérieur des pages extérieures
OFFSETG=0 #+ des cahiers, les intérieures sont décalées selon
fi # une fonction linéaire)
let " NPTOTAL = ((( "$NPAGE" -1)/ "$NPCAHIER")+1)*"$NPCAHIER" " # Nombre final de page du pdf : premier multiple du nombre de cahier.
##########################################################
# 2. LES FONCTIONS
##########################################################
####### Pour faire joli et donner des nouvelles
message ()
{
echo -e "\n=============================\n$1"
}
####### Fonction de dispersion des pages en autant de documents
dispersion ()
{
message 'FONCTION DE DISPERSION'
# Calcul de l'offset :
# Pour les pages le plus à l'extérieur il faut tout l'offset. Exemple dans le cas de 8
# pages par cahier : les pages 1 et 8, puis 9 et 16...
# Tandis que l'offset doit être à 0 pour les pages intérieures. Ex : 4 et 5.
# Dans notre exemple on va donc tacher de donner 3/3 d'offset aux pages 1 et 8,
# 2/3 aux 2 et 7, 1/3 aux 3 et 6, 0/3 aux 4 et 5.
# y est ce 3 , x prend les valeurs de 3 à 0 puis 0 à 3 grâce à z qui le fait s'incrémenter ou se décrémenter...
let " y = ($NPCAHIER /2)-1 "
x="$y"
z=-1
### La boucle de dispersion
p=0
while [ $p != "$NPAGE" ]
do
let " p = $p +1 "
# Calcul de l'offset (Histoire x,y et z...
let " DELTAH = $DELTAG + (($x* $OFFSETG)/$y) " # Le delta horizontal vaut le delta
#+ general plus l'offset
if [ $i = 1 ]; then
i=0 # i est l'indicateur de sommet de cahier:
#+ quand il vaut 1 $x doit rester sur 0 ou y une deuxième fois.
else
let " x = x + z "
case $x in
0|"$y") let " z = - $z "
i=1 ;;
esac
fi
# Le décalage horizontal doit être négatif pour les pages impaires
#+ afin d'être toujours vers l'exterieur.
let " n = 2* ($p /2) "
if [ $p -eq "$n" ]; then
DELTA="-$DELTAH$dim $DELTAV$dim"
else
DELTA="$DELTAH$dim $DELTAV$dim"
fi
#Tout est prêt.
NOMPAGE="/tmp/pdflivre/$p.pdf"
message " Export de la page $p sur $NPAGE\n Décalage vertical : $DELTAH pt\n Vers l'éxterieur : $DELTAV pt" # Message
pdfjam $IN $p --offset "$DELTA" --outfile $NOMPAGE
done
# Fin de la fonction dispersion
}
####### Pour tourner les pages de la $liste de 180°
retournement () # ATTENTION : la $liste est définie en son lieu car
#+ propre à chaque imposition
{
for p in $liste
do
NOMPAGE="/tmp/pdflivre/$p.pdf"
echo "$NOMPAGE"
let " POURCENT = (100 * $p) / $NPTOTAL " # Un petit message
message " Rotation des pages : $POURCENT %"
pdf180 $NOMPAGE --outfile $NOMPAGE
done
}
#
####### Pour rassembler les pages ainsi tournées
rassemblement ()
{
liste=''
p=0
while [ $p != "$NPAGE" ]
do
let " p = $p +1 "
liste="$liste /tmp/pdflivre/$p.pdf 1"
done
output=/tmp/pdflivre/temp.pdf
pdfjam $liste -o $output
}
### rassemblement mais en complétant avec des pages blanches jusqu'au nombre de pages du document final, multiple du nombre de cahier
rassemblement_complet ()
{
liste=''
p=0
while [ $p != "$NPAGE" ]
do
let " p = $p +1 "
liste="$liste /tmp/pdflivre/$p.pdf 1"
done
while [ $p != "$NPTOTAL" ]
do
let " p = $p +1 "
liste="$liste,{}"
done
output=/tmp/pdflivre/temp.pdf
pdfjam $liste -o $output
}
#
nettoyage ()
{
if [ "$NETTOYAGE" = 0 ]; then
message 'Les fichiers temporaires sont dans /tmp/pdflivre'
exit 0
else
rm -r /tmp/pdflivre
fi
}
##########################################################
# 3. DECALAGE page par page
##########################################################
if [ -z "$LISTEDELTA" ]; then
debile=0
else
message 'DECALAGE PAGE PAR PAGE'
# La boucle de dispersion mais avec DELTAH et DELTAV qui varient en fonction de $LISTEDELTA
p=0
while [ $p != "$NPAGE" ]
do
let " p = $p +1 "
DELTAH=0
DELTAV=0
for l in `seq 1 "$NPAGE"` ;
do
PAGE=`echo "$LISTEDELTA" | cut -d":" -f $l | cut -d"," -f1`
if [ -z $PAGE ]; then # Là y a un problème : si on met -z $PAGE comme test ça ne fonctionne pas ! D'où cette astuce.
debile=0
else
if [ $PAGE = $p ]; then
DELTAH=`echo "$LISTEDELTA" | cut -d":" -f $l | cut -d"," -f2`
DELTAV=`echo "$LISTEDELTA" | cut -d":" -f $l | cut -d"," -f3`
fi
fi
done
DELTA="$DELTAH$dim $DELTAV$dim"
#Tout est prêt.
NOMPAGE="/tmp/pdflivre/$p.pdf"
message " Export de la page $p sur $NPAGE\n Décalage vertical : $DELTAH pt\n Vers l'éxterieur : $DELTAV pt" # Message
pdfjam $IN $p --offset "$DELTA" --outfile $NOMPAGE
done
rassemblement
cp $output $OUT -v
nettoyage
exit 0 # Et on ne fait pas d'imposition. C'est vraiment deux choses trop différentes:
#+ Dans mon idée, on modifie son pdf, on le fait propre, ensuite seulement on l'impose.
fi
##########################################################
# 4. IMPOSITION
##########################################################
# 4 cas
# a. 4 pages par feuilles : on utilise pdfjam mais on traite avant le décalage
# b. 8 pages par feuilles : une fois avec 8 pages par cahier, une autre avec 16.
# c. 16 pages par feuilles
if [ "$NPFEUILLE" = 4 ]; then
##########################################################
# 4.a 4 pages par FEUILLES -> pdfbook
##########################################################
message 'IMPOSITION 4 PAGES par FEUILLE'
##### La fonction d'assemblage qui servira dans les deux cas du 4 pages
fonction_pdfbook ()
{
message ' Export du document final.'
if [ "$LIVRET" -eq 1 ]; then
pdfbook $1 --landscape -o $OUT
else
pdfbook $1 --signature $NPCAHIER --landscape -o $OUT
fi
}
#______________________________________________________________________
##### Exécution de notre dessein avec une condition afin de traiter les décalages
if [ "$DELTAG" -eq 0 ] && [ "$DELTAV" -eq 0 ] && [ "$OFFSETG" -eq 0 ]; then # aucun décalage :
message 'Export du document final.' # Eh oui! pdfjam fait ça très bien tout seul.
fonction_pdfbook $IN
else # Eh non! Là, y a un peu de travail.
dispersion # "Dispersion" afin de traiter les décalages.
rassemblement # "Rassemblement"
fonction_pdfbook $output
fi
elif [ "$NPFEUILLE" = 8 ]; then
##########################################################
# 4.b 8 pages par FEUILLES
##########################################################
# 2 cas : 8 ou 16 pages par cahier
if [ "$NPCAHIER" = 8 ]; then
#=========================================================
# 8 pages par CAHIER
#=========================================================
message 'IMPOSITION 8 PAGES par FEUILLE \n et 8 p par CAHIER'
### DISPERSION des pages (avec les décalages)
dispersion
### Création de la liste de pages à TOURNER
liste=''
p=1
while [ $p -le "$NPAGE" ]
do
let " a = $p +1 " ; let " b = $p +6 " ; let " c = $p +7 "
liste="$liste $p $a $b $c"
let " p = $p +8"
done
### On TOURNE ces pages
retournement
### On les rassemble en complétant par des pages blanches
rassemblement_complet
### Reste à donner le BON ORDRE
liste=''
p=1
while [ $p -le "$NPTOTAL" ]
do
let " a = $p "
let " b = $p +7 "
let " c = $p +3 "
let " d = $p +4 "
let " e = $p +6 "
let " f = $p +1 "
let " g = $p +5 "
let " h = $p +2 "
liste="$liste$a,$b,$c,$d,$e,$f,$g,$h"
let " p = $p +8"
if [ $p -lt "$NPTOTAL" ]; then
liste="$liste,"
fi
done
### EXPORTATION
message ' Export du document final.'
pdfjam --nup 2x2 $output $liste --outfile $OUT
elif [ "$NPCAHIER" = 16 ]; then
#=========================================================
# 16 pages par CAHIER
#
#(Mais toujours en 8 pages par feuilles.
#=========================================================
#Exemple : impression de 16 a5 sur 2 a3, on plie chaque feuille en 4 et on les emboîte ensemble)
message 'IMPOSITION 8 PAGES par FEUILLE \n et 16 p par CAHIER'
### DISPERSION des pages (avec les décalages)
dispersion
### Création de la liste des pages à TOURNER
liste=''
p=1
while [ $p -le "$NPAGE" ]
do
let " a = $p " ; let " b = $p +1 " ; let " c = $p +4 " ; let " d = $p +5 " ; let " e = $p +10 " ; let " f = $p +11 " ; let " g = $p +14 " ; let " h = $p +15 "
liste="$liste $a $b $c $d $e $f $g $h"
let " p = $p +8"
done
### On tourne ces pages
retournement
### On RASSEMBLE les pages
rassemblement_complet
### IMPOSITION des pages (On fabrique la liste des pages dans le bon ordre)
liste=''
p=1
while [ $p -le "$NPTOTAL" ]
do
let " a = $p "
let " b = $p +15 "
let " c = $p +3 "
let " d = $p +12 "
let " e = $p +14 "
let " f = $p +1 "
let " g = $p +13 "
let " h = $p +2 "
let " i = $p +4 "
let " j = $p +11 "
let " k = $p +7 "
let " l = $p +8 "
let " m = $p +10 "
let " n = $p +5 "
let " o = $p +9 "
let " q = $p +6 "
liste="$liste$a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$q"
let " p = $p +16 "
if [ $p -lt "$NPTOTAL" ]; then
liste="$liste,"
fi
done
### EXPORTATION
message ' Export du document final.'
pdfjam --nup 2x2 $output $liste --outfile $OUT
# FIN de 8 pages par feuilles
else # Sinon : au secours
aide
fi
elif [ "$NPFEUILLE" = 16 ]; then
####################################################################
#
# 4.c 16 pages par FEUILLE
#
####################################################################
message 'IMPOSITION 16 PAGES par FEUILLE'
NPCAHIER=16 # Y a pas à discuter (en tout cas pour l'instant)
let " NPTOTAL = ((( "$NPAGE" -1)/ "$NPCAHIER")+1)*"$NPCAHIER" "
### DISPERSION des pages
dispersion
### Création de la liste de pages à tourner
liste=''
p=1
while [ $p -le "$NPAGE" ]
do
let " a = $p +4 " ; let " b = $p +5 " ; let " c = $p +6 " ; let " d = $p +7 " ; let " e = $p +8 " ; let " f = $p +9 " ; let " g = $p +10 " ; let " h = $p +10 "
liste="$liste $a $b $c $d $e $f $g $h"
let " p = $p +8 "
done
### On tourne ces pages
retournement
### On les rassemble en complétant par des pages blanches
rassemblement_complet
### Reste à donner le bon ordre
liste=''
p=1
while [ $p -le "$NPTOTAL" ]
do
let " a = $p +4 "
let " b = $p +11 "
let " c = $p +8 "
let " d = $p +7 "
let " e = $p +3 "
let " f = $p +12 "
let " g = $p +15 "
let " h = $p "
let " i = $p +6 "
let " j = $p +9 "
let " k = $p +10 "
let " l = $p +5 "
let " m = $p +1 "
let " n = $p +14 "
let " o = $p +13 "
let " q = $p +2 "
liste="$liste$a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$q"
let " p = $p +16"
if [ $p -lt "$NPTOTAL" ]; then
liste="$liste,"
fi
done
### EXPORTATION
message ' Export du document final'
pdfjam --landscape --nup 4x2 $output $liste --outfile $OUT
####################################################################
#
# C'EST LA FIN .... MAIS
else # Si c'est pas rentré dans les cases c'est que c'est pas bon....
aide
fi
# Et puis on résume l'histoire
message "Ce message peut s'afficher malgré des erreurs!
Le fichier de sortie est : $OUT
pages par feuille : $NPFEUILLE
pages par cahier : $NPCAHIER
Décalage général des pages en pt
vers l'exterieur : $DELTAG pt
vers le haut : $DELTAV pt
Gouttière : $OFFSETG pt"
nettoyage # Un peu d'écologie
Si vous utilisez ce script, merci de faire part de votre expérience, pour signaler une erreur ou confirmer qu'il n'y en a pas.
Ci-dessous quelques explications à propos de l'utilisation de pdfjam.
----------------------------Début de la "discussion"
Bonjour,
Nous étions quelques-uns à nous être penchés (en français) sur pdfjam. La doc est en effet assez abondante mais en anglais et il s'agit souvent de termes techniques. Et pdfjam en plus d'être puissant est de très bonne qualité (utilise TeX) et multiplateforme.
Ayant découvert une nouvelle utilisation de ce script, j'ouvre une nouvelle discussion mais je cite d'abord les résultats de la précédente discussion afin de rassembler les informations. Si j'avais le temps je ferais une page de wiki...
1.Utilisation générale
Installation par apt-get install pdfjam
D'une manière générale pdfjam concatène (rassemble) les pages de plusieurs documents en un seul. Cf pdfjam --help.
Exemple :
pdfjam doc1.pdf '1,5,10' doc2.pdf '{},5-15,20-'
crée un seul document dans le home avec un nom reprenant la commande qui contient dans l'ordre : les pages 1 5 et 10 de doc1 , une page blanche et les page 5 à 15 et 20 à la fin du document 2. Les documents peuvent être des fichiers images, les pages peuvent être tournées, agrandies...
Quelques options:
La taille du papier : --a3paper
Le format paysage : --landscape
--batch : un fichier de sortie par fichier d'entrée.
Le fichier de destination : par défaut il est appelé pdfjam-... .pdf et est envoyé dans le home.
Avec --outfile on peut :
OU préciser un dossier ET alors on peut préciser un suffixe avec --suffix (le suffixe s'intercale alors entre pdfjam-...- et .pdf)
OU préciser directement dossier/nom_de_fichier.pdf
2. L'imposition (vulgairement appelée : "faire un livret")
Comme dit plus bas pdfbook est une commande reprenant pdfjam avec certaines options. Lien pour une explication de l'imposition en imprimerie.
En réalité pdfbook sait imposer!
Pour des infos il faut visiter fichier texte (en anglais) dans le man des sources de pdfjam. facile, hein! Pourtant c'est un outil très recherché. Pdfjam
Deux exemples:
pdfbook input.pdf -o out.pdf Impose le pdf en cahier de 4 pages.
pdfbook --signature 12 input.pdf -o out.pdf Impose le pdf en cahier de 12 pages (3 pliants de 4 pages qui s'emboîtent)
Pour faire un livret il suffit d'entrer comme valeur à --signature le nombre de pages du document arrondi au multiple de 4 supérieur.
Autres options:
--short-edge : retournements sur bord court.
--no-landscape : pour portrait.
Limitation : seulement 2 pages par recto. ne peut imposer 4 A6 sur le recto d'un A4.
--edit:
pdfbook consiste uniquement à exécuter pdfjam avec l'option '--booklet true' ! Mais celle-ci n'a pas l'air d'accepter --nup et donc l'imposition de plus de 2 pages par face.
Pour conclure la commande complète sous pdfjam pour imposer en cahier de N pages :
pdfjam --signature N --booklet true --landscape input.pdf -o output.pdf
sachant que latex fonctionne sous tous les OS c'est un outil interressant.
Resterait à fouiller pour l'imposition en plus de 2 pages par face...
J'ai l'impression que pdfjam --signature --booklet true --nup pourrait faire l'imposition en cahier de 16 pages sur une feuilles mais je n'y arrive pas.
Un bonus :
Dans Thunar il peut être utile pour certains d'ajouter pdfjam dans les actions personnalisées.
Exemple pour transformer un pdf en livret:
pdfbook %f --suffix livret --outfile %d
3. L'"Offset
Il s'agit de déplacer les pages latéralement (On parle aussi de gouttière). Ce processus est spécialement utilisé pour compenser le fait que les feuillets extérieurs sont plus larges que les feuillets intérieurs. Il faut donc augmenter la marge intérieurs des premières et dernières pages afin qu'elles conservent les bonnes marges extérieures.
Je n'y suis pas encore mais ai fait le tout premier pas. Le script qui suit permet de décaler une page donnée d'un pdf.
Exemple :
~/pgm/offset ~/test.pdf '3' '5cm 0cm'
décale la page 3 de test.pdf de 5cm vers la droite et de 0cm vers le haut (on peut utiliser des valeurs négatives). Notez bien l'usage des quotes ( ' ).
Le script, pas bien compliqué :
#/bin/bash
pdf=$1
page=$2
offset=$3
let "pageav = $page - 1"
let "pageap = $page + 1"
pageavant=`echo "1-$pageav"`
pageapres=`echo "$pageap-"`
# Offset de la page qui nous intéresse.
pdfjam $pdf $page --offset "$offset" --outfile ~/tmp-xyz.pdf
# Assemblage avec les autres.
pdfjam $pdf $pageavant ~/tmp-xyz.pdf '1' $pdf $pageapres --outfile offset.pdf
echo -e "*************\nLa page $2 du document $1 a été déplacée de $3.\n*************"
rm ~/tmp-xyz.pdf
Il manque deux choses pour réaliser l'offset : que le script puissent prendre un nombre indéfini de pages avec des décalages variables, puis avec un décalage automatique.