Вы на Mac? Если это так, вы можете использовать AppleScript с инструментом osascript
для выполнения вашего JavaScript. Вот несколько примеров:
Запуск JSX и возврат значения
Сохраните это как ~ / temp / foo.scpt:
tell application "Adobe Illustrator"
-- 'do javascript' runs any arbitrary JS.
-- We're using the #include feature to run another
-- file. (That's an Adobe extension to JS.)
--
-- You have to pass a full, absolute path to #include.
--
-- The documentation alleges that 'do javascript'
-- can be passed an AppleScript file object, but
-- I wasn't able to get that to work.
do javascript "#include ~/temp/foo.jsx"
end tell
И сохраните это как ~ / temp / foo.jsx:
var doc = app.activeDocument;
var numLayers = doc.layers.length;
// The last value in the JSX file will be printed out by
// osascript.
numLayers;
Теперь из командной строки запустите osascript ~/temp/foo.scpt
Будет напечатано количество слоев в активном документе Illustrator.
Получение данных из JavaScript является ограничением. Вы не можете печатать на стандартный вывод из JavaScript. Вместо этого поместите значение, которое вы хотите вернуть, как последний оператор файла JSX; оно будет напечатано osascript
. (Вот почему: последнее значение в файле JSX - это возвращаемое значение оператора AppleScript do javascript
. Это также последнее значение в файле AppleScript, и osascript
выводит окончательное значение.)
Значение, которое вы возвращаете из JavaScript, может быть числом, строкой, массивом или чем-то еще, что сохраняет свое значение при преобразовании в строку. Если вы хотите вернуть сложный объект, вам нужно #include JSON-библиотеку и вызвать .toJSONString()
для объекта.
Передача аргументов в JSX
Чтобы передать аргументы в код JSX, следуйте этому примеру:
Файл ~ / temp / args.scpt:
on run argv
tell application "Adobe Illustrator"
set js to "#include '~/temp/args.jsx';" & return
set js to js & "main(arguments);" & return
do javascript js with arguments argv
end tell
end run
Файл ~ / temp / args.jsx
function main(argv) {
var layer = app.activeDocument.activeLayer;
app.defaultStroked = true;
app.defaultFilled = true;
// Top, left, width, height (in points).
// Note that parameters start at argv[0].
layer.pathItems.rectangle(argv[0], argv[1], argv[2], argv[3]);
}
А затем запустить osascript args.scpt 50 30 10 80
Debugging
Команда do javascript
также имеет параметры для запуска отладчика ExtendScript. Для получения дополнительной информации откройте словарь Illustrator в редакторе AppleScript.