InDesign_Script_如何正確取得文件內文字框數量
也許會覺得很奇怪,文字框數量,不就是textFrames.length就可以取得了嗎。正常情況是這樣沒錯。
但使用者的稿件通常不簡單。因此多個文字框被群組在一起的情況,十分常見。
如果是像下圖的狀況,以textFrame.length取得的文字框數量為1,不會是3。因為群組完後的文字框,被統一當成是群組物件。
因此如何在文件中取得文字框,答案便是先透過allPageItems物件,再逐一判斷物件類型。
var i = 0;
for( var v1=0 ; v1<inDoc.allPageItems.length ; v1++ ){
var inPageItem = inDoc.allPageItems[v1];
var objType = inPageItem.constructor.name;
alert(objType)
if( objType == "TextFrame" ){
i += 1;
}
}
alert( i );
上面程式碼中,事實上pageItems的數量總共會有4個,因為3個是文字框,1個是由2個文字框群組起來的群組物件。
constructor.name可以取得InDesign物件類型是textFrame、groupItem或其他。
上述例子還算客氣,事實上有些美編人員雖然設計取勝,但是排稿方法另人搖頭。乾脆用Illustrator或是PhotoShop排文就好了,何必浪費錢買InDesign給他用呢!(好的封面設計不一定就是排版高手,尤其在長文件的表現上)
下面就是一個巢狀群組的例子,何為巢狀群組,就是群組完的物件,又跟別物件再合成一個群組,合成的群組又跟別人群組,群到天荒地老,組到海枯石爛。最糟糕的是,就一個物件而已,不知是做稿時在打瞌睡,還是心態問題,群了又群,組了又組。就一個文字框而已,老大您是在群組啥意思!還單一物件群組按了好幾遍。您真閒!
這種情況時,由物件的length取得的數量通常是不對的,會少!
故必須先由pageItems取得所有未群組或以群組物件,在逐一判斷統計相同類型的物件有多少個。
另外有一個地方必須特別注意,allPageItems和pageItems是不同的,如果是用了pageItems來找,每個constructor.name的結果都是pageItem,就沒戲唱了。因此要用allPageItems。