Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/09/2008, à 21: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 wink


Celfred

Hors ligne

#2 Le 13/09/2008, à 18: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, à 11:07

celfred

Re : [script bash] Imprimer 2 pages en 1

Merci. Je vais étudier ça wink

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, à 13: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, à 15: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 sad
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, à 22: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, à 22: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