ドキュメントのスプレッドやページに配置されている、形状をもったオブジェクトには以下のようなものがあります。

 

 

 

これらのオブジェクトはドキュメント上でPageItemオブジェクトとして集約されています。

 

選択されているオブジェクト(参照:選択されているオブジェクトを取得する)を扱う場合を除き、未知の状態からこれらのオブジェクトにアクセスする場合、まず、ドキュメントやページなどにあるPageItemをすべて取得(allPageItems:後述)し、そこから目的のオブジェクトを見つけ出すことになります。

 

例えばドキュメント内にあるすべてのテキストフレームを取得する場合は、以下のようになります。

var pgItems= app.activeDocument.allPageItems; //ドキュメント内のすべてのページアイテム
if (pgItems.length !== 0) {
    var cnt; //カウンタ
    var targetObjs=[]; //オブジェクト収納配列
    //PageItemの数だけ繰り返し、テキストフレームだけを配列に加える
    for (cnt=0; cnt <pgItems.length; cnt++) {
        if ( pgItems[ cnt ].constructor.name=='TextFrame' ) {
            targetObjs.push(pgItems[ cnt ]);
        }
    }
}
$.writeln (targetObjs.length); //ドキュメント内にあるテキストフレームの数

この例ではテキストフレームを抽出する際に、「constructorのnameプロパティがTextFrameか」という判定を行っていますが、これを「Rectangle」や「GraphicLine」に変更すれば、それに相当するオブジェクトを抽出することができます(参照:オブジェクトの種類を取得する)。

 

もっとも、ドキュメントやページにあるすべてのテキストフレームを取得する目的であれば、それぞれのtextFramesプロパティから取得できます。

var txfObjsD= app.activeDocument.textFrames; //アクティブドキュメント内にあるテキストフレーム
var txfObjsP= app.activeWindow.activePage.textFrames; //アクティブページ内にあるテキストフレーム

 

allPageItemsはコンテナオブジェクト(上の例ではアクティブドキュメント)にあるすべてのPageItemをさし、配列として取得できます。以下のようにコンテナオブジェクトを変更すれば、検索範囲を絞った取得も可能です。

//アクティブページ内にあるすべてのpageItem
var pgItems= app.activeWindow.activePage.allPageItems; var num= pgItems.length; $.writeln (num);

 

なお、Rectangleオブジェクトに読み込まれた配置画像は、allPageItems>Rectangle...という方法でアクセスできますが、配置画像の場合、allPageItemsとは別にGraphicsオブジェクトとして集約されているので、そちらからアクセスする方法が一般的です(参照:Graphicオブジェクトの取得)。

 

 

Joomla templates by a4joomla