Bonjour,
Version final :
Je m'essaye , actuellement, à la programmation bash afin de réaliser des scripts pour me faciliter la vie.
J'aurais aimé avoir des critiques sur mon code pour que je puisse m'améliorer. Par la même occasion, en cas de perte de mon script : une petite recherche google et je retomberais sur ce post.
Peut-être que quelqu'un pourra être intéressé par ce script.
Mon besoin initial est d'optimisé la taille des pdf générés par mon scanner ; ils sont, par défaut, trop volumineux pour être envoyé par mail.
Donc voici le code :
Merci
Version final :
Vous devez être connecté pour voir les liens.
Je m'essaye , actuellement, à la programmation bash afin de réaliser des scripts pour me faciliter la vie.
J'aurais aimé avoir des critiques sur mon code pour que je puisse m'améliorer. Par la même occasion, en cas de perte de mon script : une petite recherche google et je retomberais sur ce post.
Peut-être que quelqu'un pourra être intéressé par ce script.
Mon besoin initial est d'optimisé la taille des pdf générés par mon scanner ; ils sont, par défaut, trop volumineux pour être envoyé par mail.
Donc voici le code :
C:
#!/bin/bash
DPI=150
OUTPUT=""
INPUT=""
OVERWRITE=0
ULTRA=0
ULTRA_THRESHOLD="55%"
MANQUE_IMAGEMAGICK=69
MANQUE_GHOSTSCRIPT=68
MANQUE_POPPLER=67
ERR_INPUT=66
ERR_OUTPUT=65
FILE_EXIST=64
USAGE=63
PDFTOPS_BIN="/usr/bin/pdftops"
PS2PDF_BIN="/usr/bin/ps2pdf14"
CONVERT_BIN="/usr/bin/convert"
PDF_INFO="/usr/bin/pdfinfo"
TIFF2PDF_BIN="/usr/bin/tiff2pdf" #libtiff est une dépendance de ghostscript
TIFFCP="/usr/bin/tiffcp" #libtiff est une dépendance de ghostscript
help() {
echo "Utilisation : $(basename $0) [options] <PDF-file(input)> [<PDF-file(output)]"
echo "-h : aide ci présente"
echo "-d : résolution du pdf final en point par pouce, par defaut : 150ppp"
echo "-U : mode Ultra /!\\ perte conséquente d'information + conversion en N&B : vérifier le résultat"
echo "-o : écraser la cible si elle existe"
exit $USAGE
}
if [ ! -x "$PDFTOPS_BIN" ]; then # existence de pdftops
echo "pdfopts inexistant, il fait partit du paquet poppler"
exit $MANQUE_POPPLER
fi
if [ ! -x "$PS2PDF_BIN" ]; then # existence de ps2pdf14
echo "ps2pdf inexistant, il fait partit du paquet ghostscript"
exit $MANQUE_GHOSTSCRIPT
fi
echo
while getopts ":hd:oU" Option
do
case $Option in
h ) help;;
d )
if [ "$OPTARG" -eq "$OPTARG" ] 2>/dev/null; then
DPI=$OPTARG
else
echo "Veuillez donner une valeur numerique a votre DPI"
echo
exit
fi;;
o ) OVERWRITE=1;;
U )
echo "Mode Ultra /!\\ perte conséquente d'information + conversion en N&B: vérifier le résultat"
ULTRA=1;;
* ) echo "Option non implémentée."
echo
help;; # DEFAULT
esac
done
shift $(($OPTIND - 1)) # On décrémente le nombre d'arguments du nombre d'options
if [ ! -n "$1" ] # $1 => fichier source
then
echo "Merci d'indiquer un fichier source"
echo
help
else
INPUT=$1
if [ ! -r "$INPUT" ] # $1 peut-on lire le fichier source ?
then
echo "Fichier \"$(basename "$INPUT")\" introuvable ou permissions insuffisantes"
exit $ERR_INPUT
fi
if [ ! -n "$2" ] # $2 => Si pas de fichier résultat => génération d'un nom de fichier
then
echo "$INPUT"
OUTPUT="$(dirname "$INPUT")/out_$(basename "$INPUT")"
else
OUTPUT="$2"
fi
fi
if [ $OVERWRITE == 0 ] && [ -e "$OUTPUT" ] # Si option overwrite non précisé et fichier existant => Exit
then
echo "Le fichier \"$OUTPUT\" existe déjà, utiliser l'option -o pour écraser"
exit $FILE_EXIST
else
if [ ! -w "$(dirname "$OUTPUT")" ]
then
echo "Impossible d'écrire le fichier \"$OUTPUT\""
exit $ERR_OUTPUT
fi
fi
echo "Récapitulatif :"
echo "DPI = $DPI"
echo "Input = $INPUT"
echo "Output = $OUTPUT"
echo "-------------------"
if [ $ULTRA == 1 ]
then # Mode Ultra
if [ ! -x "$CONVERT_BIN" ]; then # existence de pdftops
echo "Le mode Ultra nécessite le paquet imagemagick"
echo
exit $MANQUE_IMAGEMAGICK
fi
TIFF_MULTI=`mktemp`
TIFF="`mktemp`.tif"
pages=$($PDF_INFO "$INPUT" | grep Pages: | sed -E 's/(.*) (\d*)/\2/g')
for i in `seq 1 $pages`; # conversion en tiff de chaque page du pdf source
do
echo "Page $i sur $pages"
eval "$CONVERT_BIN -define pdf:use-trimbox=true -type Grayscale -blur 0 -density 600 -quality 95 -threshold $ULTRA_THRESHOLD \"$INPUT\"\[$(($i - 1 ))\] $TIFF"
eval "$TIFFCP -a $TIFF $TIFF_MULTI" # ajout de la page en cours dans un tiff multipage temporaire.
done
eval "$TIFF2PDF_BIN -p a4 -F -j -q 75 -t "$(basename \"${INPUT}\")" $TIFF_MULTI -o \"$OUTPUT\"" #libtiff est une dépendance de ghostscript
rm "$TIFF"
rm "$TIFF_MULTI"
else # Optimisation Normal
FICHIER_TEMP_PS=`mktemp`
CONFIG_IN=`mktemp`
# Création fichier de configuration pour la conversion en PDF
echo "-dUseFlateCompression=true \
-sPAPERSIZE=a4
-dOptimize=true \
-dProcessColorModel=/DeviceRGB \
-dUseCIEColor=true\
-r$DPI \
-dDownsampleGrayImages=true \
-dGrayImageResolution=$DPI \
-dAutoFilterGrayImages=false \
-dGrayImageDownsampleType=/Bicubic \
-dDownsampleMonoImages=true \
-dMonoImageResolution=$DPI \
-dMonoImageDownsampleType=/Bicubic \
-dDownsampleColorImages=true \
-dColorImageResolution=$DPI \
-dAutoFilterColorImages=false \
-dColorImageDownsampleType=/Bicubic \
-dPDFSETTINGS=/prepress \
-sDEVICE=pdfwrite \
$FICHIER_TEMP_PS" > $CONFIG_IN
echo "Étape 1 : Conversion en PostScript"
eval "$PDFTOPS_BIN -paper match -nocrop -noshrink -nocenter -level3 -q \"$INPUT\" $FICHIER_TEMP_PS"
echo "Étape 2 : Re-conversion en PDF"
eval "$PS2PDF_BIN @$CONFIG_IN \"$OUTPUT\""
rm $FICHIER_TEMP_PS
rm $CONFIG_IN
fi
exit 0
Merci