022.【ID】ページの外にあるオブジェクトを削除
書いたコード
// 定規の開始位置がスプレッドの場合限定 var myDoc = app.activeDocument; var mySprds = app.activeDocument.spreads; for (var i = 0; i < mySprds.length; i++) { var mySprdBound = getSprdBounds(mySprds[i]); var myObjs = mySprds[i].pageItems; var myObjsLen = myObjs.length - 1; for (var j = myObjsLen; j >= 0; j--) { if (myObjs[j].geometricBounds[0] > mySprdBound[2]) { myObjs[j].remove(); continue; } if (myObjs[j].geometricBounds[2] < mySprdBound[0]) { myObjs[j].remove(); continue; } if (myObjs[j].geometricBounds[1] > mySprdBound[3]) { myObjs[j].remove(); continue; } if (myObjs[j].geometricBounds[3] < mySprdBound[1]) { myObjs[j].remove(); continue; } } } // スプレッドの座標取得 function getSprdBounds(tgtSprd) { var tgtSprdBounds = [0, 0, 0, 0]; for (var j = 0; j < tgtSprd.pages.length; j++) { if (tgtSprd.pages[j].bounds[0] < tgtSprdBounds[0]) { tgtSprdBounds[0] = tgtSprd.pages[j].bounds[0] } if (tgtSprd.pages[j].bounds[1] < tgtSprdBounds[1]) { tgtSprdBounds[1] = tgtSprd.pages[j].bounds[1] } if (tgtSprd.pages[j].bounds[2] > tgtSprdBounds[2]) { tgtSprdBounds[2] = tgtSprd.pages[j].bounds[2] } if (tgtSprd.pages[j].bounds[3] > tgtSprdBounds[3]) { tgtSprdBounds[3] = tgtSprd.pages[j].bounds[3] } } return tgtSprdBounds; }
メモ
分かったこと
pageItemについて、
ページ上にある→parentはpage
完全にペーストボードにある→parentはspread
という思い込みがあったのだけどそんなことはなかった。
分からなかったこと
スプレッドとマスタースプレッド両方を一度に処理しようとして、
var mySprds = app.activeDocument.spreads.everyItem(); var myMasterSprds = myDoc.masterSpreads.everyItem(); mySprds = mySprds.concat(myMasterSprds)
としたがうまくいかなかった。
.everyItem()でコレクションオブジェクトを配列にできると思ったのだけど。
積み残し
- マスターのページアイテムにも対応
- 定規の開始位置がページの場合にも対応
- べたべたな書き方をしてしまったのできれいにしたい