InDesignのオブジェクト内部を探る (InDesign CS〜CS4編)

InDesign CS2まではPDFによるJavaScriptリファレンスが付属していましたが、InDesign CS3からは付属しなくなってしまいました。
こうなると、InDesign CS3/CS4で(VBScript, JavaScript, AppleScript) スクリプトで制御しようと考えている人は困ってしまいます。AppleScriptの場合は用語説明が用意されており、スクリプトエディタで開けばリファレンスが表示されます。このリファレンスを参照するのも1つの方法です。また、CS2ベースのPDFに関しては以下のURLからダウンロードすることができます。

http://www.adobe.com/products/indesign/pdfs/InDesign_Scripting_Reference.pdf

リファレンスに掲載されていないメソッドやプロパティを調べたいこともあります。JavaScriptの場合、一部の機能に関しては以下のスクリプトで機能やプロパティを知ることができます。

CR = String.fromCharCode(13);
result = "";
docObj = app.activeDocument;
obj = app;
for (i in obj)
{
try {
result = result + "[" + typeof(obj[i])+"] " + i + " = "+new String(obj[i]).substr(0,360)+CR;
}catch(e){}
}
txtObj = docObj.pages[0].textFrames.add();
txtObj.visibleBounds = ["0cm","0cm","29cm","18cm"];
txtObj.contentType = ContentType.textType;
txtObj.contents = result;

このスクリプトはInDesignで新規に書類を作成した後に実行してください。指定したオブジェクトの内容がリスト表示されます。実行すると以下のような感じのテキストがテキストフレーム内に表示されます。

[object] indexGenerationOptions = [object IndexOptions]
[object] allPageItems =
[object] allGraphics =
[object] buttonPreferences = [object ButtonPreference]
[undefined] fullName = undefined
[string] name = 名称未設定-9
[boolean] visible = true
[undefined] filePath = undefined
[boolean] modified = true
[boolean] saved = false
[object] zeroPoint = 0,0
[string] label =

[〜]で囲まれている部分が対象となるものの種類を示しています。objectであれば、さらに内部にメソッドやプロパティがあるということになります。stringであれば、プロパティだと思ってよいでしょう。
見たいオブジェクトを指定するには

obj = app;

の行を変更します。例えば一番手前に表示されているドキュメントの場合は以下のようになります。

obj = app.activeDocument;

1ページ目のページオブジェクトであれば以下のようになります。

obj = app.activeDocument.pages[0];

ただ、この方法でも全てのメソッドを表示できるわけではありません。あと、CS3で追加された機能に関しては以下にあるJavaScript Tools Guideを参照するとよいでしょう。

http://www.adobe.com/devnet/bridge/pdfs/javascript_tools_guide_cs3.pdf

CS4に関しては以下のURLにあります。

http://www.adobe.com/devnet/scripting/pdfs/javascript_tools_guide_cs4.pdf

このようなfor..inを使った内部情報のチェックはInDesignだけでなく、PhotoshopやAfterEffects、一般的なブラウザやJavaScriptを使って制御できるアプリケーションすべてに有効です。InDesignのように日本語特有の機能(プロパティ)を見つけたい場合には便利でしょう。

[サンプルをダウンロード]