イラストレーターのjavascriptマクロの注意点

山程ありますが、その内の一例をご紹介します。

activeDocument.layersで取得できるレイヤーは最上位のレイヤーだけ

サブレイヤーはactiveDocument.layersで取得できません。全てを取得したい場合は再帰処理でlayersのlayersの…と見ていくしか無さそうです。
一番上のレイヤーのサブレイヤーはこんな感じで取得できます。
app.activeDocument.layers[0].layers[0].name

テキストはテキストフレーム

activeDocument.textFramesで全てのテキストを配列で取得できます。Fが大文字になります。
(レイヤーもこれで取得できれば楽なんですが、いい方法はないでしょうか…)
contentsプロパティで内容を取得、変更できます。
alert(activeDocument.textFrames[0].contents); //文字列が表示されます。
activeDocument.textFrames[0].contents = “abcde”; //文字列を”abcde”にします。

可視状態やロックの取得、設定

レイヤーはvisibleプロパティで設定します。
また、親の表示/非表示には影響されません。
activeDocument.layers[0].visible; //trueかfalseが返ります。
activeDocument.layers[0].visible = true; //代入すれば設定できます。

テキストフレームの可視状態ははhiddenで設定します。visibleプロパティでは設定できません。
activeDocument.textFrames[0].hidden = false; //visibleとは逆で、falseで見られるようになります。

ロックはlockedで設定します。trueでロック、falseで解除です。
可視状態でなければロックの設定も解除もできません。親が非表示となっている場合も操作できません。
ロックしていてもjavascriptでオブジェクトの操作は可能です。

activeDocument.textFrames[0].locked = false;
activeDocument.textFrames[0].contents = “abcde”;

テキストフレーム・レイヤーをすべて表示させる場合、カッコ悪いですが以下のようにしています。

エラー処理

必ずしておいたほうがいいです。
ただエラーメッセージはかなりアバウトです。親レイヤーに原因がある場合も多々あります。しっかり確認しましょう。
メッセージは英文で返ってきますが、そんなに難しくはありません。
大体この2パターンです。
modified:変更できない(ロックか可視状態が原因)
outofboundsは配列のインデックスが最大値を超えているか下回っています。

イラストレーターのjavascriptマクロでテキストを全てアウトライン化

createOutline()を使います。
元々のテキストは消えるので、必要な場合はコピーなどをとっておきましょう。
また、色々なエラーが考えられるのでそこは実装せずに手作業にしています。

イラストレーターのjavascriptマクロのサンプル

最上位レイヤーを削除する場合はこのような感じです。
deleteitemsに任意のレイヤー名を追加して下さい。

注意点
forで回す場合は、レイヤーインデックスの最大から初めて、ループ変数はデクリメントにする。
削除した場合にインデックスがずれるため。
また、インデックスが最大の時に削除する場合、breakで抜けておかないとエラーになる。

イラストレーターでjavascriptを使う時のデバッグ方法など

まず、イラストレーターを開いて下さい。
既存のファイルを開くか、ctrl+Nで新規作成します。

で、jsファイルを任意の場所に作成します。デスクトップで良いでしょう。名前はtest.jsとでもしましょう。
test.jsの内容は

とします。コンソールに1を出力するという内容です。

こうすれば、デバッガが自動的に立ち上がり、コンソールに1を出力します。
ちなみにデバッガの名前は「ExtendScript Toolkit」です。単体で立ち上げる事もできますが、
こちらのほうが早いでしょう。

ちなみにこの時点ではまだ、jsファイルともイラストレーターとも連携していませんので注意して下さい。
まず、立ち上がったデバッガからjsファイルを開きます。

1

そして、イラストレーターと連携させます。
左上のコンボボックスでイラストレーターを選択、その左の鎖が緑色になっていれば成功しています。

2

念のためコンソールに「app」と入力しエンターを押すと
結果 : [Application Adobe Illustrator]
と返ってきます。
もし、
結果 : [object Application]
と返ってきた場合は設定が完了していない可能性があります。

これでデバッガの準備完了です。

ブレークポイントは緑の四角のところをクリックして下さい。
一度クリックでブレークポイント有効化、
もう一度クリックで無効化、
もう一度クリックすると削除されます。
F9でも変更できます。
青い四角のところをクリックすると行を指定してジャンプになります。ちょっと狭いですね。

3

後はF5で再生、shift+F5で強制終了、ステップインはF11です。

Illustratorでスライスが作れない時

スライスして保存しよう、と思っても何故か保存できない…
そういう時はアートボードを見なおして下さい。
アートボードの外にスライスは作れますが、保存することは出来ないのです。
オブジェクト全体に合わせた、大きいアートボードを一つ用意しておくと良いです。

イラストレーターで改行した文字を装飾したい時

イラストレーターの文字に関するアピアランスの話です。

イラストレーターで改行した文字を装飾したい時、どうすればいいでしょうか?
正解は、「テキスト」に線をつければokです。その中で改行してもok。
その際、「文字」には線を付けないで下さい。理由は後述です。

アピアランスで文字・テキストの違いはありますが、テキストはそのボックス全体、文字はテキスト内の一文字づつにつけます。

決して文字をコピーし、拡大・背景に・・・というのはやめましょう。

イラストレーターでjavascriptを使う

イラストレーターではjavascriptを使ってスクリプトを組めます。
しかしhtmlに対して使うjavascriptとは少々使い勝手は変わります。
リファレンスはこちらから。英語ですが、慣れれば何とかなります。
http://www.adobe.com/jp/devnet/illustrator/scripting.html

appがrootになり、そのプロパティやメソッドを使って色々な処理をしていきます。

ドキュメントの名前を取得

例えばドキュメントの名前を取得するには

となります。

ではエラーになります。

アートボードを処理する場合も

このようにある程度のオブジェクトを変数に格納しながらコーディングすると書きやすく、見やすくなります。

座標軸

左右はx軸。右に行くほど数値が大きくなる。
上下のy軸は注意。下に行くほど数値が小さくなる。(Illustratorでは下に行くほど数値が大きくなる)
なぜ逆になっているかはよく分かりません。
heightはそんなことはなく、大きくすれば下に伸びていきます。

四角形を書く

引数はtop,left,width,heightの順。

パスを移動させる

こんな感じ。x,yで指定。下に行くほどyの数値は小さくなります。

アートボードを整理

アートボードを一枚追加、それ以外を消す場合の処理。全部消そうとするとエラーになります。

アートボードを追加する時

この時気を付けなくてはいけないのが視点は必ず左上で、終点は右下になること。y座標はマイナスほど下になります。

また、forループの時、最大数から初めてデクリメントすること。
for(var i = 0; i <= artboardslength; i ++){
ではなく、
for(var i = (artboardslength – 1); i >= 0; i –){
とする。
なぜなら、
artboards[0],artboards[1],artboards[2]
と3つある場合
artboards[1].remove();
としても
artboards[0],artboards[2]
にはならず、
artboards[0],artboards[1]
となる。remove()した瞬間に0開始のインデックスに置き換えられるようだ。

PDFとして保存する時

関数を定義しておき、実行

Illustrator(イラストレーター)で簡単に表を作成する

エクセルで表を作り、コピーして貼り付け、それだけでできます。

  • まずは表を作ります。場合によっては、エクセルの表を渡されるということもあるでしょう。
    分かりやすいように一箇所、縮小して表示しています。
  • 枠線のチェックを外し、範囲を大きめにとってコピーします。
    枠線のチェックを外さないと枠線ごと表になってしまいます。また、範囲を大きめに取らないと端が切れる場合があります。この辺りはエクセルとの相性問題でしょうか。
  • Illustratorに貼り付けます。完了です。
  • 内部的にもテキスト(ベクター形式)ですので、拡大縮小しても劣化することはありません。
  • 4
  • 再編集する場合は、グループ化を解除して下さい

以上です。

Illustrator CS6でjavascriptを使う方法

Illustratorでマクロを使う方法。

大きく分けて「アクション」と「スクリプト」がある。

アクションは手順を記録、繰り返し使うこと。大抵の場合これで事足りるので、できるだけアクションで済ませた方が良い。

スクリプトは言語が3種類あり、js、jsx、vbsが使える。

jsはご存知javascript。

jsxはjsをCよりにした言語。キッチリかかないと動かない。

vbsは使う機会がなかったので覚えていない。

今更vbsも何なので、jsで行くことに。

// hoge が含まれるtextFrameを hoge+入力した文字列に置換

no = prompt(“文字列を入力して下さい”,””);

for (i = 0 ; i < activeDocument.textFrames.length; i++) {
if(activeDocument.textFrames[i].textRange.contents.indexOf(“hoge”) != -1){
activeDocument.textFrames[i].textRange.contents = “hoge” + no ;
}
}

//画像を挿入。pathは予約語っぽかったのでpathxに。使うときは適宜変えて下さい。

no = prompt(“文字列を入力して下さい”,””);

pathx=”./a/” + no + “.png”;

var myDoc = app.activeDocument;
var rasterFile = File(myDoc.path+”./a/” + no + “.png”);

var myPlacedItem = myDoc.placedItems.add();
myPlacedItem.file = rasterFile;
myPlacedItem.position = [-100,203];
myPlacedItem.width = 100;
myPlacedItem.height = 50;