[ID CC2023] findTextPreferences, как задать цвет для поиска?

Oleg_Sh

Топикстартер
15 лет на форуме
Сообщения
179
Реакции
50
Нужно изменить цвет текста.
Пробую создать новый цвет через myDoc.colors.add и подставить его в findTextPreferences.properties в fillColor. Но при создании, цвет попадает в палитру Swatches, а нужный мне текст покрашен в абстрактный цвет, которого нет в swatch. В результате текст не находится.
Можно ли как-то в findTextPreferences подсунуть цвет не из swatch?
Или лучше какой-то другой способ использовать для замены цвета?


Код:
var color = myDoc.colors.add();
color.properties = { model : ColorModel.PROCESS, space : ColorSpace.cmyk, colorValue :[0,100,70,0]}

app.findTextPreferences.properties = {
    findWhat:"Test Text",
    fillColor:color
};

app.changeTextPreferences.properties = {
    fillColor:correctColorSwatch
};

myDoc.changeText();
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
Можно ли как-то в findTextPreferences подсунуть цвет не из swatch?
1679318946344.png


Вот вам панель, реализующая соответствующие опции поиска. Попробуйте здесь задать цвет не из списка Swatches.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
Если myDoc.colors.add() это не добавление в swatches
JavaScript:
var doc = app.activeDocument;

var color = doc.colors.add({
  name: "My New Awesome Color",
  model: ColorModel.PROCESS,
  space: ColorSpace.cmyk,
  colorValue: [0, 100, 70, 0],
});

var swatch = doc.swatches.itemByName("My New Awesome Color");

var rectangle = doc.pages[0].rectangles.add(undefined, undefined, undefined, {
  geometricBounds: [0, 0, 10, 10],
  fillColor: swatch,
});
 

Oleg_Sh

Топикстартер
15 лет на форуме
Сообщения
179
Реакции
50
JavaScript:
var doc = app.activeDocument;

var color = doc.colors.add({
  name: "My New Awesome Color",
  model: ColorModel.PROCESS,
  space: ColorSpace.cmyk,
  colorValue: [0, 100, 70, 0],
});

var swatch = doc.swatches.itemByName("My New Awesome Color");

var rectangle = doc.pages[0].rectangles.add(undefined, undefined, undefined, {
  geometricBounds: [0, 0, 10, 10],
  fillColor: swatch,
});
Не работает. Хоть swatch, хоть color подставляю в findTextPreferences.properties FillColor, текст покрашенный в 0,100,70,0 не находится.
 

Oleg_Sh

Топикстартер
15 лет на форуме
Сообщения
179
Реакции
50
При этом, если не задавать FillColor, то всё работает. От сюда вывод, что косяк где-то в передаваемом для поиска цвете.
 

Masia

15 лет на форуме
Сообщения
127
Реакции
47
Не работает. Хоть swatch, хоть color подставляю в findTextPreferences.properties FillColor, текст покрашенный в 0,100,70,0 не находится.
Немного мне не понятна логика такого поиска.
Если Вы непосредственно перед поиском создаете цвет, то им еще ничего не покрашено и стало быть найтись ничего не может.
Если текст уже покрашен в какой-то цвет, то в панели Swatches этот цвет уже существует и подставлять в поиск надо именно его.
 

Drawer

Участник
Сообщения
1 754
Реакции
773
Думаю принцип должен быть такой :)
JavaScript:
var doc = app.activeDocument;
app.menuActions.item("$ID/Add All Unnamed Colors").invoke();
var colorValue = [0,100,70,0];
var colorName = String("C="+colorValue[0]+" M="+colorValue[1]+" Y="+colorValue[2]+" K="+colorValue[3]);
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.fillColor = doc.swatches.itemByName(colorName);
app.changeTextPreferences.fillColor = "correctColorSwatch";
app.changeText();
Правда с дробными значениями цвета "засада" :)
Но думаю тоже решаемо если надо...
 
  • Спасибо
Реакции: Oleg_Sh и Masia

Masia

15 лет на форуме
Сообщения
127
Реакции
47
Тогда:
JavaScript:
app.findTextPreferences.properties = {
    findWhat:"Test Text",
    fillColor: "0,100,70,0"
};
 

Oleg_Sh

Топикстартер
15 лет на форуме
Сообщения
179
Реакции
50
Тогда:
JavaScript:
app.findTextPreferences.properties = {
    findWhat:"Test Text",
    fillColor: "0,100,70,0"
};
Это не сработает, т.к. строка на входе в fillColor воспринимается как имя свотча. И если свотча с таким именем нет, то считается, что параметра поиска по цвету тоже нет. И тогда (в этом конкретном примере) поиск выдаст все вхождения текста прописанного в findWhat, а это не есть правильно.
 

Oleg_Sh

Топикстартер
15 лет на форуме
Сообщения
179
Реакции
50
Думаю принцип должен быть такой :)
JavaScript:
var doc = app.activeDocument;
app.menuActions.item("$ID/Add All Unnamed Colors").invoke();
var colorValue = [0,100,70,0];
var colorName = String("C="+colorValue[0]+" M="+colorValue[1]+" Y="+colorValue[2]+" K="+colorValue[3]);
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.fillColor = doc.swatches.itemByName(colorName);
app.changeTextPreferences.fillColor = "correctColorSwatch";
app.changeText();
Правда с дробными значениями цвета "засада" :)
Но думаю тоже решаемо если надо...
Да, это выход. Конечно, костыль, но вполне себе работает. Спасибо!
 

Masia

15 лет на форуме
Сообщения
127
Реакции
47
fillColor воспринимается как имя свотча

fillColor может быть не только свотчем:


fillColor-type.jpg


Поэтому и предложила конструкцию, где в поисковый запрос цвет передается строкой. Работает и с целыми, и с дробными значениями.

JavaScript:
var myDoc = app.activeDocument;

app.findTextPreferences.properties = {
    findWhat:"Test Text",
    fillColor:"0,100,70,0"
//~     fillColor:"0,65.8,78.9,0"
};

app.changeTextPreferences.properties = {
    fillColor:myDoc.swatches.itemByName("correctColorSwatch")
};

myDoc.changeText();


Не по теме:

Спасибо. Вылетело это из головы, очень редко пользуюсь. Обычно через свотчи все.

 

Oleg_Sh

Топикстартер
15 лет на форуме
Сообщения
179
Реакции
50
Поэтому и предложила конструкцию, где в поисковый запрос цвет передается строкой. Работает и с целыми, и с дробными значениями.
Предположу, что у вас в качестве подопытного текста только два слова "Test Text".
Попробуйте использовать что-нибудь такое. Какой будет результат?
1679358256680.png
 

Masia

15 лет на форуме
Сообщения
127
Реакции
47
Предположу, что у вас в качестве подопытного текста только два слова "Test Text".
Попробуйте использовать что-нибудь такое. Какой будет результат?
Посмотреть вложение 157394
Да, Вы правы, если во фрейме только разноцветный "Test Text" , то красилось все подряд. Экспериментировала на тексте с крашенными словами, но слова были другими.

Еще вариант предложу, но в нем надо курсор поставить в текст с искомым цветом, который идет под замену.
Не затруднит проверить?
Использовала вот такую подопытную рыбу:
multiColor--before.jpg multiColor--after.jpg


JavaScript:
var myDoc = app.activeDocument;

var targetColor = myDoc.selection[0].fillColor;
var correctColor = myDoc.swatches.itemByName("correctColorSwatch");
var correctColorName = myDoc.swatches.lastItem().name;

app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.properties = {
    findWhat: "Test Text",
    fillColor: targetColor
};
app.changeTextPreferences.properties = {
    fillColor: correctColor
};
myDoc.changeText();

if (myDoc.swatches.lastItem().name !== correctColorName) {
    myDoc.swatches.lastItem().remove("correctColorSwatch");
    }
 
  • Спасибо
Реакции: Drawer

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
А вы не думали просто перекрасить в нужный цвет все textStyleRange, у которых fillColor не входит в список допустимых цветов? И не мучиться поиском цвета?
 

bossrus

шибка умный, аднака
12 лет на форуме
Сообщения
447
Реакции
74
как вариант перед использованием замены цвета можно добавить все используемые цвета в сватчи.
ну а потом уже менять одни сватчи на другие в настройках поиска
 

Drawer

Участник
Сообщения
1 754
Реакции
773