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