InDesign自動化スクリプトを書く日々、下記の3つはよく使う。
textFrames、pageItems、allPageItems
その差異については、検証してみる。下記のようなドキュメントあって、全てテキストフレームで、430は404のインラインテキストフレーム、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とグループしたら、275と328とグループの3つのオブジェクトになる。
よって、ドキュメント/ページ内の全てのtextFramesをループしてなんならかの処理をしたいとき、.textFramesを使うと、一部が漏れる可能性がある。
因みに、Illustratorの場合、.textFramesは再帰的に全てのtextFramesが対象!!!
var doc = app.activeDocument; $.writeln("textFrame.length: ", doc.textFrames.length);//4