Index > はじめてのInDesign CS3 JavaScript お約束の"HelloWorld"
Fri, February 15, 2008

はじめてのInDesign CS3 JavaScript お約束の"HelloWorld"

InDesign(CS3)は、JavaScriptで、ページを記述していくことができます。
これは、 ちょうどHTMLで DOM プログラミングしているのと似ています。 ただし、DOM(ドキュメントオブジェクトモデル)がInDesign用にデザインされているので、 W3CのDOMとは異なります。
基本的な考え方が似ているので、学習は楽ですが、 InDesign自体が商業印刷用のDTPソフトなのでDOMもその分複雑です。 (という意味では、アウトラインの理解が楽、ということにすぎなくて、 実際には膨大なAPIの把握が必要なので、実際に仕事に使える スクリプトを書くには、かなりの茨の道が予想されそうです。)

お約束のHelloWorldスクリプト

myHelloWorld.jsx

// my hello world

init();

function init(){
    var myDoc=app.documents.add();
    var myPage=myDoc.pages.item(0);
    var myTextFrame=myPage.textFrames.add();

    var myBounds = myGetBounds(myDoc,myPage);
    myTextFrame.geometricBounds=myBounds;
    myTextFrame.contents="Hello World!";
}

function myGetBounds(myDoc, myPage){
    with(myDoc.documentPreferences){
        var myPageHeight = pageHeight;
        var myPageWidth = pageWidth;
    }
    with(myPage.marginPreferences){
        var myTop = top;
        var myLeft = left;
        var myRight = right;
        var myBottom = bottom;
    }
    myRight = myPageWidth - myRight;
    myBottom = myPageHeight- myBottom;
    return [myTop, myLeft, myBottom, myRight];
}

app というのは、Applicationオブジェクト(のインスタンス)です。 InDesign上でスクリプトを動かす場合は、はじめから存在していて、 トップレベルで使用可能な変数になっています。

そのほか、 appがはじめから存在しているのは、OKとしても、 わかりにくいのが、

var myPage=myDoc.pages.item(0);

のように、まだページ自分では作っていないつもりなのだが、 Documentオブジェクトのインスタンスには、はじめからある(?) ようになっているが、ちょっと気持ちわるい感じがします。

var mypage=Document.createNewPage(); myDoc.myDoc.add( mypage );

のように使える方が自分の脳内イメージに近いのだが...

使い方

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

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

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

簡単でいいけど、コード量が多くなったとき、 スクリプトファイルを分割して、共通の関数をまとめて管理する方法(モジュール化)はあるのか?
あと、ExtendScript Toolkit2 というツールがCS3には付属していて、それなりに 便利だけど、FlexBuilderのようなEclipseで動く開発ツールを出してほしいなぁ。 (もうあるのかな?)

 Twitter
follow me on Twitter
 Categories