Если сценарий изменяет монтажные области в документе Adobe Illustrator, как пользователь может выбрать определенные монтажные области? Отображать названия артбордов? Но это не поможет в случаях «Артборд 1 копия». JS обнаружит артборд через activeDocuments.artboards[index], но когда порядок на холсте хаотичен, индексы на панели артбордов неинформативны.

Мне пришла в голову идея: при запуске скрипта отображать индекс на каждом артборде в виде текста, а нумерацию в конце удалить. Я использовал аналогичную идею в скрипте MoveArtboards, где пользователь вводит диапазон номеров артбордов для перемещения.

function showAbIndex(name) {
  var doc = activeDocument;
  var tmpLayer;
  try {
    tmpLayer = doc.layers.getByName(name);
  } catch (e) {
    tmpLayer = doc.layers.add();
    tmpLayer.name = name;
  }
  for (var i = 0; i < doc.artboards.length; i++)  {
    var currAb = doc.artboards[i];
    var abWidth = currAb.artboardRect[2] - currAb.artboardRect[0];
    var abHeight = currAb.artboardRect[1] - currAb.artboardRect[3];
    var label = tmpLayer.textFrames.add();
    var labelSize = (abWidth >= abHeight) ? abHeight : abWidth;
    label.contents = i + 1;
    label.textRange.characterAttributes.size = labelSize / 2;
    label.position = [currAb.artboardRect[0], currAb.artboardRect[1]];
  }
}

Цифры будут размещены на новом слое в верхнем левом углу соответствующего артборда. Для этого используйте try...catch, чтобы проверить, существует ли слой с таким именем. Если нет, мы создадим его в блоке catch. Из особенностей текстовой метки:

  • В коде индексация начинается с 0, но в жизни мы считаем с 1, поэтому i + 1;
  • Сравните высоту и ширину монтажной области. Затем вычисляем размер шрифта относительно большей стороны.

Не забудьте удалить временный слой, когда скрипт выполнит свою основную функцию.

var layerName = 'ARTBOARD_NUMBERS';
showAbIndex(layerName);
// do something..
removeAbIndex(layerName);
function showAbIndex(name) {
  var doc = activeDocument;
  var tmpLayer;
  try {
    tmpLayer = doc.layers.getByName(name);
  } catch (e) {
    tmpLayer = doc.layers.add();
    tmpLayer.name = name;
  }
  for (var i = 0; i < doc.artboards.length; i++)  {
    var currAb = doc.artboards[i];
    var abWidth = currAb.artboardRect[2] - currAb.artboardRect[0];
    var abHeight = currAb.artboardRect[1] - currAb.artboardRect[3];
    var label = tmpLayer.textFrames.add();
    var labelSize = (abWidth >= abHeight) ? abHeight : abWidth;
    label.contents = i + 1;
    label.textRange.characterAttributes.size = labelSize / 2;
    label.position = [currAb.artboardRect[0], currAb.artboardRect[1]];
  }
}
function removeAbIndex(name) {
  try {
    var layerToRm = activeDocument.layers.getByName(name);
    layerToRm.remove();
  } catch (e) {}
}

Сообщите мне, было ли это полезно для вас. Меня можно найти: Facebook / Github / Telegram