[AI CS4-CS6] Как сделать разноцветный текст в области

  • Автор темы Автор темы keramer82
  • Дата начала Дата начала

keramer82

Участник
Топикстартер
Сообщения
60
Реакции
5
Доброго всем времени суток. Помогите, пожалуйста, не могу сделать текст в области разноцветным в скрипте для иллюстратора. Это должен быть единый текст, но с разными цветами слов. На картинке, наверное понятнее будет.
Надпись.JPG

Пока сделал вот такой код, но он делает текст из точки и перекрашивает весь текстовый фрейм, а нужно перекрасить только одно слово, затем еще одно слово и т. д. Текст также будет создаваться в самом скрипте.
JavaScript:
//Функция
function main () {
//Активный документ!
var docRef = app.activeDocument;
//Цвет Registration
var RegistrationColor = docRef.swatches["[Registration]"].color;
//Цвет Cyan
var CMYKCyan = new CMYKColor();
CMYKCyan.cyan = 100;
CMYKCyan.magenta = 0;
CMYKCyan.yellow = 0;
CMYKCyan.black = 0;
//Пишем и красим
textRef = docRef.textFrames.add();
textRef.position = [0,0];
textRef.contents = "REGISTRATION ";
textRef.textRange.characterAttributes.fillColor = RegistrationColor;
textRef.contents += "CYAN ";
//Может можно обратиться к отдельным буквам?
textRef.textRange.characterAttributes.fillColor = CMYKCyan;
}
main();
 
Ну правильно, а что именно вас не устраивает?
Перекрашивается весь текстовый фрейм, а надо покрасить слово CYAN в цвет cyan, а слово Registration, должно остаться цвета registration. Нужно, чтобы каждое слово было своего цвета.
 
Я так пробовал, но не смог потом объединить в единый текстовый фрейм или я не так Вас понял. Я делал несколько текстовых фреймов.
 
Последнее редактирование:
Я так пробовал, но не смог потом объединить в единый текстовый фрейм
Не понял? Фрейм остается на месте, просто лезете в коллекцию words вашего TextItem и красите каждый элемент ее как вам надо
В референсе на странице Words есть пример как это делается
 
Последнее редактирование:
Не получается ничего...
 
Код:
textRef.words[0].fillColor = RegistrationColor;
textRef.words[1].fillColor = CMYKCyan;
Иначе на 100 постов сейчас размусолите. Ну, не понял человек, чего такого? Так быстрее отдуплит
 
  • Спасибо
Реакции: densen и keramer82
Спасибо! Странно, я пытался так написать, но видимо опечатался, и решил, что это неверно. А у Вас скопировал и все заработало! Сейчас набираю код заново, тоже все работает. Спасибо большое!
 
Это какая-то засада... Цвет Black при вот таком коде не получается сделать 100%, он преобразуется в цвет Registration. Если сделать 99%, то перекрашивается в 99% черного, если сделать 100%, то получается, почему-то Registration... Подскажите, пожалуйста, а как это можно исправить? Вообще нужно-то, что бы CYAN MAGENTA YELLOW BLACK были окрашены в цвета, какие написаны (например, CYAN - в голубой и т. д.), а остальное в должно быть в Registration, и кавычки и скобки. WHITE нужно потом перекрасить в одноименный пантон (WHITE). Никак не получается это решить. Ближе всего к нужному результату вот этот код, но только не перекрашивается BLACK в 100 черного.
JavaScript:
//Функция
function main () {
//Активный документ!
var docRef = app.activeDocument;
//Цвет Registration
var RegistrationColor = docRef.swatches["[Registration]"].color;
//Пишем и красим
textRef = docRef.textFrames.add();
textRef.position = [0,0];
textRef.contents = 'REGISTRATION \"REG\" \(333\) CYAN MAGENTA YELLOW BLACK WHITE';
textRef.textRange.characterAttributes.fillColor = RegistrationColor;
textRef.words[4].fillColor = newCMYKColor("Cyan", 100, 0, 0, 0);
textRef.words[5].fillColor = newCMYKColor("Magenta", 0, 100, 0, 0);
textRef.words[6].fillColor = newCMYKColor("Yellow", 0, 0, 100, 0);
textRef.words[7].fillColor = newCMYKColor("Black", 0, 0, 0, 100);
textRef.words[8].fillColor = newCMYKColor("White", 0, 0, 0, 0);
}
main();

function newCMYKColor(name, c, m, y, k){
    var CMYKColore = new CMYKColor();
    CMYKColore.name = name;
    CMYKColore.cyan = c;
    CMYKColore.magenta = m;
    CMYKColore.yellow = y;
    CMYKColore.black = k;
    return CMYKColore;
    }
 
Последнее редактирование:
Тогда уж, вот это нужно убрать
Код:
textRef.textRange.characterAttributes.fillColor = RegistrationColor;
и как-то так сделать
Код:
textRef.words[0].fillColor = RegistrationColor;
textRef.words[1].fillColor = RegistrationColor;
textRef.words[2].fillColor = RegistrationColor;
textRef.words[3].fillColor = RegistrationColor;
textRef.words[4].fillColor = newCMYKColor("Cyan", 100, 0, 0, 0);
textRef.words[5].fillColor = newCMYKColor("Magenta", 0, 100, 0, 0);
textRef.words[6].fillColor = newCMYKColor("Yellow", 0, 0, 100, 0);
textRef.words[7].fillColor = newCMYKColor("Black", 0, 0, 0, 100);
textRef.words[8].fillColor = newCMYKColor("White", 0, 0, 0, 0);
 
  • Спасибо
Реакции: keramer82
Так тоже уже пробовал... Вторая кавычка и скобки не перекрашиваются в Registration. Как это победить тоже не нашел.
 
если убрать скобки у 333 все красится. А, что не так со скобками - я не в теме

Код:
textRef.contents = 'REGISTRATION "REG" 333 CYAN MAGENTA YELLOW BLACK WHITE';
textRef.words[0].fillColor = RegistrationColor;
textRef.words[1].fillColor = RegistrationColor;
textRef.words[2].fillColor = RegistrationColor;
textRef.words[3].fillColor = newCMYKColor("Cyan", 100, 0, 0, 0);
textRef.words[4].fillColor = newCMYKColor("Magenta", 0, 100, 0, 0);
textRef.words[5].fillColor = newCMYKColor("Yellow", 0, 0, 100, 0);
textRef.words[6].fillColor = newCMYKColor("Black", 0, 0, 0, 100);
textRef.words[7].fillColor = newCMYKColor("White", 0, 0, 0, 0);
 
  • Спасибо
Реакции: keramer82
А скобки нужны обязательно. Вот поэтому я сделал перекраску всей надписи в Registration, тогда скобки красятся, но теперь в Black 100% не красится другая часть текста... Вот поэтому и засада... Сейчас пробую сделать какой-нибудь пантон, чтоб был 0,0,0,100, или создать цвет покрасить в него, а потом удалить из swatches. Или создать grayscale 100%, для цветоделения будет без разницы. По идее должно сработать, но чтобы это сделать постоянно натыкаюсь на другие трудности. В итоге... засада.
 
Через grayscale 100% вроде получается, по крайней мере, на цветоделении кликаю отключить черный, надпись BLACK исчезает
JavaScript:
/Функция
function main () {
//Активный документ!
var docRef = app.activeDocument;
//Цвет Registration
var RegistrationColor = docRef.swatches["[Registration]"].color;

//Цвет Черный
var BlackColor = new GrayColor();
BlackColor.gray = 100;

//Пишем и красим
textRef = docRef.textFrames.add();
textRef.position = [0,0];
textRef.contents = 'REGISTRATION \"REG\" \(333\) CYAN MAGENTA YELLOW BLACK WHITE';
textRef.textRange.characterAttributes.fillColor = RegistrationColor;
textRef.words[4].fillColor = newCMYKColor("Cyan", 100, 0, 0, 0);
textRef.words[5].fillColor = newCMYKColor("Magenta", 0, 100, 0, 0);
textRef.words[6].fillColor = newCMYKColor("Yellow", 0, 0, 100, 0);
textRef.words[7].fillColor = BlackColor;
textRef.words[8].fillColor = newCMYKColor("White", 0, 0, 0, 0);

}
main();

function newCMYKColor(name, c, m, y, k){
    var CMYKColore = new CMYKColor();
    CMYKColore.name = name;
    CMYKColore.cyan = c;
    CMYKColore.magenta = m;
    CMYKColore.yellow = y;
    CMYKColore.black = k;
    return CMYKColore;
    }
 
А скобки нужны обязательно. Вот поэтому я сделал перекраску всей надписи в Registration, тогда скобки красятся, но теперь в Black 100% не красится другая часть текста... Вот поэтому и засада... Сейчас пробую сделать какой-нибудь пантон, чтоб был 0,0,0,100, или создать цвет покрасить в него, а потом удалить из swatches. Или создать grayscale 100%, для цветоделения будет без разницы. По идее должно сработать, но чтобы это сделать постоянно натыкаюсь на другие трудности. В итоге... засада.
Ну так добавьте к textRange по одному символу до и после, потом перекрасьте
 
  • Спасибо
Реакции: keramer82