2

我正在尝试制作一个脚本,用 safari 打开一个 swf 文件,然后使用内置的“另存为 PDF”功能将其打印为 pdf。到目前为止,我的代码如下所示:

set appleworksFolder to choose folder

tell application "Finder"
set folderItems to (files of entire contents of appleworksFolder)
repeat with I from 1 to number of items in folderItems
    set the_doc to item I of folderItems
    set doc_name to name of the_doc as text
    tell application "Finder"
        set the clipboard to doc_name & ".pdf"
    end tell
    if name of the_doc is not ".DS_Store" then
        try
            tell application "Safari"
            activate
                open the_doc
                tell application "System Events"
                    tell application process "Safari"
                        delay 1
                        click menu item "Print…" of menu "File" of menu bar 1
                        delay 5
                        click menu button "PDF" of window "Print" of application process "Safari" of application "System Events"
                        delay 1
                        click menu item "Save as PDF…" of menu "PDF" of menu button "PDF" of window "Print" of application process "Safari" of application "System Events"
                        delay 1
                        keystroke "v" using command down
                        click button "Save" of window "Save" of application process "Safari" of application "System Events"
                        delay 8
                        keystroke "w" using command down
                        delay 0.5
                    end tell
                end tell
            end tell
        end try
    end if
end repeat
end tell

这可以看到打印对话框,但它似乎没有点击 pdf 菜单按钮,所以没有比这更进一步的了。我想知道这是否是山狮不让我使用applescript来控制按钮的问题,如果是这样,是否有解决方法?任何帮助将不胜感激!

4

1 回答 1

1

我刚刚在另一个网站上向某人展示了如何在 Mail 中执行此操作。您可以在此处的帖子 #7 中看到这一点。无论如何,这是针对您的详细信息和 Safari 调整的代码。我希望它有帮助!

set appleworksFolder to choose folder

tell application "Finder"
    set folderItems to (files of entire contents of appleworksFolder) as alias list
end tell

repeat with i from 1 to count of folderItems
    set thisItem to (item i of folderItems) as text

    tell application "Finder"
        set n to name of file thisItem
        set c to (container of file thisItem) as text
    end tell

    tell application "Safari"
        activate
        open file thisItem
    end tell

    saveAsPDFInSafari(c, n, true)
end repeat

tell me
    activate
    display dialog "Finished!" buttons {"OK"} default button 1 with icon note
end tell

(*********** SUBROUTINES *************)
on saveAsPDFInSafari(saveFolder, saveFileName, shouldCloseWhenFinished)
    set myDelay to 0.2

    -- setup the name
    if saveFileName does not end with ".pdf" then
        if character -4 of saveFileName is "." then
            set saveFileName to text 1 thru -5 of saveFileName
        end if
        set saveFileName to saveFileName & ".pdf"
    end if

    -- setup the folder
    set saveFolder to saveFolder as text
    set posixSaveFolder to POSIX path of saveFolder
    if posixSaveFolder ends with "/" then set posixSaveFolder to text 1 thru -2 of posixSaveFolder

    -- save as pdf
    tell application "Safari" to activate
    tell application "System Events"
        tell process "Safari"
            keystroke "p" using command down
            repeat until exists sheet 1 of window 1
                delay myDelay
            end repeat

            tell sheet 1 of window 1
                click menu button "PDF"
                repeat until exists menu 1 of menu button "PDF"
                    delay myDelay
                end repeat

                click menu item "Save as PDF…" of menu 1 of menu button "PDF"

            end tell

            repeat until exists (sheet 1 of sheet 1 of window 1)
                delay myDelay
            end repeat

            keystroke saveFileName
            delay myDelay

            keystroke "g" using {command down, shift down}
            repeat until exists sheet 1 of sheet 1 of sheet 1 of window 1
                delay myDelay
            end repeat

            tell sheet 1 of sheet 1 of sheet 1 of window 1
                set value of text field 1 to posixSaveFolder
                delay myDelay
                click button "Go"
            end tell

            repeat while exists sheet 1 of sheet 1 of sheet 1 of window 1
                delay myDelay
            end repeat

            tell sheet 1 of sheet 1 of window 1
                click button "Save"
            end tell

            repeat while exists sheet 1 of sheet 1 of window 1
                delay myDelay
            end repeat

            repeat while exists sheet 1 of window 1
                delay myDelay
            end repeat

            if shouldCloseWhenFinished then
                keystroke "w" using command down
            end if
        end tell
    end tell
end saveAsPDFInSafari
于 2012-11-24T20:12:15.500 回答