コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

039.【ID】選択対象群を位置関係を保ったままページ中央に

書いたコード

var doc = app.activeDocument;
var sel = doc.selection;

var pBounds = sel[0].parentPage.bounds; // [y1, x1, y2, x2]
var pHeight = pBounds[2] - pBounds[0];
var pWidth = pBounds[3] - pBounds[1];
var pCenter = [pWidth / 2, pHeight / 2];
var tmpGrp = app.activeWindow.activeSpread.groups.add(sel);
var gBounds = tmpGrp.geometricBounds; // [y1, x1, y2, x2]
var gHeight = gBounds[2] - gBounds[0];
var gWidth = gBounds[3] - gBounds[1];
var gCenter = [gBounds[1] + gWidth / 2, gBounds[0] + gHeight / 2];
var diff = [pCenter[0] - gCenter[0], pCenter[1] - gCenter[1]];
app.activeDocument.undo();
for (var i = 0; i < sel.length; i++) {
  sel[i].move("", [diff[0], diff[1]])
}

メモ

分からなかったところ

  • undo()

applicationにもundo()があるが、どんな動きをするものなのか分からなかった。
普通の「元に戻す」とは違うみたい。

感想

pageやpageItemにwidth/heightプロパティが欲しいです。

参考