Создайте папку, где ваши 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 {document of window id (d0)} & 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