Если сценарий изменяет монтажные области в документе 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