Macを使用していますか?その場合は、osascript
ツールでAppleScriptを使用して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内からstdoutに印刷することはできません。代わりに、返す値をJSXファイルの最後のステートメントとして配置します。によって印刷されosascript
ます。(理由は次のとおりです。JSXファイルの最後の値はdo javascript
AppleScriptステートメントの戻り値です。これはAppleScriptファイルの最後の値でもあり、最終値をosascript
出力します。)
JavaScriptから返す値は、数値、文字列、配列、または文字列に変換されたときにその値を保持するその他のものにすることができます。複雑なオブジェクトを返したい場合は、JSONライブラリを#include.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
デバッグ
このdo javascript
コマンドには、ExtendScriptデバッガーを起動するためのオプションもあります。詳細については、AppleScriptEditorでIllustrator辞書を開いてください。