InDesign自動化スクリプトを書く日々、下記の3つはよく使う。

textFrames、pageItems、allPageItems

その差異については、検証してみる。下記のようなドキュメントあって、全てテキストフレームで、430404のインラインテキストフレーム、404は351のインラインテキストフレーム。


 
var doc = app.activeDocument;
$.writeln("textFrame.length: ", doc.textFrames.length);//4 -->textFrame*4
$.writeln("pageItems.length: ", doc.pageItems.length);//4 -->textFrame*4
$.writeln("allPageItems.length: ", doc.allPageItems.length);//6 -->textFrame*6

次は、275と328とグループ化する。


 
$.writeln("textFrame.length: ", doc.textFrames.length);//2
$.writeln("pageItems.length: ", doc.pageItems.length);// 3 -->textFrame*2 + group*1
$.writeln("allPageItems.length: ", doc.allPageItems.length);//7 -->textFrame*4 + inline textFrame*2 + group*1

いかがでしょうか。

***.textFrameは ***直下(1階層)のみ全textFramesとなる

***.pageItemsは ***直下(1階層)のみの(全種類の)オブジェクトとなる。

ところが、allPageItemsは、再帰的に全てのオブジェクトが対象。275と328とグループしたら、275328グループ3つのオブジェクトになる。

よって、ドキュメント/ページ内の全てのtextFramesをループしてなんならかの処理をしたいとき、.textFramesを使うと、一部が漏れる可能性がある

因みに、Illustratorの場合、.textFramesは再帰的に全てのtextFramesが対象!!!


 
var doc = app.activeDocument;
$.writeln("textFrame.length: ", doc.textFrames.length);//4