1 votes

Pourquoi AppleScript "exists" renvoie-t-il parfois toujours "false" ? (partie de la question concernant la vérification des documents dans Pages)

Je suis novice en AppleScript et j'ai rencontré ce problème après plusieurs autres problèmes et solutions (voir plus bas pour plus de détails). Mon problème actuel est que je demande à Pages de vérifier si un document est ouvert avec l'option

tell application "Pages"
    exists front document
end tell

mais parfois même lorsque Pages a un document ouvert, la mention "existe" est toujours "false". Et en général, il semble que parfois, toute référence à "front document" renvoie des erreurs indiquant qu'il ne peut pas l'obtenir alors qu'il est clairement là. Lorsque je quitte Pages et que j'essaie à nouveau, cela fonctionne généralement... jusqu'à ce que ce ne soit plus le cas.

Des idées ?

Mon problème initial vient du fait que je veux faire une QuickAction pour ouvrir un fichier dans Pages -> exporter en PDF -> fermer Pages -> répéter l'opération si nécessaire. Mais le script prend de l'avance et essaie de terminer l'exportation avant même que le fichier ne soit ouvert.

tell application "Finder"
    set theSelection to selection
    repeat with oneItem in theSelection
        set finderLocation to oneItem as text
        open oneItem
        tell application "Pages"
            set idx to 0
            repeat until (exists front document)
                set idx to idx + 1
                if idx > 2000 then quit
            end repeat
            set pagesLocation to file of front document as text
            repeat until finderLocation = pagesLocation
                set pagesLocation to file of front document as text
            end repeat
            set exportFile to file of front document as text
            set exportFile to text 1 thru -6 of exportFile
            set exportFile to exportFile & "pdf"
            export front document to file exportFile as PDF with properties {image quality:Best}
            close front document without saving
        end tell
    end repeat
end tell

J'ai donc essayé de trouver un moyen de vérifier si le document est ouvert avant de continuer. Et j'ai trouvé ceci, pour vérifier si l'emplacement du fichier frontal du document dans Pages correspond à l'emplacement des fichiers ouverts par Finder. Cela a fonctionné jusqu'à ce que j'essaie à partir d'une nouvelle instance de Pages (quitter Pages d'abord puis essayer). Le problème était que Pages signalait une erreur parce qu'il n'était pas possible de trouver le "document principal" (puisqu'il avait besoin de lire le chemin d'accès au fichier mais que rien n'était encore ouvert).

J'essaie donc maintenant de vérifier si quelque chose est ouvert avant de vérifier si le fichier cible est ouvert. Mais maintenant, comme décrit ci-dessus, il semble que les références à "document" se cassent la figure et provoquent le blocage de "existe" ou de "file of front document".

Suis-je dans la bonne direction ou existe-t-il une meilleure façon de procéder ?

Merci d'avance.

EDIT : maintenant mon script ressemble à ceci, et semble être plus cohérent, du moins jusqu'à présent

tell application "Finder"
set theSelection to selection
repeat with oneItem in theSelection
    set nameOfDocument to name of oneItem
    open oneItem
    tell application "Pages"
        repeat until (exists document nameOfDocument)
            delay 0.1
        end repeat
        set exportFile to oneItem as text
        set exportFile to text 1 thru -6 of exportFile
        set exportFile to exportFile & "pdf"
        export document nameOfDocument to file exportFile as PDF with properties {image quality:Best}
        close document nameOfDocument without saving
    end tell
end repeat
end tell

0voto

wch1zpink Points 6067

Le code AppleScript suivant devrait vous convenir. En fin de compte, ce code définit une variable pour le nombre de documents ouverts dans Pages ( openDocuments ) Alors si le nombre de openDocuments est différent de 0, les noms des documents ouverts sont stockés dans cette variable openDocumentNames

if application "Pages" is not running then
    tell application "Pages" to activate
    tell application "System Events" to tell application process "Pages"
        repeat until frontmost
            delay 0.1
        end repeat
    end tell
end if

tell application "Pages"
    set openDocumentsRef to a reference to documents
    set openDocuments to count of openDocumentsRef
    if openDocuments is not 0 then
        -- Gets The Name Of The Open Files
        set openDocumentNames to name of openDocumentsRef
        -- Gets The File Paths To The Open Files
        set openDocumentsPaths to file of openDocumentsRef
    end if
end tell

-- Shows & Selects The Files In A New Finder Window
tell application "Finder" to reveal openDocumentsPaths

0voto

Mockman Points 847

Une approche légèrement différente. Elle ouvre le fichier Pages sélectionné dans le Finder, ce qui lance Pages. Il active ensuite Pages, attend un moment et teste l'activité. Il vérifie ensuite que le document ouvert correspond au fichier sélectionné et, s'il s'agit du même, exporte une version PDF dans le même dossier, puis ferme le document Pages.

tell application "Finder"
    set oFil to selection as alias -- get alias of selected file
    set oFilT to oFil as text -- get file of selected file
    set oNam to name of oFil -- get name.extension of file
    if kind of oFil is "Pages Document" then
        open oFil
    end if
end tell

tell application "Pages"
    activate
    delay 1
end tell

set pagApp to path to application "Pages" -- App to test
tell application "System Events"
    if busy status of pagApp is true then -- Test busy status of Pages
        say "Busy"

    else -- if not busy then…
        tell application "Pages"
            set dFilT to file of document of window 1 as text -- get file of document 1

            if oFilT = dFilT then -- is Finder selected file same as Pages open document

                set dNam1 to name of document 1 -- get name without extension
                tell application "Finder" to set xFil to (container of oFil as alias as text) & dNam1 & ".pdf"
                export document dNam1 to file xFil as PDF with properties {image quality:Best}
            end if
            close document dNam1
        end tell
    end if
end tell

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X