自作ツール&スクリプト

【Illustrator】アクションをスクリプト化して実行する方法

illustrator-doscript

ほんとうはスクリプトをアクションで実行したくていろいろ試したのですが、従来からイラレにあるバグに阻まれ実行できず

代わりにアクションをスクリプト化して実行する方法を書いておきます。

アクションからスクリプトを作成する方法

オブジェクトを選択して、下記のスクリプトを実行するとオブジェクトが縮小されます。

  1. アクションを自作

  2. アクションを保存して中身を取得

  3. 下記のようなコードにアクションを格納して、JSX実行。

アクションを一時的に作成して消すような挙動です。

var set = 'action_resize10';   
var action = 'resize';

//アクションの中身    
var actionStr = ['/version 3',  
'/name [ 15',  
'    616374696f6e5f726573697a653130', 
']',  
'/isOpen 1',  
'/actionCount 1',  
'/action-1 {',  
    '/name [ 6',  
        '726573697a65',
    ']',  
    '/keyIndex 0',  
    '/colorIndex 0',  
    '/isOpen 1',  
    '/eventCount 1',  
    '/event-1 {',  
        '/useRulersIn1stQuadrant 0',  
        '/internalName (adobe_scale)',  
        '/localizedName [ 18',  
            '4d69736520c3a0206c27c3a96368656c6c65',
        ']',  
        '/isOpen 0',  
        '/isOn 1',  
        '/hasDialog 1',  
        '/showDialog 0',  
        '/parameterCount 4',  
        '/parameter-1 {',  
            '/key 1970169453',  
            '/showInPalette -1',  
            '/type (boolean)',  
            '/value 1',  
        '}',  
        '/parameter-2 {',  
            '/key 1818848869',  
            '/showInPalette -1',  
            '/type (boolean)',  
            '/value 1',  
        '}',  
        '/parameter-3 {',  
            '/key 1935895653',  
            '/showInPalette -1',  
            '/type (unit real)',  
            '/value 10.0',
            '/unit 592474723',  
        '}',  
        '/parameter-4 {',  
            '/key 1668247673',  
            '/showInPalette -1',  
            '/type (boolean)',  
            '/value 0',  
        '}',  
    '}',  
'}'].join('\n');   

createAction(actionStr, set);       
app.doScript(action, set);
app.unloadAction (set, '');

function createAction (actionStr, set) {    
  var fpath = Folder ('~/Desktop')
  var f = File(fpath +'/'+ set + '.aia');    
  f.open('w');    
  f.write(actionStr);    
  f.close();    
  app.loadAction(f);    
   f.remove();    
}    

※選択しないと現在、使用できませんとエラーがでるので注意

アクションスクリプトに関してのメモ

メニュー名などは16進数に変換されます。

確かめたいときはhttps://singoro.net/16henkan/

valueの数は16進数の文字数の数を入力すること

アクションからスクリプトを実行するための検証

C:\Program Files\Adobe\Adobe Illustrator CC 2017\Presets\ja_JP\スクリプト

に適当なスクリプト(親レイヤーの削除.jsx)を格納しておきます。

アクションからスクリプトを実行できない

  1. まずアクションを録画するときにファイル>スクリプトから記録できません

  2. 「メニュー項目から挿入」からスクリプトを選択するとアクションに登録されます。

3.イラレを再起動すると「親レイヤーの削除」の項目が消えます。

4.ファイル>スクリプト>親レイヤーの削除を手動で実行すると項目が出現

アクションを登録するスクリプト

  • セット名「my」
  • アクション名「remove_layer」
var set = 'my';
var aia = File('~/Desktop/my.aia');

try {
  //アクションが存在する場合アンロード
    app.unloadAction(set, '');
} catch (e) {}
app.loadAction(aia);

以上で、アクションが登録されます。

アクションを実行するスクリプト

app.doScript('remove_layer', 'my');

エラーがでます。

簡単なalertだけのスクリプトでも、実行できませんでした。。。

app.doScript(‘復帰’, ‘初期設定アクション’);等

スクリプトを参照しない場合は普通に実行されます。

あとはアクションの再生ボタンを押した場合は、アクションからスクリプトも動きます。

参考

メニューコマンド以外のコマンドをjsで実行できる用にアクションに登録

https://gist.github.com/moluapple/2568405

https://forums.adobe.com/message/11181300#11181300

まとめ

もう一度書きますが、ほんとうはスクリプトをアクションで実行したくていろいろ試したのですが、従来からイラレにあるバグに阻まれ実行できず。

最新版はバグが修正されているみたいですが、昔のバージョンはうまくいかないので、もどかしいです。