Illustratorのアートボードをオブジェクト全体に合わせるような機能、時々便利です。
使うシーン:ページ毎(余白を除く)を画像化;商品別でカセット化したInDesignファイルを台紙に配置、等。
var doc = app.activeDocument; var oldRulerOrigin = doc.viewPreferences.rulerOrigin; doc.viewPreferences.rulerOrigin = RulerOrigin.PAGE_ORIGIN; // var pages = doc.pages; var len = pages.length; for (var i = 0; i < len; i++) { var page = pages[i]; var bounds = getBounds(page);//仮に設定されたのはmmの単位とする。 var minX = bounds[0]; var maxX = bounds[1]; var minY = bounds[2]; var maxY = bounds[3]; // $.writeln(bounds); page.reframe( CoordinateSpaces.INNER_COORDINATES, // [[x1, y1], [x2, y2]]: 現ページ現在の原点からの相対座標。 // 単位はpoint。mmから変換する。 [ [UnitValue(minX, 'mm').as('pt'), UnitValue(minY, 'mm').as('pt')], [UnitValue(maxX, 'mm').as('pt'), UnitValue(maxY, 'mm').as('pt')] ] ); } // 元のルーラーの原点に戻す doc.viewPreferences.rulerOrigin = oldRulerOrigin; // function getBounds(page) { var minX, minY, maxX, maxY; var items = page.pageItems; var len = items.length; for (var i = 0; i < len; i++) { var item = items[i]; //visibleBounds: 線幅を含む(線の外側の座標) if (i === 0) { minX = item.visibleBounds[1]; minY = item.visibleBounds[0]; maxX = item.visibleBounds[3]; maxY = item.visibleBounds[2]; } else { var bounds = item.visibleBounds; if (bounds[1] < minX) minX = bounds[1]; if (bounds[0] < minY) minY = bounds[0]; if (bounds[3] > maxX) maxX = bounds[3]; if (bounds[2] > maxY) maxY = bounds[2]; } } return [minX, maxX, minY, maxY]; }