Создайте папку, где ваши 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