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

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

Oleg_Sh

Топикстартер
15 лет на форуме
Сообщения
181
Реакции
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();
 
Можно ли как-то в findTextPreferences подсунуть цвет не из swatch?
1679318946344.png


Вот вам панель, реализующая соответствующие опции поиска. Попробуйте здесь задать цвет не из списка Swatches.
 
Если 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,
});
 
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 не находится.
 
При этом, если не задавать FillColor, то всё работает. От сюда вывод, что косяк где-то в передаваемом для поиска цвете.
 
Не работает. Хоть swatch, хоть color подставляю в findTextPreferences.properties FillColor, текст покрашенный в 0,100,70,0 не находится.
Немного мне не понятна логика такого поиска.
Если Вы непосредственно перед поиском создаете цвет, то им еще ничего не покрашено и стало быть найтись ничего не может.
Если текст уже покрашен в какой-то цвет, то в панели Swatches этот цвет уже существует и подставлять в поиск надо именно его.
 
Думаю принцип должен быть такой :)
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
Тогда:
JavaScript:
app.findTextPreferences.properties = {
    findWhat:"Test Text",
    fillColor: "0,100,70,0"
};
 
Тогда:
JavaScript:
app.findTextPreferences.properties = {
    findWhat:"Test Text",
    fillColor: "0,100,70,0"
};
Это не сработает, т.к. строка на входе в fillColor воспринимается как имя свотча. И если свотча с таким именем нет, то считается, что параметра поиска по цвету тоже нет. И тогда (в этом конкретном примере) поиск выдаст все вхождения текста прописанного в findWhat, а это не есть правильно.
 
Думаю принцип должен быть такой :)
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();
Правда с дробными значениями цвета "засада" :)
Но думаю тоже решаемо если надо...
Да, это выход. Конечно, костыль, но вполне себе работает. Спасибо!
 
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();


Не по теме:

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

 
Поэтому и предложила конструкцию, где в поисковый запрос цвет передается строкой. Работает и с целыми, и с дробными значениями.
Предположу, что у вас в качестве подопытного текста только два слова "Test Text".
Попробуйте использовать что-нибудь такое. Какой будет результат?
1679358256680.png
 
Предположу, что у вас в качестве подопытного текста только два слова "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
А вы не думали просто перекрасить в нужный цвет все textStyleRange, у которых fillColor не входит в список допустимых цветов? И не мучиться поиском цвета?
 
как вариант перед использованием замены цвета можно добавить все используемые цвета в сватчи.
ну а потом уже менять одни сватчи на другие в настройках поиска