Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 31/05/2012, à 10:12

xheryx

[Script/bash] Reduction d'un fichier pdf par script

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

Dernière modification par nesthib (Le 31/05/2012, à 14:53)

Hors ligne

#2 Le 31/05/2012, à 10:28

kookie68

Re : [Script/bash] Reduction d'un fichier pdf par script

Bonjour
En matière de réduction de fichiers pdf, il y a ça aussi. Je l'utilise régulièrement et il est diablement efficace
Lien vers le site de pdfmm

Hors ligne

#3 Le 31/05/2012, à 14:09

xheryx

Re : [Script/bash] Reduction d'un fichier pdf par script

kookie68 a écrit :

Bonjour
En matière de réduction de fichiers pdf, il y a ça aussi. Je l'utilise régulièrement et il est diablement efficace
Lien vers le site de pdfmm

Merci pour le partage mais à mon avis c'est diablement la meme chose ,celui que j'ai mis à été écrit par la meme personne.Mr Jean Phillipe FLEURY

Dernière modification par xheryx (Le 31/05/2012, à 20:29)

Hors ligne

#4 Le 31/05/2012, à 14:55

nesthib

Re : [Script/bash] Reduction d'un fichier pdf par script

@xheryx : merci de ne pas poster de demandes d'aide dans ce sous-forum. Tu peux laisser ta demande mais ne l'indique pas dans le titre. J'ai modifié le titre et rajouté un tag. Si le script n'est pas de toi merci aussi d'inclure un lien vers sa source.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 31/05/2012, à 20:37

xheryx

Re : [Script/bash] Reduction d'un fichier pdf par script

nesthib a écrit :

@xheryx : merci de ne pas poster de demandes d'aide dans ce sous-forum. Tu peux laisser ta demande mais ne l'indique pas dans le titre. J'ai modifié le titre et rajouté un tag. Si le script n'est pas de toi merci aussi d'inclure un lien vers sa source.

Désolé mais je suis nouveau et je connais pas encore toute les ficelles, pour le lien c'est fait.
J'ai comme l'impression que tu t'y connais en bash, tu peux peut être m'aider pour mon soucis citer plus haut?
Salutation

Hors ligne

#6 Le 01/06/2012, à 04:00

nesthib

Re : [Script/bash] Reduction d'un fichier pdf par script

Tu peux faire une boucle qui lit soit la liste des fichiers à traiter depuis un fichier (1) soit qui prend le retour d'une commande qui cherche les fichiers à traiter (2).
Exemple (1) :

while read file
do
    echo 'on traite le fichier' "${file}"
done <fichier_contenant_la_liste_des_fichier_à_traiter

Exemple (2) :

while read file
do
    echo 'on traite le fichier' "${file}"
done < <(find /un/dossier -iname '*.pdf')

En remplaçant bien entendu « echo » par l'opération que tu veux effectuer sur tes fichiers.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 01/01/2013, à 19:49

lemirandais

Re : [Script/bash] Reduction d'un fichier pdf par script

C'est moi qui ne marche pas.

Hors ligne

Haut de page ↑