16e3e287d9a9a24be3e9b6023ef53fcaf486c142
[progfou.git] / outils / gpdftk
1 #!/bin/bash
2 # gpdftk — interface graphique pour pdftk (manipulation de PDF)
3 # Copyright ©2009-2010  Agence universitaire de la Francophonie
4 #                       http://www.auf.org/
5 # Licence : GNU General Public License, version 3
6 # Auteur : Đoàn Mạnh Hà <doan.manh.ha@auf.org>
7 # Création : 2009-06-02
8 # Mise à jour : 2010-01-13
9 PDFVIEWER="acroread"
10 FILEBROWSER="nautilus"
11
12 TEMPFILE=`tempfile`
13 trap "rm -f \"$TEMPFILE\"" 0 1 2 3 15
14
15 ###########################################################################
16 # jointure de fichiers PDF
17 ###########################################################################
18
19 operation_joindre() {
20   zenity --file-selection --multiple > "$TEMPFILE"
21   if [ $? != 0 ]; then return 1; fi
22   OUT=`zenity --file-selection --filename="output.pdf" --save`
23   if [ $? != 0 ]; then return 1; fi
24   eval "pdftk `sed 's/^/"/;s/|/" "/g;s/$/"/' "$TEMPFILE"` cat output \"$OUT\""
25   $PDFVIEWER "$OUT" &
26   return 0
27 }
28
29 ###########################################################################
30 # extraction de toutes les pages d'un fichier PDF
31 ###########################################################################
32
33 operation_extraire_toutes() {
34   echo "Vous avez choisi 'extraire toutes les pages'."
35   OUT=`zenity --file-selection`
36   if [ $? != 0 ]; then return 1; fi
37   DIR="$OUT".tmp
38   mkdir "$DIR"
39   cd "$DIR"
40   eval "pdftk \"$OUT\" burst"
41   if [ $? != 0 ]; then
42     zenity --info --text="Erreur pendant l'extraction. Un problème dans les plages spécifiées peut-être ?"
43     return 1
44   fi
45   zenity --info --text="L'extraction est terminée.
46 Elle a été effectuée dans le répertoire temporaire suivant :
47   $DIR
48
49 Merci d'effacer ce répertoire temporaire à la fermeture du navigateur de fichiers."
50   $FILEBROWSER .
51   return 0
52 }
53
54 ###########################################################################
55 # extraction de plages de pages d'un fichier PDF
56 ###########################################################################
57
58 operation_extraire_plage() {
59   echo "Extraire une ou plusieurs plages de pages d'un fichier PDF'."
60   if [ $? != 0 ]; then return 1; fi
61   OUT=`zenity --file-selection ` 
62   if [ $? != 0 ]; then return 1; fi
63   PLAGE=`zenity --entry --text="Pour extraire de la page 1 à 6, vous saissiez comme suit : A1-6 "`
64   if [ $? != 0 ]; then return 1; fi
65   DIR="$OUT".tmp
66   mkdir "$DIR"
67   cd "$DIR"
68   eval "pdftk A=\"$OUT\" cat \"$PLAGE\" output mon_pdf_extrait.pdf"  
69   if [ $? != 0 ]; then
70      zenity --info --text="Erreur pendant l'extraction. Un problème dans les plages spécifiées peut-être ?"
71      return 1
72   fi
73   zenity --info --text="L'extraction est terminée.
74 Elle a été effectuée dans le répertoire temporaire suivant :
75   $DIR
76
77 Merci d'effacer ce répertoire temporaire à la fermeture du navigateur de fichiers."
78   $FILEBROWSER .
79   return 0
80 }
81
82 ###########################################################################
83 # rotation de fichiers PDF
84 ###########################################################################
85
86 operation_rotation() {
87   echo "Vous avez choisi 'rotation'."
88   if [ $? != 0 ]; then return 1; fi
89   OUT=`zenity --file-selection ` 
90   if [ $? != 0 ]; then return 1; fi
91   DEGRE=`zenity --entry --text="Pour une rotation 90°, 180°, 270°vous saissiez comme suit : 1-endE ou 1-endS ou 1-endW"`
92   if [ $? != 0 ]; then return 1; fi
93   DIR="$OUT".tmp
94   mkdir "$DIR"
95   cd "$DIR"
96   eval "pdftk A=\"$OUT\" cat \"$DEGRE\" output mon_pdf_rotation.pdf"  
97   if [ $? != 0 ]; then
98      zenity --info --text="Erreur pendant la rotation. Un problème dans la saisie peut-être ?"
99      return 1
100   fi
101   zenity --info --text="La rotation est terminée.
102 Elle a été effectuée dans le répertoire temporaire suivant :
103   $DIR
104
105 Merci d'effacer ce répertoire temporaire à la fermeture du navigateur de fichiers."
106   $PDFVIEWER mon_pdf_rotation.pdf
107   return 0
108 }
109
110 ###########################################################################
111 # boucle de gestion du menu principal
112 ###########################################################################
113
114 while true; do
115
116   zenity --width 430 --height 230 --list --title "Traitement des PDF" \
117     --text "Choisissez l'opération souhaitée :" \
118     --column "" --column "Opération" --radiolist \
119       - "Joindre plusieurs fichiers PDF ensemble" \
120       - "Extraire toutes les pages d'un fichier PDF" \
121       - "Extraire une ou plusieurs plages de pages d'un fichier PDF" \
122       - "Effectuer une rotation sur un fichier PDF" \
123       > "$TEMPFILE"
124   if [ $? = 1 ]; then exit 0; fi
125
126   case "`cat "$TEMPFILE"`" in
127     "Joindre"*)          if operation_joindre; then exit 0; fi ;;
128     "Extraire toutes"*)  if operation_extraire_toutes; then exit 0; fi ;;
129     *"plage"*)           if operation_extraire_plage; then exit 0; fi ;;
130     *"rotation"*)        if operation_rotation; then exit 0; fi ;;
131     "")            zenity --info --text "Vous devez choisir une opération." ;;
132     *)                   echo "Erreur : cas non géré." ; exit 1 ;;
133   esac
134
135 done
136
137 ###########################################################################
138 # fin du programme
139 ###########################################################################
140
141 exit 0