Home About Contact
InDesign , ExtendScript , DTP

はじめての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;
if( myDocument.colors.item(MYCOLORNAME)==null ){
    myColor = myDocument.colors.add({name: MYCOLORNAME});
    //myColor.name = MYCOLORNAME;
    myColor.model = ColorModel.process;
    myColor.colorValue = [0,100,0,50]; //CMYK
} else{
    myColor = myDocument.colors.item(MYCOLORNAME)
}

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

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

結果は こちら(pdf)

myCreateColor.jsx

// create color sample

var MYCOLORNAME = "myColor";

var createMyColor = function(){
    var MYCOLORNAME = "MySwatchName";

    var myColor = null;
    if( myDocument.colors.item(MYCOLORNAME)==null ){
        myColor = myDocument.colors.add({name: MYCOLORNAME});
        myColor.model = ColorModel.process;
        myColor.colorValue = [0,100,0,50]; //CMYK
    } else{
        myColor = myDocument.colors.item(MYCOLORNAME)
    }

    return myColor;
};

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 をリストの一覧から選んでダブルクリックで実行。

ExtendScript のあれこれやをまとめました。興味ある方は、以下のレポジトリもご覧ください。
https://github.com/mindboard/indesign-extendscript