Вопрос или проблема
Я пытаюсь изменить цвет текстового объекта. Цвет PANTONE 185 C присутствует в образцах, и если тип объекта – CompoundPathItem, то это работает. Но когда выбран текстовый объект, он теряет цвет (то есть превращается в объект без заливки).
var doc = app.activeDocument;
var swatches = doc.swatches;
if (doc.selection.length > 0) {
var targetItem = doc.selection[0];
if (targetItem.typename == "PathItem" || targetItem.typename == "CompoundPathItem") {
var colorFound = false;
for (var i = 0; i < swatches.length; i++) {
if (swatches[i].name == "PANTONE 185 C") {
alert("PANTONE 185 C");
targetItem.fillColor = swatches[i].color;
colorFound = true;
break;
}
}
if (!colorFound) {
alert("PANTONE 185 C не найден в образцах");
}
} else {
alert("применить цвет заливки");
var textRange = targetItem.textRange;
applyFillColor(textRange, swatches[i].color);
}
} else {
alert("выберите объект");
}
function applyFillColor(textRange, color) {
for (var i = 0; i < textRange.characters.length; i++) {
textRange.characters[i].fillColor = color;
}
}
Ответ или решение
Для применения цвета заливки к текстовому объекту в Adobe Illustrator через скрипт JavaScript, необходимо учитывать несколько особенностей. Ваша задача заключается в том, чтобы изменить цвет текста на PANTONE 185 C, и это можно сделать, используя правильный подход к текстовым объектам, так как они имеют свои особенности в управлении цветом.
Вот полный код, который вы можете использовать для достижения вашей цели:
var doc = app.activeDocument;
var swatches = doc.swatches;
if (doc.selection.length > 0) {
var targetItem = doc.selection[0];
if (targetItem.typename == "PathItem" || targetItem.typename == "CompoundPathItem") {
var colorFound = false;
for (var i = 0; i < swatches.length; i++) {
if (swatches[i].name == "PANTONE 185 C") {
targetItem.fillColor = swatches[i].color;
colorFound = true;
break;
}
}
if (!colorFound) {
alert("PANTONE 185 C не найден в палитре");
}
} else if (targetItem.typename == "TextFrame") {
alert("Применяем цвет заливки к тексту");
var textRange = targetItem.textRange;
applyFillColor(textRange, swatches);
} else {
alert("Выбрано не корректное название объекта");
}
} else {
alert("Пожалуйста, выберите объект");
}
function applyFillColor(textRange, swatches) {
var colorFound = false;
for (var j = 0; j < swatches.length; j++) {
if (swatches[j].name == "PANTONE 185 C") {
for (var i = 0; i < textRange.characters.length; i++) {
textRange.characters[i].fillColor = swatches[j].color;
}
colorFound = true;
break;
}
}
if (!colorFound) {
alert("PANTONE 185 C не найден в палитре для текста");
}
}
Объяснение кода:
-
Проверка выбора: Код начинает с проверки, есть ли выбранные объекты в документе. Если нет, выводится сообщение об этом.
-
Работа с объектами: Затем мы проверяем тип выбранного объекта:
- Если это
PathItem
илиCompoundPathItem
, мы ищем и применяем цвет заливки. - Если это
TextFrame
, то мы вызываем функциюapplyFillColor
, чтобы изменить цвет текста.
- Если это
-
Функция applyFillColor: Эта функция перебирает каждую букву в текстовом объекте и применяет к ней нужный цвет. При этом снова ищем цвет PANTONE 185 C в палитре.
-
Сообщения об ошибках: Если нужный цвет не найден, выводится соответствующее уведомление.
Таким образом, данный код позволяет корректно работать с текстовыми объектами в Illustrator и изменять их цвет заливки на заданный PANTONE цвет. Если будут возникать дополнительные вопросы или трудности, не стесняйтесь обращаться за помощью.