#!/bin/bash # gpdftk — interface graphique pour pdftk (manipulation de PDF) # Copyright ©2009-2010 Agence universitaire de la Francophonie # http://www.auf.org/ # Licence : GNU General Public License, version 3 # Auteurs : Đoàn Mạnh Hà # Progfou # Création : 2009-06-02 # Mise à jour : 2010-03-12 PDFVIEWER="evince" FILEBROWSER="nautilus" TEMPFILE=`tempfile` trap "rm -f \"$TEMPFILE\"" 0 1 2 3 15 ########################################################################### # jointure de fichiers PDF ########################################################################### operation_joindre() { zenity --file-selection --multiple > "$TEMPFILE" if [ $? != 0 ]; then return 1; fi OUT=`zenity --file-selection --filename="output.pdf" --save` if [ $? != 0 ]; then return 1; fi eval "pdftk `sed 's/^/"/;s/|/" "/g;s/$/"/' "$TEMPFILE"` cat output \"$OUT\"" $PDFVIEWER "$OUT" & return 0 } ########################################################################### # extraction de toutes les pages d'un fichier PDF ########################################################################### operation_extraire_toutes() { echo "Vous avez choisi 'extraire toutes les pages'." IN=`zenity --file-selection` if [ $? != 0 ]; then return 1; fi DIR="$IN".tmp mkdir "$DIR" cd "$DIR" eval "pdftk \"$IN\" burst" if [ $? != 0 ]; then zenity --info --text="Erreur pendant l'extraction. Un problème dans les plages spécifiées peut-être ?" return 1 fi zenity --info --text="L'extraction est terminée. Elle a été effectuée dans le répertoire temporaire suivant : $DIR Merci d'effacer ce répertoire temporaire à la fermeture du navigateur de fichiers." $FILEBROWSER . return 0 } ########################################################################### # extraction de plages de pages d'un fichier PDF ########################################################################### operation_selectionner_plage() { echo "Vous avez choisi 'sélectionner une ou plusieurs plages de pages'." IN=`zenity --file-selection` if [ $? != 0 ]; then return 1; fi PLAGE=`zenity --entry --text="Pour sélectionner de la page 2 à 6, saisissez comme suit : 2-6"` if [ $? != 0 ]; then return 1; fi OUT="${IN%.pdf}-selection.pdf" eval "pdftk \"$IN\" cat \"$PLAGE\" output \"$OUT\"" if [ $? != 0 ]; then zenity --info --text="Erreur pendant la sélection. Un problème dans les plages spécifiées peut-être ?" return 1 fi zenity --info --text="La sélection est terminée. Elle a été sauvegardée avec le nom de fichier suivant : $OUT" $PDFVIEWER "$OUT" & return 0 } ########################################################################### # rotation de fichiers PDF ########################################################################### operation_rotation() { echo "Vous avez choisi 'effectuer une rotation'." IN=`zenity --file-selection` if [ $? != 0 ]; then return 1; fi ROTATION=`zenity --entry --text="Pour une rotation de 90°, 180° ou 270°, saisissez comme suit : 1-endE ou 1-endS ou 1-endW"` if [ $? != 0 ]; then return 1; fi OUT="${IN%.pdf}-rotation.pdf" eval "pdftk \"$IN\" cat \"$ROTATION\" output \"$OUT\"" if [ $? != 0 ]; then zenity --info --text="Erreur pendant la rotation. Un problème dans la saisie peut-être ?" return 1 fi zenity --info --text="La rotation est terminée. Elle a été sauvegardée avec le nom de fichier suivant : $OUT" $PDFVIEWER "$OUT" & return 0 } ########################################################################### # boucle de gestion du menu principal ########################################################################### while true; do zenity --width 430 --height 230 --list --title "Traitement des PDF" \ --text "Choisissez l'opération souhaitée :" \ --column "" --column "Opération" --radiolist \ - "Joindre plusieurs fichiers PDF ensemble" \ - "Extraire toutes les pages d'un fichier PDF" \ - "Sélectionner une ou plusieurs plages de pages d'un fichier PDF" \ - "Effectuer une rotation sur un fichier PDF" \ > "$TEMPFILE" if [ $? = 1 ]; then exit 0; fi case "`cat "$TEMPFILE"`" in "Joindre"*) if operation_joindre; then exit 0; fi ;; "Extraire toutes"*) if operation_extraire_toutes; then exit 0; fi ;; *"plage"*) if operation_selectionner_plage; then exit 0; fi ;; *"rotation"*) if operation_rotation; then exit 0; fi ;; "") zenity --info --text "Vous devez choisir une opération." ;; *) echo "Erreur : cas non géré." ; exit 1 ;; esac done ########################################################################### # fin du programme ########################################################################### exit 0