【Illustrator】選択したオブジェクトをそれぞれアートボードにするスクリプト | Blue-Scre{7}n.net | よそいちのDTPメモ

トップページ » Illustrator » 【Illustrator】選択したオブジェクトをそれぞれアートボードにするスクリプト

【Illustrator】選択したオブジェクトをそれぞれアートボードにするスクリプト

公開日:2017年3月21日 最終更新日:2022年10月25日

 選択したオブジェクトをそれぞれアートボードにするスクリプトです。

 複数の図が、1つのアートボードで作られているときに使用するとスッキリします(でも最終的にInDesignに配置する場合はあまり得した気がしない。理由は後述)。

 注意すべき仕様は「マスクした画像があるオブジェクトの場合、そのオブジェクトのアートボードはマスクしていない画像の大きさになる」「アートボードの番号はレイヤーパネルでの階層順になる」の2点です。CS4ではレイヤーパネルであらかじめ順序をいじっておくしかありませんが、CS5以降であればスクリプト実行後に[アートボード]パネルで順序を入れ替えることができます。

2022.10.25追記:スクリプトのオブジェクトサイズ処理をgeometricBoundsからvisibleBoundsに変更。この変更によって、実際のオブジェクトサイズでなく見た目のサイズでアートボードが作られます。効果を使ってサイズが変わっている場合に効果的です。

スクリプト本文

//選択したオブジェクトをオブジェクトのバウンディングボックスのサイズでそれぞれアートボードに
//仕様:マスクした画像があるオブジェクトの場合、アートボードはマスクしていない画像の大きさになります
//仕様2:アートボードの番号は左上のからZ型に1、2、3...となります。
//Illustrator CS4、6、CC2015で動作確認
function sortselObj(a, b){
  var ax = a.visibleBounds[0];
  var ay = a.visibleBounds[1];
  var bx = b.visibleBounds[0];
  var by = b.visibleBounds[1];
  if (ay < by) {
    return 1;
  } else if (ay > by) {
    return -1;
  } else if (ay == by) {
    if (ax == bx) {
      return 0;
    } else if (ax > bx) {
      return 1;
    } else if (ax < bx) {
      return -1;
    }
  }
}
var objCount = app.selection.length;
for(var i=0; i < objCount; i++){
  var selObj = app.selection;
  selObj.sort(sortselObj)//並びを替える
  var x1 = selObj[i].visibleBounds[0];
  var y1 = selObj[i].visibleBounds[1];
  var x2 = selObj[i].visibleBounds[2];
  var y2 = selObj[i].visibleBounds[3];
  var objWidth = x2-x1;
  var objHeight = y2-y1;
  var newartboards = app.activeDocument.artboards.add( [x1, y1, x1+objWidth, y1+objHeight]);
};

 図はそれぞれアートボードに分かれていたほうがいいかなと思ったんですが、InDesignに「アートボードを使ったaiファイル」を配置する場合はわざわざ読み込みオプションを指定して再配置しないといけません。

 なので、1つのアートボードに図がまとめられていても、図ごとにアートボードが分けられていても、「配置オプションを指定する手間」か「グラフィックフレームの中身を移動する手間か」ということであまり変わらなかったりします。InDesignの読み込みオプションにも手を出せるスクリプト作るか…

というわけで作りました。これでマルチアートボード使用のIllustratorをInDesignに配置しているとき、ページを変更して再リンクできます。

【InDesign】ai/pdfのアートボード/ページを指定して同一ファイルに再リンクするスクリプト


タグ:


広告