2
votes

I am trying to make a script that opens an swf file with safari and then print it as a pdf using the built in "Save as PDF" feature. So far my code looks like this:

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

This works up to seeing the print dialogue, but it doesn't seem to click the pdf menu button so doesn't get any further than this. I was wondering if this is a problem with mountain lion not letting me use applescript to control buttons, and if so, is there a fix for it? Any help would be greatly appreciated!

1
You could also try using wkpdf to create the PDFs.Lri

1 Answers

1
votes

I just showed someone how to do this in Mail on another website. You can see that in post #7 here. Anyway, here's that code adjusted for your particulars and Safari. I hope it helps!

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