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];
}
