Adobe Illustrator CS5〜CC編 アートボード単位で座標を書き出す

今回はドキュメント内にある図形やテキスト、画像の座標をテキストファイルに書き出すスクリプトです。

IllustratorはCS4以降は複数のアートボードを扱うことができます。ただし、スクリプトで原点座標を設定できるようになるのはCS5からです。このため、今回のスクリプトはCS5以降が対象となっています。

Illustrator CS5以降では、ドキュメント単位かアートボード単位か、どちらかの座標を基準にして図形の座標を求めることができます。以下のスクリプトは(アクティブな)アートボード単位になっています。

// ドキュメント内にある座標を書き出す
function writeCoords(saveObj){
var pItems = activeDocument.pageItems;
for(var i=0; i<pItems.length; i++){
var rect = pItems[i].geometricBounds;
var x1 = rect[0];
var y1 = rect[3];
var x2 = rect[2];
var y2 = rect[1];
saveObj.writeln("("+x1+","+y1+")-("+x2+","+y2+")");
}
}
(function (){
var f = File.saveDialog("保存ファイル名を指定してください");
if (!f){ return; }
var flag = f.open("w");
if (!flag){ return; }
app.coordinateSystem = CoordinateSystem.ARTBOARDCOORDINATESYSTEM;
//app.coordinateSystem = CoordinateSystem.DOCUMENTCOORDINATESYSTEM;
//activeDocument.artboards.setActiveArtboardIndex(2);
writeCoords(f);
f.close();
})();
アートボード単位でなく、ドキュメント単位にするには、以下のように書き換えます。

app.coordinateSystem = CoordinateSystem.ARTBOARDCOORDINATESYSTEM;
//app.coordinateSystem = CoordinateSystem.DOCUMENTCOORDINATESYSTEM;
//activeDocument.artboards.setActiveArtboardIndex(2);



//app.coordinateSystem = CoordinateSystem.ARTBOARDCOORDINATESYSTEM;
app.coordinateSystem = CoordinateSystem.DOCUMENTCOORDINATESYSTEM;
//activeDocument.artboards.setActiveArtboardIndex(2);


複数のアートボードがある場合、それぞれのアートボード(の左上)を原点にした座標で書き出したいことがあります(実際にそういう仕事がありました)。 このような場合は、以下のスクリプトを使用します。アートボードごとに座標をテキストファイルに書き出してくれます。

// ドキュメント内にある座標をアートボード単位の座標で書き出す
function writeCoords(saveObj){
var pItems = activeDocument.pageItems;
for(var i=0; i<pItems.length; i++){
var rect = pItems[i].geometricBounds;
var x1 = rect[0];
var y1 = rect[3];
var x2 = rect[2];
var y2 = rect[1];
saveObj.writeln("("+x1+","+y1+")-("+x2+","+y2+")");
}
}
(function (){
var f = File.saveDialog("保存ファイル名を指定してください");
if (!f){ return; }
var flag = f.open("w");
if (!flag){ return; }
app.coordinateSystem = CoordinateSystem.DOCUMENTCOORDINATESYSTEM;
for(var i=0; i<activeDocument.artboards.length; i++){
var aName = activeDocument.artboards[i].name;
f.writeln("アートボード番号:"+(i+1)+" / 名称:"+aName);
activeDocument.artboards.setActiveArtboardIndex(i);
writeCoords(f);
f.writeln("-------------------------");
}
f.close();
})();

[サンプルをダウンロード]