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

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
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 :
upload_2019-9-4_8-47-38.png



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

Merci pour votre aide
++ Miles
 

zeltron54

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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

Membre confirmé
29 Octobre 2007
263
14
38
Bonjour
Oui ça m’intéresse beaucoup
Avec ton aide j’arriverai peut être a comprendre le AppleScript
En tout cas merci pour ton aide
 

zeltron54

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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..
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
Bloc de code:
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

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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....
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
Finalement il vaut mieux un délai de 3 secondes.
Je te remets le script modifié.
Bloc de code:
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

Membre confirmé
29 Octobre 2007
263
14
38
Bonjour :)
Super merci :D
Je teste ça dans la matinée :)

:merci::coucou:
 

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
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

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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 :):) ;)
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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
Bloc de code:
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

Membre confirmé
29 Octobre 2007
263
14
38
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 :):) ;)
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 :
Bloc de code:
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

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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
 
Dernière édition:

MilesTEG

Membre confirmé
29 Octobre 2007
263
14
38
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...
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

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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.
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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.
Bloc de code:
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

Membre confirmé
29 Octobre 2007
263
14
38
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 - Activités ELEVES Chapitre complet.pdf
(en temps normal je met manuellement ce genre de nom : 02 - Activités ELEVES - 1 à 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,
Bloc de code:
    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...
Bloc de code:
            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 :
Bloc de code:
            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... :eek: :D

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

zeltron54

Membre d’élite
29 Mars 2008
1 602
247
Lorraine
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

Membre confirmé
29 Octobre 2007
263
14
38
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 - ACTIVITÉS - ELEVES - Activités 1 à 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 - ACTIVITÉS - ELEVES - Chapitre Complet.pdf