# AppleScript/Automator combiner plusieurs PDF dont le nom...



## MilesTEG (4 Septembre 2019)

Bonjour,
Je vous expose ce que je fais actuellement avec un logiciel de pdf :
je combine plusieurs pdf dont le nom de fichier contient ELEVES par ordre alphabétique, et j'ajoute une page blanche aux pdf de nombre de page impaire sauf le dernier, pour créer un seul fichier PDF contenant tout un chapitre de cours pour mes élèves.
Mais je dois ajouter les fichiers que je sélectionne manuellement dans le finder...
C'est un peu long, mais ça se fait.

J'aimerais savoir s'il est possible d'automatiser tout cela à l'aide d'un script et peut-être d'automator.
Il me faudrait avec un clic droit sur un dossier que le script récupère les fichiers pdf contenant ELEVES dans leur nom, les classe par ordre alphabétique, puis les fusionne en ajoutant une page blanche après chaque pdf de nombre de page impaire, sauf le dernier.

Un exemple de structure d'un de mes dossiers de cours :







Est-ce que c'est envisageable ?
PS : je ne connais pas vraiment le langage applescript...

Merci pour votre aide
++ Miles


----------



## zeltron54 (7 Septembre 2019)

Bonjour,

A priori, on devrait pouvoir faire un script qui réalise ça !

Dis moi si cela t' intéresse ...
Dès que j'ai un peu de temps, j' essai de te faire un petit truc ....


----------



## MilesTEG (7 Septembre 2019)

Bonjour 
Oui ça m’intéresse beaucoup [emoji16]
Avec ton aide j’arriverai peut être a comprendre le AppleScript [emoji12]
En tout cas merci pour ton aide [emoji1317]


----------



## zeltron54 (8 Septembre 2019)

Bonjour,
Soit patient, car pas trop de temps en ce moment, et après quelques tests pas aussi simple que je croyais...
Mais je suis dessus...


----------



## zeltron54 (8 Septembre 2019)

Je te mets un premier jet pour tests .
C'est très long, mais c'est normal , l'ajout de pages ne se fait que entre 2 fichiers, il faut donc enregistrer à chaque fois, renommer le fichier et mettre des temporisations pour que tout cela fonctionne bien....
le script fait:
- demande du dossier contenant les pdf.
- crée un dossier compilation sur le bureau + un dossier la_selection et un fichier pageblanche.pdf dans ce dossier
- duplique les fichiers pdf contenant eleve dans le dossier la_selection
- prend chaque fichier de la sélection pour traitement.
- à la fin il te met un message comme quoi c'est terminé. Tu trouveras sur le bureau le dossier compilation qui contient le dossier la_selection (pour pouvoir contrôler les fichiers traités) et un fichier La_compilation.pdf

Pour utiliser ce code, il suffit de le coller dans une fenêtre de l' éditeur de script et de cliquer sur exécuter.
Il peut y avoir un message  d'erreur indiquant valeur (null), c'est un problème de tempo, tu annules et tu recommences.
J' attend ton retour
Je te met le code dans le post suivant..


----------



## zeltron54 (8 Septembre 2019)

```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
   
    make new folder at ((path to desktop folder) as string) with properties {name:"compilation"}
    make new folder at ((path to desktop folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to desktop folder) & "compilation:") as string
    set chemin_selection to ((path to desktop folder) & "compilation:la_selection:") as string
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
   
    set lelog to open for access (chemin_compilation & "pageblanche" & ".txt") as Unicode text with write permission
    write " " & return & return to lelog starting at eof
    close access lelog
    set afile to (chemin_compilation & "pageblanche" & ".txt")
    set filename to "pageblanche"
    set filepath to (container of (afile as alias)) as alias
    set filepath to quoted form of POSIX path of filepath
    set afile to quoted form of POSIX path of afile as string
   
    do shell script "cupsfilter " & afile & " > " & filepath & filename & ".pdf"
    do shell script "rm " & filepath & filename & ".txt"
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
       
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
            delay 2
        else
           
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
           
            set fich to ((path to desktop folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
           
            set NP to do shell script "mdls -name kMDItemNumberOfPages " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
               
                set leblanc to ((path to desktop folder) & "compilation:pageblanche.pdf") as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to desktop folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
           
            set le2 to ((path to desktop folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to desktop folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
           
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
            delay 2
        end if
       
    end repeat
    do shell script "rm " & leblanc
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (8 Septembre 2019)

Coucou,
Après plusieurs test sur différents ordis, le message erreur concernant la valeur (null) apparaît sur les ordis suivant leur rapidité...

Pour résoudre le problème il faut modifier la valeur du délai d'attente à 2 endroits dans le script, les 2 lignes   "  delay 2 " qui signifie attendre 2 secondes.
Il faut alors passer ce délai à 3 secondes " delay 3 ".
Cela se passe sur la 32 ieme et 62 ieme ligne de code...

Ce qui augmente le temps de traitement d'une seconde par fichier traité....

Avec un délai de 3 secondes le temps de traitement moyen est de 45 secondes pour 5 fichiers PDF et 1minute 35 pour 10 fichiers....


----------



## zeltron54 (8 Septembre 2019)

Finalement il vaut mieux un délai de 3 secondes.
Je te remets le script modifié.

```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
   
    make new folder at ((path to desktop folder) as string) with properties {name:"compilation"}
    make new folder at ((path to desktop folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to desktop folder) & "compilation:") as string
    set chemin_selection to ((path to desktop folder) & "compilation:la_selection:") as string
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
   
    set lelog to open for access (chemin_compilation & "pageblanche" & ".txt") as Unicode text with write permission
    write " " & return & return to lelog starting at eof
    close access lelog
    set afile to (chemin_compilation & "pageblanche" & ".txt")
    set filename to "pageblanche"
    set filepath to (container of (afile as alias)) as alias
    set filepath to quoted form of POSIX path of filepath
    set afile to quoted form of POSIX path of afile as string
   
    do shell script "cupsfilter " & afile & " > " & filepath & filename & ".pdf"
    do shell script "rm " & filepath & filename & ".txt"
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
       
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
           
        else
           
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
           
            set fich to ((path to desktop folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
           
            delay 3
            set NP to do shell script "mdls -name kMDItemNumberOfPages " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
               
                set leblanc to ((path to desktop folder) & "compilation:pageblanche.pdf") as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to desktop folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
           
            set le2 to ((path to desktop folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to desktop folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
           
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
           
        end if
       
    end repeat
    do shell script "rm " & leblanc
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## MilesTEG (9 Septembre 2019)

Bonjour 
Super merci 
Je teste ça dans la matinée


----------



## MilesTEG (9 Septembre 2019)

Rebonjour,
J'ai testé, et ça fonctionne, bien qu'il y ait des erreurs (voir log ci-dessous) et que ça prenne du temps.
Petite question à propos de la page blanche : dans le PDF généré, elle n'est pas au format A4. Y-a-t-il moyen de l'avoir dans ce format ? (sinon j'ai un fichier pdf qui ne contient qu'une page blanche, peut-etre puis-je me servir de celui là ?)
Autre demande, c'est quoi la référence du dossier Home ? Car je souhaiterais plutôt que le dossier temporaire y soit créé plutôt que sur mon bureau.

Le log du script : https://pastebin.com/C7Z9Br7U
Il y a donc bien des erreurs 0, mais il y a aussi des erreurs "--> *error* number -10004"

Je ne sais pas trop ce que c'est...

Je regarderais plus longuement un peu plus tard le script pour essayer de changer les dossiers.

en tout cas merci bien


----------



## zeltron54 (9 Septembre 2019)

Bonjour,

Pour la page blanche, je l' a crée à partir d"un fichier texte créé dans textEdit, mais on peut très bien se servir de ton fichier. Il faut juste savoir ou il est stocké pour renseigner le chemin d'accès exact. On peut également te demander de le situer au démarrage (comme la demande du dossier). Dis moi ce que tu préfère je ferais les modifs .

Le dossier Home est ton dossier perso (la petite maison avec ton nom d'utilisateur)

j' avais choisi le bureau pour une question de facilité et pouvoir contrôler à la fin , dans le dossier la_selection, la liste des fichiers compilés.

Quand aux erreurs dans le log, la 10004 est provoquée  presque à chaque fois que j' envoi une commande au terminal, je suppose que c'est une histoire  de tempo (accès avant la fin de l'enregistrement du fichier). Mais l'action se réalise quand même...

C'est très long...    oui le nombre d'enregistrements et d'effacements plus la commande compilation qui est très longue ....   mais j'ai testé c'est quand même moins long que de le faire à la main


----------



## zeltron54 (9 Septembre 2019)

Après réflexion il vaut mieux faire la demande du fichier pageblanche, afin que le script puisse fonctionner sur n'importe quel ordi (pas de chemin en dur)
je te mets le script modifié pour ça

```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    set chemin_pageblanche to choose file with prompt "Sélectionnez le fichier pageblanche"
    make new folder at ((path to desktop folder) as string) with properties {name:"compilation"}
    make new folder at ((path to desktop folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to desktop folder) & "compilation:") as string
    set chemin_selection to ((path to desktop folder) & "compilation:la_selection:") as string
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
       
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
           
        else
           
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
           
            set fich to ((path to desktop folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
           
            delay 3
            set NP to do shell script "mdls -name kMDItemNumberOfPages " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
               
                set leblanc to chemin_pageblanche as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to desktop folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
           
            set le2 to ((path to desktop folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to desktop folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
           
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
           
        end if
       
    end repeat
    do shell script "rm " & leblanc
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## MilesTEG (9 Septembre 2019)

zeltron54 a dit:


> Bonjour,
> 
> Pour la page blanche, je l' a crée à partir d"un fichier texte créé dans textEdit, mais on peut très bien se servir de ton fichier. Il faut juste savoir ou il est stocké pour renseigner le chemin d'accès exact. On peut également te demander de le situer au démarrage (comme la demande du dossier). Dis moi ce que tu préfère je ferais les modifs .
> 
> ...



Je pourrais mettre la page blanche dans le dossier Home directement 
Pour ton dernier message, je ne fais la fusion que sur mon MBA, donc c'est pas grave si le fichier page vierge est mis en dur, il sera toujours au même endroit.

En fait quand je demandais la référence du dossier home, c'était pour savoir quoi mettre dans le script.
Dans ton script, tu as mis ceci :

```
make new folder at ((path to desktop folder) as string) with properties {name:"compilation"}
```
path to desktop folder
deviendrait "path to home folder" ?

Ok pour les erreurs, c'est inévitable, mais pas bloquant.

Actuellement je passe par un logiciel dans lequel je glisse/dépose les PDF voulu, puis j'ajoute le(s) pdf vierge au bon endroit et je fusionne. C'est pas très rapide non plus 

Mais je pensais qu'un script irait plus vite ^^
Y aussi mon antivirus qui de base bloque les commandes rm sur les dossiers protégés... 

Pour le fichier pdf vierge, si le script demande aussi où il est c'est du temps de perdu à chaque fusion...
Mon objectif était de gagner du temps par rapport à prendre les fichiers manuellement et les mettre dans le logiciel (PDF Elements).
Bon j'apprends le langage Apple Script avec toi


----------



## zeltron54 (9 Septembre 2019)

Quel est le problème de mettre le dossier compilation sur le bureau ??

On peut bien sur le créer dans le home, la commande que tu donnes est bonne.
Mais ne pas oublier qu'il faut le supprimer avant chaque fusion, je trouvais plus pratique sur le bureau que dans un dossier (home) à ouvrir à chaque fois.
On peut aussi le supprimer à la fin en ne gardant que le fichier la_compilation (mais cela empêche le contrôle des fichiers traités)
A toi de voir...

Edit: j'ai oublié, dans le dernier script, à la fin il supprime le fichier pageblanche, pour éviter cela, supprimer la ligne :    do shell script "rm " & leblanc    qui se trouve presque à la fin


----------



## MilesTEG (9 Septembre 2019)

zeltron54 a dit:


> Quel est le problème de mettre le dossier compilation sur le bureau ??
> 
> On peut bien sur le créer dans le home, la commande que tu donnes est bonne.
> Mais ne pas oublier qu'il faut le supprimer avant chaque fusion, je trouvais plus pratique sur le bureau que dans un dossier (home) à ouvrir à chaque fois.
> ...


Mon antivirus bloque les commandes rm sur les dossiers protégés, dont fait parti le bureau. C'est pour ça que je voulais placer le dossier de compilation dans le Home qui n'est pas verrouillé.

Comment met-on un chemin d'accès dans une variable ?
Je voudrais mettre :
~/PDF-Page-Blanche.pdf
(donc dans le dossier home)


----------



## zeltron54 (9 Septembre 2019)

Une variable se renseigne avec :

Set Nom_de_la_variable to Le_chemin
Mais cette variable doit être au bon format en fonction de son utilisation:
en string si elle est utilisée pour ajouter du texte (pour la compléter) et ce dans le format mac c'est à dire avec  ":" comme séparateur exemple pour le dossier home :        Macintosh hd:Users:nom_utilisateur:
Dans le format unix si elle doit être utilisée avec des commandes terminal (do shell script) c'est à dire avec des " / " comme séparateur. la commande:    set nom_variable to quoted form of POSIX path of nom_variable     transforme la variable du format mac au format unix.

Mais dis moi exactement ton besoin je modifierai le script et si tu veux à la fin , j' ajouterai un commentaire expliquant ce que fait chaque ligne.


----------



## zeltron54 (9 Septembre 2019)

j' ai modifié le script
Le fichier avec une page blanche doit se trouver dans le dossier HOME et porter le nom exact :   PageBlanche.pdf
Et la totalité du processus se passe dans le dossier HOME.
A la fin tu as donc dans le dossier home un dossier compilation qui contient le dossier la_selection et le fichier La_compilation. Si tu veux modifier ça dis moi ce que tu veux obtenir.

```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
  
  
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
      
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
  
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
      
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
          
        else
          
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
          
            set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
          
            delay 3
            set NP to do shell script "mdls -name kMDItemNumberOfPages " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
              
                set leblanc to chemin_pageblanche as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
              
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
          
            set le2 to ((path to home folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
          
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
          
        end if
      
    end repeat
  
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## MilesTEG (9 Septembre 2019)

Nickel, ça fonctionne très bien (mon MBA est lent...)

Comment faire pour qu'à la fin, le fichier final soit nommé en fonction des fichiers qu'il a trouvé ?
En gros je fusionne les fichiers élèves d'un même chapitre, qui ont toujours la même nomenclature : 0X - Act.n°Y ExpOUpas - ELEVES - Titre de l'activité.pdf
avec 0X = 01, ou 02 ou 03 ... le n° du chapitre.
J'aimerais avoir un fichier pdf final nommé ainsi : 0X - Activités ELEVES Chapitre complet.pdf
(en temps normal je met manuellement ce genre de nom : 02 - Activités ELEVES - 1 à 5 + Bilan + EXO.pdf mais il n'y a pas tout le temps de fiche EXO, et le nombre d'activités n'est pas tout le temps de 5 )

Autre chose, faudrait qu'à la fin le dossier la_selection soit supprimé.
Et idéalement, faudrait déplacer le fichier final dans le dossier d'origine des autres pdf.

Sinon, jusqu'à la ligne 17, je n'ai pas de soucis pour comprendre le code.
Mais après, 

```
set la_selection to chemin_selection as alias
```
ça fait quoi le alias ? Pourquoi mettre le chemin de la sélection en alias ?

un peu plus loin (ligne 39 à 41), j'ai un peu de mal à comprendre là aussi ce que font les lignes, même si j'ai une petite idée...

```
set NP to do shell script "mdls -name kMDItemNumberOfPages " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
```
Est-ce que c'est ce qui récupère le nombre de page ? 
NP mod 2, c'est NP divisé par 2 ?

Sinon plus globalement, le script fusionne uniquement deux fichiers à la fois, c'est ça ?
Ca fusionne le 1er, et si un nb de page paire, avec le suivant. S'il a un nb de page impaire, il fusionne ce fichier avec PageBlanche.pdf.
Puis après, le script fusionne le premier pdf combiné avec le suivant ou une page blanche, etc...
C'est bien ça ?

Est-ce possible de faire une liste de fichier à fusionner en une seule fois ?
Par exemple avec un tableau contenant les chemin d'accès des fichiers à fusionner dans l'ordre : {cheminFichier1;cheminFichier2;cheminFichier3}
Je ne sais pas si c'est possible avec la commande de la ligne 49 ou 61 :

```
do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
```


Ça n'a pas l'air si simple que ça ce langage AppleScript...  

En tout cas merci beaucoup du temps passé à m'aider


----------



## zeltron54 (9 Septembre 2019)

pour "set la_selection to chemin_selection as alias"
La variable " chemin_selection " est au format string, le format alias indique qu'il faut prendre cette variable comme chemin au format mac. donc après la ligne la variable " la_selection" contient le chemin vers le dossier.

pour les 3 lignes NP ....."
La commande terminal "mdls " recupère toute les infos du fichier. l'info dont le nom est " kMDItemNumberOfPages" contient le nombre de pages, mais elle est récupérée sous la forme (pour 3 pages) : "kMDItemNumberOfPages = 3" , donc la 2ième ligne récupère le 3 ième mot du retour, et la 3ième ligne récupère le reste de la division (mod) par 2 et teste si c'est différent de 0.

Le script ne fusionne bien que 2 fichiers à la foi, donc je teste si la compil est nombre impair (voir ci-dessus) si oui il fusionne la compil avec une page blanche (commande entre if ... end if), puis ensuite fusionne la compil avec le nouveau fichier que j'ai appelé "suite.pdf"

Malheureusement on ne peut fusionner que 2 fichiers à la foi et enregistrer le résultat sous un nouveau nom. ce qui oblige à fusionner -- supprimer les 2 fichiers ayant fusionner -- renommer le résultat pour la prochaine fusion...

voila pour les explications.

Pour, à la fin, effacer le dossier la_selection aucun problème.
Pour renommer et déplacer le résultat pas de problème, mais il me faudrait la structure des noms (j'ai pas tout compris) avec 2,3 noms comme exemple et ce que tu voudrai obtenir.
Si j'en crois ta copie d'écran du 1er post: 

08 - act.n°1 - ELEVES - nom du cours.pdf
08 - act.n° exp - ELEVES - nom du cours.pdf
08 - fiche EXO - ELEVES - nom du cours.pdf

Au vue de ces 3 noms tu nommerais le fichier résultat ???


----------



## MilesTEG (9 Septembre 2019)

En gros, mes fichiers de cours pour les élèves sont nommés comme ceci, par exemple pour le chapitre 8 :
08 - Act.n°1 - ELEVES - Titre de l'activité.pdf
08 - Act.n°2 Exp - ELEVES - Titre de l'activité.pdf
08 - Act.n°3 - ELEVES - Titre de l'activité.pdf
08 - Act.n°4 - ELEVES - Titre de l'activité.pdf
08 - Fiche EXO - ELEVES.pdf

Je fusionne les activités et nomme le fichier de fusion :
08 - ACTIVITÉS - ELEVES - Activités 1 à 4 + EXO.pdf

Comme on ne peut peut-être pas savoir combien d'activités ont été fusionnées, je proposais de nommer le fichier de fusion :
08 - ACTIVITÉS - ELEVES - Chapitre Complet.pdf


----------



## zeltron54 (9 Septembre 2019)

Donc il suffit de récupérer le numéro de chapitre (08 dans l'exemple) qui est présent et le même sur tous les fichiers fusionnés et d'ajouter " - ACTIVITÉS - ELEVES - Chapitre Complet.pdf"  qui sera une valeur constante à toutes les fusions.
C'est bien ça ?
je me met au boulot...


----------



## MilesTEG (9 Septembre 2019)

Oui c'est ça 
Merci bien en tout cas


----------



## zeltron54 (9 Septembre 2019)

Bon voilà: 
Bon test et tien moi au courant.

```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
   
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
       
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
           
        else
           
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
           
            set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
           
            delay 3
            set NP to do shell script "mdls -name kMDItemNumberOfPages " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
               
                set leblanc to chemin_pageblanche as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
           
            set le2 to ((path to home folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
           
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
           
        end if
       
    end repeat
    set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
    set Chapitre to word 1 of nom
    duplicate fich to chemin
    set chemin to chemin as string
    set chemin to chemin & "la_compilation.pdf" as alias
    set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
    set efface to ((path to home folder) & "compilation:") as string
    set efface to quoted form of POSIX path of efface
    do shell script "rm -Rf " & efface
   
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## MilesTEG (10 Septembre 2019)

Super, ça fonctionne très bien 
Et il n'y a plus d'erreurs ni même de message lorsque le script s'exécute 
(enfin sur la seule exécution de matin).

Reste à voir si on peut optimiser la vitesse d'exécution 
(sans changer le mac )
En tout cas, vraiment merci beaucoup


----------



## zeltron54 (10 Septembre 2019)

Bonjour,
pour gagner un peu de temps j'ai modifié le script, mais il faut d'abord avoir installer le logiciel exiftool à télécharger là :https://sourceforge.net/projects/exiftool/
 à tester ....(chez moi 1mn 10sec pour 10 fichiers dont 7 avec ajout de page blanche)
le nouveau script:

```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
 
 
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
     
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
 
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
     
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
         
        else
         
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
         
            set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
         
            set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
             
                set leblanc to chemin_pageblanche as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
             
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
         
            set le2 to ((path to home folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
         
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
         
        end if
     
    end repeat
    set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
    set Chapitre to word 1 of nom
    duplicate fich to chemin
    set chemin to chemin as string
    set chemin to chemin & "la_compilation.pdf" as alias
    set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
    set efface to ((path to home folder) & "compilation:") as string
    set efface to quoted form of POSIX path of efface
    do shell script "rm -Rf " & efface
 
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## MilesTEG (10 Septembre 2019)

Un petit 
	
	



```
brew install exiftool
```
 dans iTerm et hop c'est installé.

Le script semble plus rapide, mais là je n'ai pas chronométré. Y a pas moyen de voir le temps au départ puis à la fin de l'exécution du script ? (écrit dans la console de l'applescript ?)

Sinon petite demande, ça pourrait être cool que le script remplace le fichier final fusionné s'il existe déjà, et du coup ne le prenne pas en compte dans la liste à fusionner s'il est déjà présent  Je risque d'oublier de supprimer une vieille version lol


----------



## zeltron54 (10 Septembre 2019)

Il faudrait alors le supprimer au début du script, sinon il serait ajouté à la fusion, et le remplacer à la fin nous donnerais un fichier contenant l'ancienne fusion.
je regarde pour le supprimer au départ ...


----------



## zeltron54 (10 Septembre 2019)

OK, voilà le nouveau qui supprime le fichier de fusion s' il existe.


```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
            duplicate chaque_fichier to chemin_selection
        end if
    end repeat
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
        if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
            set cheminorigine to chemin as string
            set cheminorigine to cheminorigine & nom
            set cheminorigine to quoted form of POSIX path of cheminorigine
            do shell script "rm " & cheminorigine
            set efface to le_fichier as string
            set efface to quoted form of POSIX path of efface
            do shell script "rm  " & efface
        else
           
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
               
            else
               
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
               
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
               
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                   
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                   
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
               
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
               
            end if
        end if
       
    end repeat
    set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
    set Chapitre to word 1 of nom
    duplicate fich to chemin
    set chemin to chemin as string
    set chemin to chemin & "la_compilation.pdf" as alias
    set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
    set efface to ((path to home folder) & "compilation:") as string
    set efface to quoted form of POSIX path of efface
    do shell script "rm -Rf " & efface
   
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (10 Septembre 2019)

Oups !!! je m'étais compliqué la vie. j'ai refais une version plus logique.

```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à traiter"
    make new folder at ((path to home folder) as string) with properties {name:"compilation"}
    make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
    set chemin_compilation to ((path to home folder) & "compilation:") as string
    set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
    set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
   
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier as string
       
        if nom contains "eleve" and nom contains ".pdf" then
           
            if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                set cheminorigine to chaque_fichier as string
                set cheminorigine to quoted form of POSIX path of cheminorigine
                do shell script "rm " & cheminorigine
            else
                duplicate chaque_fichier to chemin_selection
            end if
        end if
    end repeat
   
    set la_selection to chemin_selection as alias
    set les_fichiers to files of la_selection
    repeat with le_fichier in les_fichiers
        set nom to name of le_fichier
       
        if not (exists chemin_compilation & "la_compilation.pdf") then
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "la_compilation.pdf"
           
        else
           
            duplicate le_fichier to chemin_compilation
            set anciennom to chemin_compilation & nom as alias
            set name of anciennom to "suite.pdf"
           
            set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
            set fich to quoted form of POSIX path of fich
           
            set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
            set NP to word 3 of NP
            if NP mod 2 is not 0 then
               
                set leblanc to chemin_pageblanche as string
                set leblanc to quoted form of POSIX path of leblanc
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & leblanc
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
            end if
           
            set le2 to ((path to home folder) & "compilation:suite.pdf") as string
            set le2 to quoted form of POSIX path of le2
            set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
            set nouveau1 to quoted form of POSIX path of nouveau
            set lenew to fich & " " & le2
           
            do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
            do shell script "rm " & fich
            do shell script "rm " & le2
            set nouveau to nouveau as alias
            set name of nouveau to "la_compilation.pdf"
           
        end if
       
    end repeat
    set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
    set Chapitre to word 1 of nom
    duplicate fich to chemin
    set chemin to chemin as string
    set chemin to chemin & "la_compilation.pdf" as alias
    set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
    set efface to ((path to home folder) & "compilation:") as string
    set efface to quoted form of POSIX path of efface
    do shell script "rm -Rf " & efface
   
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## MilesTEG (10 Septembre 2019)

Nickel  Merci bien 

Est-ce possible d'avoir ce script accessible via un clic droit dans le Finder ?
En gros, je clic droit sur le dossier voulu, et paf, il fait son boulot  ? (sans me demander le chemin d'accès ?)


----------



## zeltron54 (10 Septembre 2019)

Je ne sais pas faire pour que le script soit accessible depuis un clic droit.
Mais je t'ai préparé une version "droplet" ....
Tu enregistres cette version en temps qu'application (enregistrer sous--> et en bas de la fenêtre choisis application)
Tu obtiens une appli avec une icône ayant une flèche dessus...
Tu glisses cette appli dans le dock.
Pour faire le job, tu glisses simplement ton dossier sur cet icône.
Suivant la version de ton système lors du premier lancement il va te demander d 'autoriser cette appli à contrôler le finder , tu acceptes...
Et c'est bon...


----------



## zeltron54 (10 Septembre 2019)

```
on open chemin
    set chemin to chemin as alias
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
       
        set les_fichiers to files of chemin
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
           
            if nom contains "eleve" and nom contains ".pdf" then
               
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                    set cheminorigine to chaque_fichier as string
                    set cheminorigine to quoted form of POSIX path of cheminorigine
                    do shell script "rm " & cheminorigine
                else
                    duplicate chaque_fichier to chemin_selection
                end if
            end if
        end repeat
       
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
           
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
               
            else
               
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
               
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
               
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                   
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                   
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
               
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
               
            end if
           
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        duplicate fich to chemin
        set chemin to chemin as string
        set chemin to chemin & "la_compilation.pdf" as alias
        set name of chemin to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf")
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
       
    end tell
   
    tell application "Finder"
        (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
    end tell
   
end open
```


----------



## MilesTEG (11 Septembre 2019)

Hello,
Ça fonctionne très bien 

Je voudrais savoir s'il était possible de nommer le fichier final avant son déplacement ?
En gros qu'il ait son nom final dans le dossier de compilation.

Puis, au lieu de le supprimer dans la destination, faire un déplacement du fichier avec écrasement de l'existant ?
C'est possible ça ?
Je demande ça car mon antivirus bloque les commande rm dans certains dossiers dont font parti mes dossiers de cours. Il me demande l'autorisation de laisser la commande rm se faire avec mon mot de passe. Du coup ça rallonge un peu la durée.
peut-être qu'une commande de déplacement avec écrasement ?

En tout cas, je te remercie beaucoup 

PS : demande juste cosmétique : est-il possible d'avoir une barre de progression de l'avancement de la fusion d'une manière ou d'une autre ?


----------



## zeltron54 (11 Septembre 2019)

Bonjour,
Pour la barre de progression... malheureusement , non

Pour l'histoire de ton antivirus, Il me semble que un écrasement du fichier produira la même alerte que sa suppression ... à vérifier chez toi !
J'ai trouvé une solution pour mettre l'appli dans service du clic droit. On pourra faire ça lorsque le script sera terminé...


----------



## MilesTEG (11 Septembre 2019)

zeltron54 a dit:


> Bonjour,
> Pour la barre de progression... malheureusement , non
> 
> Pour l'histoire de ton antivirus, Il me semble que un écrasement du fichier produira la même alerte que sa suppression ... à vérifier chez toi !
> J'ai trouvé une solution pour mettre l'appli dans service du clic droit. On pourra faire ça lorsque le script sera terminé...


Je me doutais de la réponse pour la barre de progression 
Pas grave.

Sinon pour le déplacement avec écrasement, on peut le faire via une commande de finder ? (avec ça : *tell* _application_ "Finder" )
Si c'est possible, y a peut-être moyen que mon Bitdefender ne râle pas


----------



## zeltron54 (11 Septembre 2019)

la commande que tu donne signifie juste (dans l'application finder) elle ne fait que signifier que les commandes suivantes seront à effectuer avec finder.

Je crois juste que ton antivirus n'acceptera pas plus l'écrasement d'un fichier que sa suppression. De toute manière le système enverra une alerte de fichier existe, et comme elle viens du système je ne pense pas que l'on puisse l'éviter... à voir
Peut être essayer s'il accepte que l'on renomme le fichier ?


----------



## zeltron54 (11 Septembre 2019)

Je te joins un nouveau script à enregistrer en application - droplet
ce script renomme le fichier final puis le déplace avec écrasement (voir si antivirus le supporte)

```
on open chemin
    set chemin to chemin as alias
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
      
        set les_fichiers to files of chemin
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
          
            if nom contains "eleve" and nom contains ".pdf" then
              
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                  
                else
                    duplicate chaque_fichier to chemin_selection
                end if
            end if
        end repeat
      
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
          
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
              
            else
              
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
              
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
              
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                  
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                  
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
              
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
              
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
              
            end if
          
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        set renom to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf") as string
        set fich to fich as alias
        set name of fich to renom
        set fich to ((path to home folder) & "compilation:" & renom) as string
        set fich to fich as alias
        move fich to chemin with replacing
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
      
    end tell
  
    tell application "Finder"
        (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
    end tell
  
end open
```


----------



## MilesTEG (11 Septembre 2019)

Yeah ! Ça fonctionne super bien 
Sans que Bitdefender me fasse une alerte 
Trop bien 

Merci
Je vais regarder si je peux pas mettre une notification disant combien de fichiers sont à fusionner, et qu'elle indique à quel fichier on en est quand on le fusionne. Ça remplacerait la barre de progression qui n'est pas possible...

en tout cas, merci beaucoup ^^


----------



## zeltron54 (11 Septembre 2019)

Bonjour,

Content que cela fonctionne...
Si tu es toujours interessé pour avoir le lancement apr un clic droit sur le dossier.
J'ai trouvé comment mettre l'application dans un service accessible par clic droit sur le dossier.

Tu ouvres un nouveau automator.
Tu choisis "action rapide"
tu sélectionnes dossier et dans finder (voir copie écran).
tu ajoutes une action exécuter un script Applescript
Tu colles dans cette action le script que je te joins
Tu enregistres sous le nom qui te convient

Tu trouvera le script dans services lors d'un clic droit sur le dossier.
Pendant l'exécution du script une petite roue dentée tourne dans la barre supérieur coté gauche.


----------



## zeltron54 (11 Septembre 2019)

le script pour service...

```
on run {input, parameters}
   
   
    set chemin to input as alias
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
       
        set les_fichiers to files of chemin
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
           
            if nom contains "eleve" and nom contains ".pdf" then
               
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                   
                else
                    duplicate chaque_fichier to chemin_selection
                end if
            end if
        end repeat
       
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
           
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
               
            else
               
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
               
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
               
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                   
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                   
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
               
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
               
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
               
            end if
           
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        set renom to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf") as string
        set fich to fich as alias
        set name of fich to renom
        set fich to ((path to home folder) & "compilation:" & renom) as string
        set fich to fich as alias
        move fich to chemin with replacing
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
       
    end tell
  
    tell application "Finder"
        (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
    end tell
  
   
    return input
end run
```


----------



## zeltron54 (11 Septembre 2019)

Si tu tiens absolument à avoir un suivi de l'avancement de la tache, on peut ouvrir une fenêtre texte (dans textedit) qui te donne le numéro du fichier en traitement sur un total de ...
Je trouve pas très jolie, mais cela peut fonctionner.
Dis moi si ça t' intéresses et dans quel fichier je dois l'intégrer (sur le droplet ou sur le service )? 

J' attends ton choix...


----------



## MilesTEG (11 Septembre 2019)

Cool, ça fonctionne super bien depuis le menu actions rapides 
Très pratique.

Sinon, j'ai remplacé 

```
tell application "Finder"
        (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
    end tell
```

par 

```
display notification "Fin de la fusion des PDF élèves du chapitre sélectionné." with title "Fusion PDF Cours Élèves"
```

Je préfère la notification plutôt que la boite de dialogue où il faut cliquer ^^

Du coup, il y a moyen de récupérer le nombre de fichier à fusionner ?
Pour afficher une notification avant la fusion d'un fichier qui dit par exemple : Fusion du fichier n°1 / 5.

Le fichier textedit c'est effectivement pas terrible  je préfère éviter ^^


Ha tiens, en faisant une petite recherche google j'ai vu ça :
https://developer.apple.com/library....html#//apple_ref/doc/uid/TP40016239-CH37-SW1
Y a moyen d'intégrer ça ? (j'ai pas tout compris encore )


----------



## zeltron54 (11 Septembre 2019)

Bonsoir,
le lien que tu donnes ajoute un petit camembert le le nombre de traitement sur le nombre total dans la petite barre en bas de la fenêtre de l'éditeur de script, donc aucun intérêt pour ton cas...

L'ajout d'une notification à chaque traitement de fichier peut être une solution, mais la notification s'inscrit dans le volet mais ne s'affiche pas à l'extérieur du volet. Pour suivre l 'avancement il faut déployer le volet et là on voit les notifications s'inscrire.
je te met le fichier à coller dans automator, pour créer un service.


----------



## zeltron54 (11 Septembre 2019)

Le fichier pour service

```
on run {input, parameters}
  
    set chemin to input as alias
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
      
        set les_fichiers to files of chemin
        set total to 0
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
          
            if nom contains "eleve" and nom contains ".pdf" then
              
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                  
                else
                    duplicate chaque_fichier to chemin_selection
                    set total to total + 1
                end if
            end if
        end repeat
      
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        set letotal to total as string
        set compteur to 0
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
            set compteur to compteur + 1
            set letotal to total as string
            set lecompteur to compteur as string
            display notification "fusion PDF fichier " & lecompteur & "/" & letotal with title "Fusion PDF Cours Élèves"
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
              
            else
              
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
              
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
              
                set NP to do shell script "/usr/local/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                  
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                  
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
              
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
              
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
              
            end if
          
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        set renom to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf") as string
        set fich to fich as alias
        set name of fich to renom
        set fich to ((path to home folder) & "compilation:" & renom) as string
        set fich to fich as alias
        move fich to chemin with replacing
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
      
    end tell
  
    display notification "Fin de la fusion des PDF élèves du chapitre sélectionné." with title "Fusion PDF Cours Élèves"
    return input
end run
```


----------



## MilesTEG (11 Septembre 2019)

Pour la notification, elle apparait sur le bureau puis disparait toute seul  





Je teste le nouveau script ^^


----------



## MilesTEG (11 Septembre 2019)

Tout semble bien fonctionner 
Merci bien


----------



## zeltron54 (11 Septembre 2019)

content pour toi.
bonne soirée.


----------



## MilesTEG (11 Septembre 2019)

Bonne soirée à toi également


----------



## zeltron54 (12 Septembre 2019)

Bonjour,

A force de chercher , j'ai fini par trouver un truc pour avoir une barre de progression.
Il faut mettre l'application "SKProgressBar" sur ta machine (ou tu veux) et j'ai modifier le script pour qu'il utilise cette application.
Je t'envoie un fichier . zip qui contient:
- l'application SKProgressBar
- le script sous la forme d'un fichier service du nom de "fusion pdf barre" à copier coller dans le dossier users --> Ton_nom --> bibliothèque --> service
le lien :   http://dl.free.fr/mVmUW1MHs

Bon test, j'attends ton retour.


----------



## MilesTEG (12 Septembre 2019)

Je teste ça quand je suis rentré chez moi.
Merci encore


----------



## zeltron54 (12 Septembre 2019)

Le positionnement de la barre sur l'écran est défini dans le script en pixel en partant du bas à gauche.
pour moi je l'ai positionnée au milieu de mon écran la ligne est:
set position to {1000, 750}
Tu pourras changer cela en fonction de ton écran et de l'endroit ou tu veux la voir apparaître.

Dans le script j' incrémente l'avancement juste avant de traiter le fichier, donc la barre arrive au bout juste avant la dernière fusion...


----------



## MilesTEG (13 Septembre 2019)

Hello,
J'ai pu tester la version avec progressbar.
Ça fonctionne bien  mais j'ai l'impression que c'est plus lent que la version avec notifications.
Je pense rester sur la version notifications du coup ^^

Merci bien en tout cas


----------



## zeltron54 (13 Septembre 2019)

Ok pas de problème, celà m'a permis de découvrir ce petit programme ....

Si problème ou modification à apporter n'hésite pas...

Bonne soirée !


----------



## MilesTEG (16 Septembre 2019)

Hello,
Je viens de rencontrer un petit soucis, pas grand chose hein  les pdf sont bien fusionnés 
Mais là j'ai eu un chapitre avec 10 activités : Act.n°0, Act.n°1 , Act.n°2 ... Act.n°9, Act.n°10.
Et bien j'ai pas vérifier le travail du script, mais là j'ai la n°10 qui est venue s'intercaler entre la n°1 et la n°2 
Bref, c'est pas terrible... et j'ai vu cela une fois que j'avais 10 exemplaires sortis à la photocopieuse 
Bon c'est pas grave pour cette impression, mais est-ce qu'il y aurait pas moyen de faire en sorte que le script passe l'activité n°10 après la n°9 ?
(je ne devrais pas avoir plus que 10 ou 11 activités...)
Mais faut pas forcément placer la n°10 à la fin, car à la fin j'ai un pdf de Bilan et après j'ai une fiche d'exercices 

Si c'est pas possible, je verrais pour fusionner autrement quand j'aurais plus de 9 activités, genre à la main comme avant 

Merci d'avance,
Miles


----------



## zeltron54 (16 Septembre 2019)

C'est normal le tri se fait par ordre alphabétique donc pour le avoir dans l'ordre il faut nommer  les activités en :     01, 02, 03 .....10,11 ... avec 2 caractères tu seras bon jusqu'à 99.

Si cela n'est pas très fréquent tu  peux renommer à la main , ou alors il faut essayer d'intégrer un renommage dans le script...


----------



## MilesTEG (16 Septembre 2019)

Pourtant le finder les affiche bien dans le bon ordre 
Bon comme tu le dis, ce n'est pas très fréquent, je vais nommer avec 01, 02, 03 etc... comme pas plus de soucis 
(va falloir que je prenne l'habitude de le faire sur mes prochains chapitres  ou plutôt sur ceux qui dépassent 9 activités )

Merci


----------



## zeltron54 (16 Septembre 2019)

Dans le script il faudrait donc faire une recherche de la chaine    act.n°    et la remplacer par      act.n°0

Je peux regarder ça , si ça t'intéresse ?


----------



## MilesTEG (16 Septembre 2019)

Non c'est bon, ne t'embête pas, je nommerai les fichiers avec des 0 ce sera plus simple ^^


----------



## zeltron54 (16 Septembre 2019)

OK! bonne journée...


----------



## MilesTEG (16 Septembre 2019)

13 fichiers en fusion, c'est pas rapide, mais je comprends pourquoi en regardant la taille : 22 Mo 
Purée, c'est pour ça que le photocopieur a mis un temps pas négligeable a me sortir le 1er exemplaire du poly


----------



## Thisse (31 Janvier 2020)

Bonjour, 

Je me permets d'envoyer un message car quand je lance le programme jai une boîte qui s'ouvre ou il est écrit "erreur dans Pages : document\nom du document.pages\ ne comprend pas le message export number -1708 from document "nom du document"".

N'y connaissant rien en script j'aurais besoin d'aide afin de pouvoir rentrer le script.

Merci d'avance


----------



## zeltron54 (31 Janvier 2020)

Bonjour, Thisse

Pourrais-tu préciser exactement comment tu procèdes, et à quel moment tu as ce message.
Tu choisis bien les dossiers ?

Précise ta version d'os et surtout ta version de Pages


----------



## Thisse (3 Février 2020)

Bonjour zeltron54

Tout d'abord j'ai copier coller le lien dans l'éditeur de script, je sélectionne le dossier ou se situe les document à convertir, puis je choisis le dossier ou il doivent aller mais après il m'affiche cette erreur...

Pour la version  de mac c'est 10.11.6 (15G22010)
Pour la version de page c'est 5.5.3(2152)


----------



## zeltron54 (3 Février 2020)

Je ne connais pas la version pages 5.5.3 ,   Peux tu vérifier si  Dans un document ouvert , dans le menu Fichier tu as accès au menu Exporter vers ... PDF et si ce menu fonctionne sur ta version ?


----------



## zeltron54 (3 Février 2020)

Je viens de vérifier sur un Imac sous 10.11.6, la version de pages est la 5.6.2 (Que je viens de télécharger sur AppStore) tout fonctionne sans problème....


----------



## MilesTEG (4 Décembre 2022)

@zeltron54 
Bonjour
J'espère que tu passes toujours sur le forum 

J'ai très récemment acheté un MacBook Air M2, sur lequel j'ai remis plein de chose du vieux MBA 2013 bloqué en macos Big Sur 11.7.1.
Ce nouveau MBA M2 peut lui avoir MacOS Ventura 13.0.1.
Mais du coup, les scripts de fusion de PDF fait avec toi ne fonctionnent plus...
Première chose, le chemin pour exiftools a changé, c'est la première erreur, corrigée facilement ça :





J'ai donc modifié en conséquence le script avec le nouveau chemin d'accès : 

```
set NP to do shell script "/opt/homebrew/bin/exiftool -pagecount " & fich
```

Mais ensuite, j'ai une nouvelle erreur :

```
L’action « Exécuter un script AppleScript » a rencontré une erreur : « Erreur dans Finder : sh: /System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py: No such file or directory »
```

Ce que je sais c'est que le script, join.py n'est plus un script python, mais un exécutable.




Et là je ne sais pas trop comment corriger cette erreur...
Bon et bien en fait il suffit juste de remplacer le chemin d'accès et d'enlever le .py, et ça fonctionne :

```
do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/MacOS/join' --output " & nouveau1 & space & lenew
```


Du coup, et bien voilà, il faut une version spécifique à MacOS Ventura.
Je ne sais pas si c'était aussi le cas avec MacOS Monterey vu que je n'ai jamais pu l'utiliser sur le vieux MBA...


Je reposte le script complet ci-dessous au besoin 

```
on run {input, parameters}
    
    
    set chemin to input as alias
    
    display notification "Préparation des dossiers temporaires..." with title "Fusion PDF Cours Élèves"
    
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
        
        set les_fichiers to files of chemin
        
        display notification "Duplication des fichiers à fusionner..." with title "Fusion PDF Cours Élèves"
        
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
            
            if nom contains "- ELEVES" and nom contains ".pdf" then
                
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                    
                else
                    duplicate chaque_fichier to chemin_selection
                end if
            end if
        end repeat
        
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
            
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
                
            else
                
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
                
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
                
                set NP to do shell script "/opt/homebrew/bin/exiftool -pagecount " & fich
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                    
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                    
                    do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/MacOS/join' --output " & nouveau1 & space & lenew
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
                
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
                
                do shell script "'/System/Library/Automator/Combine PDF Pages.action/Contents/MacOS/join' --output " & nouveau1 & space & lenew
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
                
            end if
            
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        set renom to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf") as string
        set fich to fich as alias
        set name of fich to renom
        set fich to ((path to home folder) & "compilation:" & renom) as string
        set fich to fich as alias
        move fich to chemin with replacing
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
        
    end tell
    
    display notification "Fin de la fusion des PDF élèves du chapitre sélectionné." with title "Fusion PDF Cours Élèves"
    
    return input
end run
```


----------



## MilesTEG (4 Décembre 2022)

@zeltron54 Je suis en train de me dire qu'il serait top dans ce script d'inclure quelque chose de ce genre (algorithme car je ne connais pas le langage AppleScript) :

```
definir variable OS=version_de_l_OS
Si OS = 11.7.x alors :
    definir variable exiftool_PATH="/usr/local/bin/exiftool"
    définir variable pdf_join_PATH="/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py"
sinon, si OS >= 12.0 alors :
    definir variable exiftool_PATH="/opt/homebrew/bin/exiftool"
    définir variable pdf_join_PATH="
/System/Library/Automator/Combine PDF Pages.action/Contents/MacOS/join"
```
Et ensuite, il faut utiliser les variables de chemins pour les deux executables plutôt que d'écrire en dur le chemin.
Ce sera plus facile à maintenir en cas de nouveau changement de chemin d'accès.
Mais cette partie, avec les variables, je ne sais pas faire en AppleScript... avec PowerShell, ou Bash, pas de soucis


----------



## zeltron54 (4 Décembre 2022)

@MilesTEG
Bonsoir,

Je ne peux pas tester car mes ordinateurs sont tous limités à Mojave "10.14.6"

Par contre ta demande de tester le système et de définir les variables est réalisable.
ce qui donne:

```
set mon_os to get system version of (system info) -- récupère la version du système de l'utilisateur

if mon_os < "12" then -- si système inférieur à 12
    set exiftool_PATH to "/usr/local/bin/exiftool"
    set pdf_join_PATH to "/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py"
else --sinon
    set exiftool_PATH to "/opt/homebrew/bin/exiftool"
    set pdf_join_PATH to "/System/Library/Automator/Combine PDF Pages.action/Contents/MacOS/join"
end if
```
 et incorporer ses variables dans le script... le script devient:
Bien sur il t'appartient de tester ...

```
on run {input, parameters}
   
   
    set chemin to input as alias
   
    set mon_os to get system version of (system info) -- récupère la version du système de l'utilisateur
   
    if mon_os < "12" then -- si système inférieur à 12
        set exiftool_PATH to "/usr/local/bin/exiftool"
        set pdf_join_PATH to "/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py"
    else --sinon
        set exiftool_PATH to "/opt/homebrew/bin/exiftool"
        set pdf_join_PATH to "/System/Library/Automator/Combine PDF Pages.action/Contents/MacOS/join"
    end if
   
   
    display notification "Préparation des dossiers temporaires..." with title "Fusion PDF Cours Élèves"
   
    tell application "Finder"
        make new folder at ((path to home folder) as string) with properties {name:"compilation"}
        make new folder at ((path to home folder) & "compilation" as string) with properties {name:"la_selection"}
        set chemin_compilation to ((path to home folder) & "compilation:") as string
        set chemin_selection to ((path to home folder) & "compilation:la_selection:") as string
        set chemin_pageblanche to ((path to home folder) & "pageblanche.pdf") as string
       
        set les_fichiers to files of chemin
       
        display notification "Duplication des fichiers à fusionner..." with title "Fusion PDF Cours Élèves"
       
        repeat with chaque_fichier in les_fichiers
            set nom to name of chaque_fichier as string
           
            if nom contains "- ELEVES" and nom contains ".pdf" then
               
                if nom contains "ACTIVITES - ELEVES - Chapitre Complet.pdf" then
                   
                else
                    duplicate chaque_fichier to chemin_selection
                end if
            end if
        end repeat
       
        set la_selection to chemin_selection as alias
        set les_fichiers to files of la_selection
        repeat with le_fichier in les_fichiers
            set nom to name of le_fichier
           
            if not (exists chemin_compilation & "la_compilation.pdf") then
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "la_compilation.pdf"
               
            else
               
                duplicate le_fichier to chemin_compilation
                set anciennom to chemin_compilation & nom as alias
                set name of anciennom to "suite.pdf"
               
                set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
                set fich to quoted form of POSIX path of fich
               
                set NP to do shell script exiftool_PATH & " -pagecount " & fich --avec chemin exiftool dans la variable
                set NP to word 3 of NP
                if NP mod 2 is not 0 then
                   
                    set leblanc to chemin_pageblanche as string
                    set leblanc to quoted form of POSIX path of leblanc
                    set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                    set nouveau1 to quoted form of POSIX path of nouveau
                    set lenew to fich & " " & leblanc
                   
                    do shell script "'" & pdf_join_PATH & "' --output " & nouveau1 & space & lenew --avec chemin du fichier join dans la variable
                    do shell script "rm " & fich
                    set nouveau to nouveau as alias
                    set name of nouveau to "la_compilation.pdf"
                end if
               
                set le2 to ((path to home folder) & "compilation:suite.pdf") as string
                set le2 to quoted form of POSIX path of le2
                set nouveau to ((path to home folder) & "compilation:nouveau.pdf") as string
                set nouveau1 to quoted form of POSIX path of nouveau
                set lenew to fich & " " & le2
               
                do shell script "'" & pdf_join_PATH & "' --output " & nouveau1 & space & lenew --avec chemin du fichier join dans la variable
                do shell script "rm " & fich
                do shell script "rm " & le2
                set nouveau to nouveau as alias
                set name of nouveau to "la_compilation.pdf"
               
            end if
           
        end repeat
        set fich to ((path to home folder) & "compilation:la_compilation.pdf") as string
        set Chapitre to word 1 of nom
        set renom to (Chapitre & " - ACTIVITES - ELEVES - Chapitre Complet.pdf") as string
        set fich to fich as alias
        set name of fich to renom
        set fich to ((path to home folder) & "compilation:" & renom) as string
        set fich to fich as alias
        move fich to chemin with replacing
        set efface to ((path to home folder) & "compilation:") as string
        set efface to quoted form of POSIX path of efface
        do shell script "rm -Rf " & efface
       
    end tell
   
    display notification "Fin de la fusion des PDF élèves du chapitre sélectionné." with title "Fusion PDF Cours Élèves"
   
    return input
end run
```


----------



## MilesTEG (4 Décembre 2022)

@zeltron54 
Top, merci beaucoup.
Ça fonctionne très bien avec les variables


----------



## zeltron54 (5 Décembre 2022)

@MilesTEG

Il restera à vérifier à partir de quel OS (11 ou 12) le chemin d'installation d' "exiftool" et le chemin du logiciel système "join" ont changé, et d'ajuster la ligne à la bonne valeur.

```
if mon_os < "12" then -- si système inférieur à 12
```


----------



## MilesTEG (5 Décembre 2022)

zeltron54 a dit:


> @MilesTEG
> 
> Il restera à vérifier à partir de quel OS (11 ou 12) le chemin d'installation d' "exiftool" et le chemin du logiciel système "join" ont changé, et d'ajuster la ligne à la bonne valeur.
> 
> ...


J'avais hier ajouté un peu de commentaires autour du bloc des conditions pour alerter sur les versions et les chemins 

```
-- Changer les valeurs pour les tests suivants si jamais le script ne se lance plus.
    -- Vérifier aussi les chemins d'accès.
    if mon_os < "12" then -- si système inférieur à 12
        set exiftool_PATH to "/usr/local/bin/exiftool"
        set pdf_join_PATH to "/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py"
    else --sinon
        set exiftool_PATH to "/opt/homebrew/bin/exiftool"
        set pdf_join_PATH to "/System/Library/Automator/Combine PDF Pages.action/Contents/MacOS/join"
    end if
       -- -----------------
```

En tout cas, merci de ton aide.
Il n'a pas l'air si complexe ce langage AppleScript.


----------

