Как автоматизировать команду «Сохранить как» для нескольких открытых файлов в Preview

424
davec0864

Я использую Mac OS для запуска ежедневной бизнес-утилиты, которая будет создавать одиннадцать (11) отчетов, напечатанных в PDF, и файлы, открытые в Mac Preview. Файлы создаются с общими именами файлов, такими как «Constant.pdf» или «Estimate.pdf». У меня есть папка с пустыми файлами PDF, которую я использую в качестве «шаблона» для сохранения этих файлов с соответствующими именами файлов. У каждого пустого файла PDF есть имя файла, которое я хочу использовать для каждого из открытых отчетов PDF. Я делаю это вручную, беря первый открытый PDF, нажимая Cmd+ Option+ Shift+ S(чтобы получить доступ к команде «Сохранить как»), выделяя файл, который я хочу «Сохранить в», в окне Finder, нажимаю «Сохранить», нажимаю «Заменить», затем Я закрываю файл PDF. Я повторяю этот шаг с остальными 10 файлами.

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

Какие-либо предложения?

0
Да, просто. Что происходит с файлами PDF после их сохранения? Они остаются там или переезжают? Потому что мне интересно, что произойдет на следующий день и как будут названы следующие 11 - предположительно иначе, чем 11 из предыдущего дня? Кроме того, все 11 файлов PDF открываются довольно быстро по порядку, или это больше похоже на один файл PDF в час? CJK 6 лет назад 0
11 PDF создаются и открываются примерно за минуту, может быть, через две. Слишком быстро, чтобы вручную сохранить каждую филе, когда они открыты. davec0864 6 лет назад 0
Извините, нажмите return. Файлы сохраняются в уникальных папках с уникальными путями. У меня есть папка «template», которую я дублирую и переименовываю каждый раз, когда мне нужно создать эти отчеты. davec0864 6 лет назад 0
Хорошо - на самом деле, для сценария, чем быстрее, тем лучше. А сценарий - это то, как вы бы решили свою проблему, т.е. AppleScript. Кроме того, хотите ли вы назвать свои PDF-файлы шаблонов с начальным порядковым номером, который указывает сценарию порядок имен файлов? Например, ваш третий шаблон PDF в настоящее время с именем `" some_file_name.pdf "` станет `" 3-some_file_name.pdf "`, что приведет к тому, что третий обрабатываемый файл PDF будет сохранен как `" some_file_name.pdf "` ( без "3-" `). CJK 6 лет назад 0
Да, я могу добавить это к каждому файлу шаблона. davec0864 6 лет назад 0

1 ответ на вопрос

0
CJK

Создайте папку, где ваши 11 шаблонов PDF могут постоянно находиться. Префикс их имена файлов с 01-, 02-, ..., 10-, 11-чтобы указать порядок, в котором обрабатывается PDF - файлы будут сохранены (это важно, что шаблоны 1-9 имеют ведущий 0спереди).

В приведенном ниже сценарии измените значение свойства templatesFolder(строка 1), чтобы отразить путь к папке, в которой можно найти шаблоны PDF.

Чтобы использовать сценарий, разрешите открывать все 11 PDF-файлов в Preview, затем запустите сценарий. Вы можете включить скрипт в сервис Automator и назначить ему сочетание клавиш. Инструкции о том, как сделать общесистемный сервис с Automator, можно найти по этой ссылке.

При запуске сценарий откроет диалоговое окно файловой системы, которое позволит вам выбрать папку, в которую вы хотите сохранить обработанные PDF-файлы. Cancelпрервет сценарий После того, как вы нажмете Choose, файлы PDF будут сохранены в том порядке, в котором они были открыты, используя имена файлов шаблонов PDF (но без префикса). Затем каждый PDF-файл закрывается, предварительный просмотр закрывается, а сохраненные PDF-файлы отображаются в Finder .

Сценарий:

property templatesFolder : "~/Documents/PDFs/Templates"  set saveFolder to POSIX path of ¬ (choose folder with prompt ("Select a folder to save PDFs") ¬ default location path to documents folder)  tell application "System Events" to set pdfTemplates to the ¬ name of the files in folder templatesFolder ¬ whose name extension is "pdf"  set filenames to sort(the result)  repeat with D in my getPreviewDocumentsInOrder() set filename to text 4 thru -1 of item 1 of filenames set fp to POSIX file ([saveFolder, filename] as text) tell application "Preview" save D in fp close D end tell set filenames to rest of filenames if filenames = {} then exit repeat end repeat  quit application "Preview"  tell application "Finder" open POSIX file saveFolder activate end tell -------------------------------------------------------------------------------- ###HANDLERS # # to getPreviewDocumentsInOrder() script use P : application "Preview" property idx : sort(id of P's windows)  on docList(IDs) local IDs  if IDs = {} then return {} script property L : IDs end script  tell the result to set [d0, dN] to [first item, rest] of its L tell P to return & my docList(dN) end docList end script  tell the result to return the docList(its idx) end getPreviewDocumentsInOrder  to sort(L as list) local L  if L = {} then return {} if L's length = 1 then return L  script property Array : L  on minimum(L as list) local L  if L is {} then return {} if L's length = 1 then return L's first item  script property Array : L end script  set [x0, xN] to [first item, rest] of the result's Array set min to minimum(xN) if x0 < min then return x0 return min end minimum  on lastIndexOf(x, L as list) local x, L  if x is not in L then return {} if L = {} then return  script property Array : L end script  tell the result set [x0, xN] to [last item, reverse of rest of reverse] of its Array if x0 = x then return (xN's length) + 1 return lastIndexOf(x, xN) end tell end lastIndexOf  to swap(L as list, i as integer, j as integer) local i, j, L  set x to item i of L set item i of L to item j of L set item j of L to x end swap end script  tell the result set i to lastIndexOf(minimum(its Array), its Array) if i ≠ 1 then swap(its Array, 1, i) set [x0, xN] to [first item, rest] of its Array return [x0] & sort(xN) end tell end sort 
Отлично! Спасибо! Есть ли способ, которым я могу сделать путь по умолчанию "выбрать", чтобы это было что-то вроде следующего ... DaveC: Пользователи: Dave: Документы: Компания: Аудиты: Отчеты: Проекты. Спасет необходимость развернуть, чтобы выбрать путь сохранения. Спасибо! davec0864 6 лет назад 0
Да - если вы посмотрите на пятую строку, часть команды `Choose folder` - это свойство, называемое` default location`, которое вы можете установить в любую папку, которая вам нравится, в качестве пути по умолчанию для выбора. Вы можете установить его следующим образом, указав путь posix: `POSIX-файл по умолчанию" / Users / CK / Documents "`; или используя путь HFS: `псевдоним расположения по умолчанию" Macintosh HD: пользователи: CK: Documents: "`. CJK 6 лет назад 0
Когда я добавляю этот код, я получаю следующее сообщение: «Не могу сделать» Дейв Кларк: Пользователи: dclark: Документы: Компания: Аудит проектов: Новая финансовая отчетность: Отчеты «в константу типа». Это слишком длинный путь? Также скрипт отлично работает в моей тестовой папке, но когда я запускаю его в производство с реальными файлами, он пропускает первый файл. Есть идеи??? davec0864 6 лет назад 0
Вы не написали свойство `default location` так, как я описал. Вы вышли в `path to`. Что касается того, почему это работает в одном месте, а не в другом, я не вижу причин, почему это так. Мне нужно больше информации о том, что отличает вашу тестовую папку и рабочую папку или их файлы. CJK 6 лет назад 0
Приношу извинения. Я не изучаю Apple, и я буквально воспринял ваши инструкции. Пожалуйста, прости меня. Вы были так полезны. Есть ли способ, которым я могу отправить вам снимки экрана структуры папок? davec0864 6 лет назад 0
Извините, что заставил вас ждать. Вы можете загрузить скриншоты в [мой дропбокс] (http://inbox.chri.sk). У вас была личная удача в выяснении, почему один файл опущен в одном конкретном случае? CJK 6 лет назад 0
Разница была в том, что в моей тестовой папке я создавал уникальные фиктивные файлы с последовательной нумерацией, поэтому было легко следовать сценарию. В рабочей версии все PDF-файлы имеют одинаковые имена (см. Снимок экрана, который я отправил в ваш почтовый ящик). После того, как я выяснил, какой файл был 01, который был 02, и т. Д., Я смог добавить «фиктивный» файл в папку шаблонов с отсутствующим номером, и теперь он работает нормально. Я думаю, что это было связано с тем, как Preview сортировал файлы в меню Window, потому что верхний в списке был пропущенным. Это работает сейчас. Спасибо! davec0864 6 лет назад 0