Bonjour à tous
Le but c'est de partager ce script que j'ai découvert et qui peu etre utile à pas mal de monde .
Reduire au amximum un fichier pdf en un seul clique c à d passé de quelque Mo à quelque Ko ca aide non? surtout quand on veut l'attaché à un message.
IL suffit de l'enregistrer avec gedit le rendre éxecutable et c'est parti .
#!/bin/bash
cheminConfig=$HOME/.pdfmm.conf
if [ ! -e "$cheminConfig" ]; then
echo "dossier=" > "$cheminConfig"
fi
if [ -z $(which zenity) ] || [ -z $(which gs) ]; then
echo "zenity et ghostscript doivent être installés."
exit 1
fi
if [ ! -z "$1" ]; then
pdfAreduire="$1"
else
dossier=$(cat "$cheminConfig" | grep "^dossier=" | cut -f2- -d"=")
if [ -z "$dossier" ]; then
dossier=$HOME
fi
pdfAreduire=$(zenity --file-selection --filename="$dossier/" --title="Sélectionnez un fichier PDF dont la taille doit être réduite")
if [ $? -ne 0 ]; then
zenity --error --text="Aucun fichier PDF sélectionné."
exit 1
fi
fi
if [ ! -f "$pdfAreduire" ]; then
zenity --error --text="Le fichier précisé n'existe pas ou n'est pas utilisable:\n$pdfAreduire"
exit 1
fi
# Mise à jour de la configuration.
dossier=$(dirname "$pdfAreduire")
sed -i "s|^\(dossier=\).*$|\1$dossier|" "$cheminConfig"
ext="${pdfAreduire##*.}" # Si elle existe, l'extension est récupérée pour conserver sa casse («pdf» ou «PDF»).
if [ "$ext" != "$pdfAreduire" ]; then
pdfReduit=$(echo "$pdfAreduire" | sed "s/\.$ext$/--.$ext/")
else
pdfReduit="$pdfAreduire--"
fi
if [ -f "$pdfReduit" ]; then
zenity --question --text="Le fichier optimisé suivant existe déjà:\n$pdfReduit\n\nVoulez-vous vraiment écraser ce fichier?"
if [ $? -eq 1 ]; then
zenity --info --text="Arrêt du script."
exit 0
fi
fi
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="$pdfReduit" "$pdfAreduire" | zenity --notification --listen --window-icon="info" --text="Réduction de la taille du fichier suivant en cours: $pdfAreduire"
if [ ${PIPESTATUS[0]} -ne 0 ]; then
zenity --error --text="Erreur lors de la réduction de la taille du fichier suivant:\n$pdfAreduire"
if [ -f "$pdfReduit" ]; then
rm "$pdfReduit"
fi
exit 1
fi
tailleDepart=$(stat --format=%s "$pdfAreduire")
tailleDepartFormatee=$(ls -hl "$pdfAreduire" | cut -d ' ' -f 5)
tailleSortie=$(stat --format=%s "$pdfReduit")
tailleSortieFormatee=$(ls -hl "$pdfReduit" | cut -d ' ' -f 5)
pourcentageOptimisation=$(echo "(($tailleDepart - $tailleSortie) / $tailleDepart) * 100" | bc -l | cut -d '.' -f 1)
if [ -z $pourcentageOptimisation ] || [ $pourcentageOptimisation == "-" ]; then
pourcentageOptimisation=0
fi
zenity --info --text="Réduction de la taille du fichier suivant terminée:\n$pdfAreduire\n\nLe nouveau fichier optimisé est:\n$pdfReduit\n\nStatistiques:\n- taille de départ: $tailleDepartFormatee\n- taille de sortie: $tailleSortieFormatee\n- pourcentage d'optimisation: $pourcentageOptimisation%"
exit 0
J'en profite aussi s'il ya une ame charitable pour montrer comment on fait( quel ligne chagé) pour selectionner plusieurs fichier( par exemple en appuyant sur Ctrl en meme temps) dans zenity au lieu d'un seul fichier à chaque fois .
Quand on a 1000 fichiers pdf à reduire c'est pas la joie.
Merci de votre aide
edit modo : titre