基本的な事について列記しておくページ

エントリにして事細かく解説するのも気が引けるような初歩的な内容を取り扱うページなんだ。

app、application
そのものズバリ、ターゲットになるアプリケーションの事。


activeDocument
これもそのまま、現在使用中の書類の事だね。


pages
そのまんまページオブジェクトだね。Indesign特有のオブジェクトだね。


spreads
スプレッドオブジェクトは見開きの対になるpageが含まれているんだ。これもIndesign特有のオブジェクトだね。
pageやspreadは

app.activeDocument.activeSpread...
app.activeDocument.activePage...

てな感じで記述するんだ。これは開かれているスプレッドとかページの...と言う感じになるんだね。もし、ダイレクトに10ページ目の...って具合の指定をしたい場合は

app.activeDocument.pages[9]...

と言う具合にすれば良いんだ。

layers
レイヤーオブジェクトだね。例えば

app.activeDocument.layers[0]

なんて場合、開いている書類の一番目のレイヤーなんて指定になるんだね。

selection
いわずと知れた選択範囲の事なんだね。配列として返されるので(選択範囲がひとつでも)[0]をお尻に付けないとエラーがでるよ。

slct = app.activeDocument.selection;

は、app(アプリケーション、IndesignやIllustratorの事だね)のactiveDocument(開かれているドキュメント)の選択範囲って事になるんだね。繰り返しだけどslctは配列になるので注意。

add()
addメソッドは文字通り何でも付け足しちゃうメソッドなんだね。まずはドキュメントを足してみよう。

app.documents.add(DocumentColorSpace.CMYK, 200, 200);

Illustratorでの見本なのだけど、app(アプリケーション)にdocuments(ドキュメント)をadd(足しちゃおう)メソッドなのでパラメータがあるのだけど、例ではカラースペースとアートボードサイズを設定しているんだ。省略するとデフォルトでドキュメントが作られるんだね。
Indesignの場合も省略するとデフォルトの状態のドキュメントが出来るのだけど、ちょいとhelpから引用

Documents.add (showingWindow:boolean, withProperties:Object): Document
Creates a new document.
showingWindow: Data Type: boolean, Default Value: true
If true, displays the document. (Optional)
withProperties: Data Type: Object
Initial values for properties of the new ^Object (Optional)

なんだかオプションに色々プロパティを並べろって事だろうけど良く分からないねw

さて、次はtextFramesでも足してみよう。

app.activeDocument.textFrames.add;

Indesignの場合は左上(原点)を起点としたテキストボックスが生成されるんだけど、Illustratorの場合はテキストアンカーが左下の原点に出来るんだ。こういった所は統一しておこうよ。同じメーカーのアプリケーションなんだからwww
さらに一歩踏み込んで文字を設定してみる。

obj1 = app.activeDocument.textFrames.add();
obj1.contents = "わんわんお!";

生成したオブジェクトに対してcontentsプロパティを設定すればOKなんだ。
続いて四角を描いてみる。

app.activeDocument.rectangles.add();

IndesignはこれでOKなんだ。その他、丸(ovals)も同様に描画出来るんだ。だけど、Illusratorは若干違ったりするんだね。pathItemクラスのエレメントとして定義されていたりするのでaddメッソッドは使わないんだね。

app.activeDocument.pathItems.rectangle(100,0,100,100);

上記のパターンではtop-leftの座標とwidth、heightの設定をしてるんだ。円を描く場合はellipseを使うんだね。これっていつも探しちゃうんだcircleでもovalでも良いんだけど...オブジェクトの名称とかは統一して欲しいよね。
IllustratorとIndesignではオブジェクトの実装に対する思想が少々違っていたりするのだね。まあ、アプリケーションの性質的な問題も無視出来ない事ではあるのだけど、Illustratorの方は若干ブレを含んでいるように感じる所が残っているような気がするんだ。だからスクリプトのコントロールでもIndesignの方がすんなりとコントロール出来たりする場合の方が多いね。ってわたしの頭が原因だと言ううわさもあるのだけど、わたしみたいな間抜けが結構ホイホイとコントロール出来るのだからIndesignの方が扱い易い証拠なのかもしれないね。オートメーションのキャリア的にはIllustratorの方が長いのだけどねw
その他、add()で生成出来る物を列記してみよう

Indesign
spreads, pages, layers, paths, pathPoints, polygons, tables, rows, cols, cells, sections, tabStops, textPaths, windows...
Illustrator
layers, pathPoints, placedItems...

まだまだswatchとかパターンとかがあるのだけど、それはまたの機会に。

placedItems
が出て来たので配置について解説。
Illustratorの場合は位置オブジェクトはadd()メソッドを使って追加するのだけど、Indesignではオブジェクト(rectangleとかのフレーム)に対してplace()メソッドを使って読み込むんだ。
この辺りの相違と言うのはアプリケーションの動作に起因するものだね。Illustratorの場合は何でもポンポンそのまま配置しちゃえるけど、Indesignの場合は読み込み先のフレームが必要。もちろんそのまま配置出来るけど、その場合、自動的にrectangleが生成されてその中に読み込まれちゃうからね。取りあえず見本を

Illustrator
myLayer.placedItems.add()
obj1.file = fileObject
Indesign
rectange.place(fileObject)

Illustratorの場合、空のplacedItemsオブジェクトを生成した後、fileオブジェクトを関連づけるんだ。Indesignの場合、place()メソッドでfileオブジェクトをダイレクトにあてはめてしまうんだ。


scale,scaling
長平体に関しても若干の実装が異なるんだ。

Indesign
textFrames.characters.horizontalScale = 100
Illustrator
textFrameItems.characters.scaling = [verticalscale,horizontalscale]

ご覧の通りなんだけど、Illustratorの場合は配列渡しになっているんだ。あと、Indesignは百分率表示だけど、Illustratorは倍率表示となるので注意しないとね。例えば80%の変形はIllustratorでは「0.8」、Indesignでは「80」となる訳だね。


文字列操作
アプリケーションクラスとは関係ないのだけど、自動化には当然のごとく付いてまわる文字列の加工。幾つかのメソッド類を並べてみよう。

String.fromCharCode(a)

先ずはこれ、aは文字コードが入るんだ。キャラクタコードから文字を拾う場合に使うメソッドだね。わたしはリターンコードとかタブコードのキャラクタを定義する為に多用しているんだ。

strings.charCodeAt(a)

stringsのa文字目の文字のキャラクタコードを返すんだね。暫く使わないとfromCharCodeと混同しちゃったりするのはわたしだけだろうか?

string.replace (a,b)

string文字列中の一番始めのaという文字をbに置換するんだ。

string.indexOf(a)

string文字列の中でaと言う文字は何番目に出て来るかを返してくれるんだ。複数あっても最初に出て来たのが返されるよ。

string.slice(a,b)

string文字列のa番目からb番目までの内容を返してくれるメソッドだね。bが省略されるとa番目以降を全て返して来るよ。


久しぶりにこそっと追加しておきましょう。

Arrayに関してまとまった情報を


length
配列長を参照する為のプロパティ。ループの長さをセットする時に良く使います。

push()
aを配列の最後尾に追加します。

pop()
配列の一番最後の値を抜き出します。

shift(a)
aを配列の最初に追加します。

unshift()

配列の先頭を抜き出します。

reverse()
配列の順序を反転させます。

toString()
配列を文字列にして返します。各項目は「,」で区切られます。しかしながら単純にブラケットとって参照するとカンマ区切りのテキストが得られたりします。

sort()
もちろん並べ替えですね。下の例の様に引数に関数を利用する事が出来ます。

a=[8,5,6,4,0,1,2,3];
 function test(a,b) {return b-a}
 alert(a.sort(test));

slice(a,b)
配列のa番目からb-1番目までを返します。オリジナルの配列は変更されません。引数が負の値の場合後から数えます。二つ目の引数が省略された場合はa番目〜最後までが返されます。

splice(a,b,(c,d,...))
配列のa番目からa+b-1番目までを削除します。aが負の値の場合最後尾から数えられます。また、オプションとして要素を3つ目の引数以下に列記すれば削除された要素の部分に追加する事も出来ますが、第⒊引数に配列与える方がわかりやすいかもしれません。オリジナルの配列が変更されますが、メソッドが返すのは削除された部分の配列です。

join(a)

配列をデリミタでつないだ文字列を返します。aが省略されると「,」がデリミタとなります。

concat()

配列の最後尾に要素を追加します。引数に配列か、カンマ区切りの値を入れましょう。


さて、カラーの扱い方を追記しておきましょう。
イラストレータの場合
以下の3つのカラーオブジェクトが存在します。

CMYKColor
properties : cyan[real(0.0-100.0)],magenta[real(0.0-100.0)],yellow[real(0.0-100.0)],black[real(0.0-100.0)]
RGBColor
properties : red[real(0.0-255.0)],green[real(0.0-255.0)],blue[real(0.0-255.0)]
GrayColor
properties : gray[real(0.0-100.0)]

利用方法
1.各カラーのインスタンスを生成します。
2.生成したインスタンスに対して各プロパティを設定します。
3.色を付けたいオブジェクトのfillColorとかに割り当ててあげます。
Illustratorの場合は以上のようなステップでOK

では、実際にやってみると...

var clrValue = new CMYKColor;
clrValue.cyan = 0;
clrValue.magenta = 100;
clrValue.yellow = 60;
clrValue.black = 0;
app.selection[0].fillColor = clrValue;

こんな感じですね。この例ではCMYKColorオブジェクトを生成し、各プロパティを設定した後選択したオブジェクトの塗りに対してCMYKColorオブジェクトを適用しています。

続いてInDesignを見てみよう。
InDesignの方はIllustratorとは違いColorオブジェクト自体はswatchの子クラスでカラーを生成するということはswatchを追加するということになのです。
Colorのプロパティについては以下

model
カラーモデル...混合インキ、プロセス、レジストレーション、スポット
space
カラースペース...CMYK、LAB、混合インキ、RGB
colorValue
カラー値...CMYK/0.0-100.0、LAB/-128-127、混合インキ/0.0-100.0、RGB/0.0-255.0
各配列となります。

例えばCMYKなら

colorValue=[0,100,100,0];

というような割り当て方をします。各モデル、カラースペースのenumは以下を参照

ColorModel
SPOT 1936748404
PROCESS 1886548851
REGISTRATION 1919248243
MIXEDINKMODEL 1768844664

ColorSpace
RGB 1666336578
CMYK 1129142603
LAB 1665941826
MIXEDINK 1666009432

こちらも実際にやってみると...

var colorProperties= new Object;
colorProperties.colorValue=[0,50,50,0];
colorProperties.model=1886548851;
colorProperties.space=1129142603;
colorProperties.name = "new swach item";
app.activeDocument.colors.add(colorProperties);

  以下、またまた続きます...

このアーカイブについて

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

OpenID対応しています OpenIDについて
Powered by Movable Type 5.12

    follow? twitter...     
    available on exchange