#1 Le 12/09/2008, à 20:56
- celfred
[script bash] Imprimer 2 pages en 1
Bonjour,
Voici mon premier script qui me permet de faire la chose suivante : lorsque j'ai un fichier pdf d'une page A4, je l'imprime en double directement (deux pages B5, sur 1 seule page A4)... Bon, rien d'extraordinaire en soi, mais je n'ai pas trouvé d'autres méthodes que le script car les options prévues fonctionnent trsè bien si on a plusieurs pages sur un document pdf, mais quand il n'y en a qu'une, il n'y a qu'un seul B5 lors de l'impression, et 1 moitié de page vide... Si on met 2 exemplaires, on a 2 pages à moitié vide...
Mon souci, c'est que c'est mon tout premier script... donc je le livre comme ça, avec l'envie de l'améliorer et surtout de ne pas prendre de mauvaises habitudes. Si vous pouvez jeter un oeil et me conseiller, ce serait sympathique. J'ai fais ça en essayant d'être logique, mais je trouve ma logique bien complexe pour une tâche finalement plutôt simple... 3 fichiers temporaires pour fonctionner, ça me semble bien lourd... Bref, qu'en pensez vous ?
#!/bin/bash
file=$1
if [ -e $file ]; then
echo "Traitement du fichier"
# Copier le fichier
cp $file temp01.pdf;
cp temp01.pdf temp02.pdf;
# Concaténer les 2 fichiers
pdftk temp01.pdf temp02.pdf cat output temp03.pdf
# Mettre les 2 pages sur 1 seule
pdfnup temp03.pdf --outfile final.pdf
# Imprimer
lpr final.pdf
# Effacer les fichiers créés
rm temp03.pdf
rm temp02.pdf
rm temp02.pdf
rm temp.pdf
else
echo "Le fichier n'existe pas."
fi
exit 0;
Je lance mon script ainsi : ./print2in1.sh mon_fichier.pdf et j'obtiens ce que je souhaite sur l'imprimante.
Je me demande si on peut tester le nombre de pages du fichier pour empêcher l'exécution si le fichier est plus gros ?
Merci à ceux qui me donneront un petit coup de pouce
Celfred
Hors ligne
#2 Le 13/09/2008, à 17:04
- best_friend_fr
Re : [script bash] Imprimer 2 pages en 1
Salut
pdftk fichier.pdf dump_data | grep NumberOfPages | cut -f 2 -d ' '
te donne le nombre de page du pdf
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#3 Le 14/09/2008, à 10:07
- celfred
Re : [script bash] Imprimer 2 pages en 1
Merci. Je vais étudier ça
A première vue, ma logique ne semble pas choquer grand monde... ça paraît donc plutôt normal de passer par des fichiers temporaires ?
Celfred
Hors ligne
#4 Le 14/09/2008, à 12:14
- best_friend_fr
Re : [script bash] Imprimer 2 pages en 1
non, ca ne choque pas, sauf que
1) tu ne dois pas avoir a faire tous ces fichiers, en particulier, le fichier de depart.
2) tu devrais mettre tes fichiers temporaires dans le repertoire /tmp
3) tu peux diminuer le nombre de fichiers intermediaires en pipant la sortie standard sur l'entree standard...
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#5 Le 14/09/2008, à 14:15
- celfred
Re : [script bash] Imprimer 2 pages en 1
Merci pour les conseils.
Je viens de modifier, et j'en suis là :
#!/bin/bash
file=$1
# Test si le fichier existe
if [ -e $file ]; then
{
# Copie du fichier pour éviter les problèmes de syntaxe dans le nom (accents, espaces...)
# Dans le dossier /tmp
cp $file /tmp/temp01.pdf
tempfile01=/tmp/temp01.pdf
#Test du nombre de pages du fichier
echo 'Vérification du fichier'
nb_page=`pdftk $tempfile01 dump_data | grep NumberOfPages | cut -f 2 -d ' '`
if [ "$nb_page" = "1" ];
then
{
echo "Fichier OK - Traitement du fichier"
# 2ème copie du fichier afin de répéter la page
cp $tempfile01 /tmp/temp02.pdf
tempfile02=/tmp/temp02.pdf
# Concaténer les 2 copies du fichier dans un 3ème fichier
pdftk $tempfile01 $tempfile02 cat output /tmp/temp03.pdf
tempfile03=/tmp/temp03.pdf
# Mettre les 2 pages sur 1 seule et enregistrer dans un fichier final.pdf
pdfnup $tempfile03 --outfile /tmp/final.pdf
tempfinal=/tmp/final.pdf
# Imprimer
lpr $tempfinal
echo "Patientez pendant l'impression du fichier"
# Effacer les fichiers créés
rm $tempfile03
rm $tempfile02
rm $tempfinal
}
else
{
echo "Le fichier fait plus qu'1 page ! L'impression est annulée !"
}
fi
# Effacement de la copie initiale
rm $tempfile01
}
else
{
echo "Le fichier n'existe pas."
}
fi
exit 0;
La copie initiale est là uniquement car j'ai des problèmes avec pdftk dès qu'il y a un accent dans le nom de fichier ou dans le chemin. Je me suis donc dit qu'en copiant et en renommant, j'enlève ce problème.
Pour ce qui est de 'piper la sortie sur l'entrée', j'ai essayé, mais j'obtiens des erreurs dans tous les sens... Je n'arrive donc pas à réduire
Même ça ne marche pas :
pdfnup $tempfile03 | lpr
Pourquoi ?
Merci encore ! J'ai quand même mis le test des pages et l'utilisation de /tmp)
Celfred
Hors ligne
#6 Le 02/11/2008, à 21:10
- frydo
Re : [script bash] Imprimer 2 pages en 1
Je sais que ce fil commence à être vieux, mais moi j'ai fait ça récemment pour résoudre mes problèmes d'impression de pdf vers pdf avec la nouvelle version 8.10 d'ubuntu :
output=`basename "$1" | sed 's/\.pdf$/_2pp.pdf/'`
pdftk $1 $1 cat output $output
pdftops $output - | psnup -2 | ps2pdf14 - | pdftk - cat -E output $output
Personnellement je ne fais pas le test pour savoir si il n'y a qu'une page ou pas.
Et je pense à ne pas mettre d'accent ou d'espace dans les noms des fichiers que je donne à manger au script.
Le fichier obtenu est plus léger que celui obtenu avec pdfnup (qui en plus nécessite pdflatex).
Dernière modification par frydo (Le 02/11/2008, à 21:42)
Né dans un monde horrible, frydo a toujours été épris de liberté, et il la prône maintenant afin que les connaissances et les outils permettant d'y accéder deviennent tous libres
Hors ligne