Использование Automator или Applescript или обоих для рекурсивной печати документов в PDF

У меня огромный набор файлов (4000+) в старом формате Apple (Appleworks). Моим сотрудникам нужно, чтобы все они были обновлены в формате PDF. Открыв документы в Appleworks и используя системный диалог печати, я могу сохранить их в PDF - это идеально. Однако я полный кусок с Applescript / Automator.

Используя скрипт Python, я смог собрать все файлы Appleworks со своего компьютера начальника и поместить их в каталог; каждый файл затем находится в подкаталоге с файлом .txt, содержащим его исходное местоположение (куда, в конечном итоге, мне придется их вернуть).

Мне нужно, чтобы сценарий рекурсивно перемещался по этому массивному каталогу, получая каждый файл, который не является ни папкой, ни документом .txt, и сохранял его в PDF в том же каталоге, в котором был найден исходный файл. т.е.

/Appleworks/Boss_File_1/

будет содержать

/Appleworks/Boss_File_1/Boss_file_1.cwk и /Appleworks/Boss_File_1/path.txt

Но в конечном итоге также должен содержать /Appleworks/Boss_File_1/Boss_File_1.pdf

Я могу пойти на половину с любым решением, но не знаю, как заставить их работать вместе. Я использую Applescript, он выглядит так:

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
    if name of the_doc is not "path.txt" then
        try
            tell application "AppleWorks 6"
                open the_doc
                tell application "System Events"
                    tell process "Appleworks"
                        keystroke "p" using command down
                        click menu button "PDF" of window "Print"
                        click menu item "Save as PDF…" of menu 1 of menu button "PDF" of window "Print"
                        click button "Save" of window "Save"

                    end tell
                end tell
            end tell
        end try
    else
        tell application "Finder"
            delete the_doc
        end tell
    end if
end repeat

конец сказать

Это открывает диалог печати, но никогда не продвигается дальше, и я не знаю почему. Я понимаю, что этот сценарий также не занимается возвратом документа в исходную папку, но в Applescript я мог бы достаточно легко сделать это, если бы мог пройти фактическую печать в PDF.

Между тем, в Automator, используя этот рабочий процесс:

Get Specified Finder Items
Get Folder Contents
Filter Finder Items (by kind and then by file extension is not .txt)
Open Finder Items (with Appleworks)

Тогда я застрял; использование фактического Print Finder Items и выбор Adobe PDF, кажется, на самом деле вообще ничего не делают, и записывать себя с использованием процесса печати в pdf в реальном времени бесполезно, потому что я не знаю, как заставить Automator сохранить путь, из которого был создан файл, и обеспечить его печать в Это.

Если кто-нибудь может помочь мне как-то собрать это воедино, я был бы безмерно благодарен. Спасибо.


person Jonline    schedule 22.03.2012    source источник


Ответы (3)


Попробуй это:

set appleworksFolder to choose folder
set thePath to POSIX path of appleworksFolder as string

tell application "Finder"
set folderItems to files of appleworksFolder
repeat with aFile in folderItems
    set {name:fileName, name extension:nameExtension} to aFile
    set filePath to POSIX path of (aFile as alias) as string

    if nameExtension is not "txt" then
        set theLocation to POSIX path of (aFile as text)
        set baseName to text 1 thru ((get offset of "." & nameExtension in fileName) - 1) of fileName
        set destLocation to (thePath & baseName & ".pdf")
        set theCommand to "/System/Library/Printers/Libraries/./convert -f \"" & filePath & "\"" & " -o " & "\"" & destLocation & "\"" & " -j \"application/pdf\""
        do shell script theCommand

    else
        tell application "Finder" to delete aFile
    end if
end repeat
end tell
person adayzdone    schedule 22.03.2012
comment
Вы определенно понимаете, к чему я стремлюсь - большое спасибо, так; при его запуске проблема в том, что сценарий оболочки не может определить тип MIME; бывает, что это всегда будет один и тот же тип MIME, но я ничего не знаю о сценариях оболочки - не могли бы вы посоветовать способ жестко запрограммировать тип MIME? - person Jonline; 22.03.2012
comment
Также я должен отметить - не каждый файл имеет расширение файла, многие из этих файлов относятся к OS 7; на самом деле я нашел их через мои очень ограниченные сценарии оболочки, испытавшие использование и mdfind для kMDItemKind, т.е. мета-теги документа. - person Jonline; 22.03.2012
comment
Не могли бы вы опубликовать несколько файлов с примерами? Трудно найти обходной путь, не имея возможности его протестировать. - person adayzdone; 23.03.2012
comment
Это больше не работает в Mountain Lion; «convert» был символической ссылкой на «cupsfilter», и параметры изменились. Смотрите мой ответ для полного сценария. - person T3db0t; 13.12.2012
comment
На этом пути больше нет такой convert утилиты :( - person wcochran; 30.04.2015

Конвертировать с помощью страниц

Если у вас есть Pages (часть iWork), он может открывать файлы .cwk и сохранять их как PDF: просто замените свой if блок следующим:

if (the_doc's name extension is not "txt") then
    set newName to my makeNewFileName(the_doc, "pdf")
    try
        tell application "Pages"
            open (the_doc as alias)
            set thisDoc to front document
            save thisDoc as "SLDocumentTypePDF" in newName
            close thisDoc saving no
        end tell
    on error
        display dialog "Error: cannot export " & (name of the_doc) & " to PDF."
    end try
end if

(вам понадобится эта настраиваемая функция makeNewFileName):

(* prepare new file name with extension ext *)
on makeNewFileName(finderItem, ext)
    tell application "Finder"
        set fname to finderItem's name
        set thePath to (finderItem's container) as alias as text
        return (thePath & (text 1 thru ((length of fname) - (length of (finderItem's name extension as text))) of fname) & ext)
    end tell
end makeNewFileName

(полный рабочий сценарий)

Создание сценариев графического интерфейса пользователя

В качестве альтернативы вы можете создавать сценарии графического интерфейса пользователя для AppleWorks, как вы пытались, но это имеет недостаток, заключающийся в том, что вы не можете программно указать, где сохранить файл PDF.

Этот фрагмент работает для меня:

tell application "AppleWorks 6"
    open the_doc
    activate

    tell application "System Events" to tell process "AppleWorks"
        keystroke "p" using command down
        delay 1 -- or longer, if it takes longer
        click menu button "PDF" of window "Print"
        click menu item "Save as PDF…" of menu 1 of menu button "PDF" of window "Print"
        delay 1 -- or longer
        click button "Save" of window "Save"
    end tell
end tell

К сожалению, AppleWorks, похоже, неправильно слушает команду AppleScript close, поэтому вам может потребоваться закрыть файл, также имитируя нажатия клавиш cmd + W.

person fanaugen    schedule 22.03.2012
comment
Спасибо за это! Я начал с Pages, но, к сожалению, он не сохраняет форматирование для многих рассматриваемых документов (многие из них являются академическими публикациями с невероятно конкретными ограничениями форматирования). Однако решение для создания сценариев с графическим интерфейсом пользователя работает хорошо. Я также думаю, что позже я смогу написать сценарий Python (с которым я гораздо более знаком) для перемещения документов, поскольку я буду знать имена файлов. Мне это более или менее подходит, спасибо миллион. - person Jonline; 22.03.2012

Мне нужно было сделать это сегодня на Mountain Lion с кучей чеков в формате RTF; вот как я это сделал:

#!/bin/bash
for file in *.rtf ; do
filename=$(basename "$file")
/usr/sbin/cupsfilter "$file" > "$filename.pdf"
done

Сработал отлично; супер просто. Никакой глупости Automator или AppleScript.

person T3db0t    schedule 12.12.2012
comment
cupsfilter, к сожалению, не распознает определенные типы файлов, такие как .doc и .docx (не уверен в Appleworks), но в остальном это хорошее решение! - person user535673; 22.08.2013
comment
cupsfilter определенно не конвертирует файлы Appleworks (.cwk). - person FutureNerd; 08.05.2014