Thursday, February 21, 2008 / InDesign, Javascript

はじめてのInDesign CS3 JavaScript, カラー(スウォッチ)の作成と利用および基本図形の追加

InDesignでは、単に文字やイラスト・イメージの配置だけでなく、四角形や多角形・楕円などを直接配置できます。 これをJavaScriptから操作するにはどうすればいいのか? また、それらの図形オブジェクトの色はどうやって指定するのか?

基本図形の追加

基本図形は、JavaScriptでは、Rectangle,Polygon,Oval オブジェクトに該当しているようです。 これらは、以下のように、Page インスタンスに対して追加できます。
追加したあと、位置の指定、色の指定などをしていけばOK。

var myDoc=app.documents.add();
var myPage=myDoc.pages.item(0);
var rect=myPage.rectangles.add();
rect.strokeWeight=1;
rect.geometricBounds=[72,72,172,172];

単位の指定

geometricBoundsで指定している四隅の座標位置ですが、 このままでは、単位がわかりません。
単位の指定は以下のように、ドキュメントのViewPreferenceで指定します。

var myDoc=app.documents.add();
myDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
myDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;

色の作成

四角形は作成できたので、適切に色を指定して塗りたい。 どうすればいいか。

var color=myDocument.colors.item("Black");

とすると、黒色を扱えるのだが、

var color=myDocument.colors.item("Red");

としてみると、エラーになる。

Black についてはあらかじめ登録されているようだ。
しかし、好きな色を自分で指定して使うにはどうすればいいのだろう?

InDesignでは、Swatch(スウォッチ)という概念で色やグラデーションを 扱えるようになっている。 あらかじめ登録しておいたスウォッチ名でその色やグラデーションに アクセスする。以下のように...

var mySwatch=myDocument.swatches.item("MySwatchName");

もちろん、いきなりこれを使っても、MySwatchName というスウォッチが 作成されていないので、エラーになる。 Script中で使う場合は、以下のような手順で、事前に登録しておく。

var MYCOLORNAME="MySwatchName";

var myColor=myDocument.colors.add();
myColor.name=MYCOLORNAME;
myColor.model=ColorModel.process;
myColor.colorValue=[0,100,0,50];//CMYK

色はRGBで指定したいところだが、CMYKで指定する方法しか わからなかった。(たぶんRGBで指定する方法があるとは思うが)

さらに、もし同じスウォッチ名が登録ずみだった場合に備えて、以下のようなコードを使って色オブジェクトを生成するのが、良いようです。

var MYCOLORNAME="MySwatchName";

var myColor=null;
try{
    myColor = myDocument.colors.item(MYCOLORNAME);
    myColor.name;// it is a point ,if myColor were null, error occurred. 
}
catch(myError){
    myColor=myDocument.colors.add();
}

if(myColor!=null){
    myColor.name=MYCOLORNAME;
    myColor.model=ColorModel.process;
    myColor.colorValue=[0,100,0,50];//CMYK
}
else{
    alert("something is wrong.");
}

色を作成して、四角形図形を追加するサンプルスクリプト

以上をまとめると以下のようになる。

結果は こちら(pdf)

myCreateColor.jsx

// create color sample

var MYCOLORNAME="myColor";

var createMyColor = function(){
    var myColor=myDoc.colors.add();
    myColor.name=MYCOLORNAME;
    myColor.model=ColorModel.process;
    myColor.colorValue=[0,100,0,50];//CMYK
}

var myDoc=app.documents.add();
myDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
myDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;

createMyColor();

var myPage=myDoc.pages.item(0);
var rect=myPage.rectangles.add();
rect.strokeWeight=1;
rect.geometricBounds=[72,72,172,172];
rect.fillColor=MYCOLORNAME;

使い方

InDesign CS3をインストールしたフォルダ以下に、配置します。

./Adobe InDesign CS3/Scripts/Scripts Panel/myCreateColor.jsx

あとは、InDesignCS3を起動して、メニューから [ウインドウ→自動化→スクリプト] を選択、myCreateColor.jsx をリストの一覧から選んでダブルクリックで実行。