Monday, February 25, 2008 / InDesign, Javascript

はじめてのInDesign CS3 JavaScript,ちょっとしたテクニックあれこれ

InDesign CS3 でJavaScriptを使って自動組版する場合に毎回使うちょっとしたテクニックを整理しました。

ディレクトリ内のファイルを処理する

自動組版のためにJavaScriptを使うことが多いますが、 その場合のやり方のひとつに、 データをXMLファイルで用意しておいて、 それを読みながら、組版していく、という方法があります。

そんな場合にディレクトリ内のXMLファイルをひとつづつ処理していくのは 定番の処理になるかと思います。

./data ディレクトリ以下にある xml の拡張子を持つファイルを列挙する方法。

var fld=Folder("./data");
var flist=fld.getFiles("*.xml");
for(var i=0; i<flist.length; i++){
    var f=flist[i];
    alert(f);
    // do something
}

ページを次々に追加していく方法

JavaScriptから複数のページを持ったドキュメントを生成する場合の 必須テクニック。

InDesignCS3では、JavaScriptから新規にドキュメントを作成した場合、1ページ目は既にインスタンスが存在しているようなので、既存のページを使います。
2ページ目以降は存在していないので、追加する必要があります。そこがポイントです。

var myDoc=app.documents.add();

var myPage=null;

for(var i=0; i<10; i++){
    myPage=myDoc.pages.item(index);
    if( myPage==null){
       myPage=myDoc.pages.add();
       doSomething( myPage );
    }
}

function doSomething( myPage ){
}

用紙サイズを決める便利メソッド

用紙サイズをJavaScriptから指定する場合の便利メソッド。

Documet.A4.WIDTH といった定数が使えるとおもったのですが、やり方がわからなかったのでここでは、サイズを直接指定しています。
以下の例ではA5ですが、これは、InDesignで新規ファイルを作るときに出てくるダイアログに表示される値をそのまま使っています。

var myDoc=app.documents.add();
setupDoc( myDoc );

function setupDoc( myDoc ){
    myDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
    myDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;

    with(myDoc.documentPreferences){
       //pageOrientation=PageOrientation.LANDSCAPE;
       //A5 landscape
       pageHeight=419.528;
       pageWidth=595.276;

       /*
       //A5 portlate
       pageHeight=595.276;
       pageWidth=419.528;
       */
    }
}

ページマージンを設定する便利メソッド

ページマージンの指定。 ページごとに異なるマージンを設定できます。
これなら、スプレッド(見開き)の処理も JavaScriptから制御可能です。

var myDoc=app.documents.add();
myPage=myDoc.pages.item(0);

setMargin( myPage );

function setMargin(myPage){
    with(myPage.marginPreferences){
       top=10;
       bottom=10;
       left=10;
       right=10;
    }
}

段落スタイルの新規作成と使用

スタイル名をテキストフレームに設定していく例です。

//ドキュメントインスタンスの用意
var myDoc=app.documents.add();

//スタイル名の新規作成
myDoc.paragraphStyles.add({name:"my_style"});

//テキストフレームの用意
var myPage=myDoc.pages.item(0);
var myTF=myPage.textFrames.add();

//作成しておいたスタイルのテキストフレームへの適用
var myParagraphStyle=myDoc.paragraphStyles.item("my_style");
myTF.texts.item(0).applyParagraphStyle(myParagraphStyle, true);