Найти фреймы с определённым стилем абзаца и...

Статус
Закрыто для дальнейших ответов.

MRFM

Участник
Топикстартер
Сообщения
18
Реакции
1
Всем, доброго времени суток!

Задача такая: нужно, в каталоге, присвоить стиль объекта фреймам содержащим текст определённого стиля абзаца.

Помогите пожалуйста найти решение :)

Если готовых решений в природе нет, то буду рад помощи скриптописателей (за вознаграждение).
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Проверяйте на копии документа.
Код:
var doc = app.activeDocument;
 
var psList = [];
var psID = [];
var osList = [];
var osID = [];
getStyles("paragraphStyle","psList","psID");
getStyles("objectStyle","osList","osID");
 
var w = new Window("dialog");
w.alignChildren = "left";
var g = w.add("group");
g.add("statictext{text:\"Найти абзацный стиль: \",characters:25}");
var selStyle  = g.add("dropdownlist",undefined,psList);
var g1 = w.add("group");
g1.add("statictext{text:\"Назначить объектный стиль: \",characters:25}");
var applyOStyle  = g1.add("dropdownlist",undefined,osList);
w.add("button",undefined,"OK");
 
if (w.show()!=1) exit();
 
app.findGrepPreferences = null;
app.findGrepPreferences.appliedParagraphStyle = doc.paragraphStyles.itemByID(psID[selStyle.selection.index]);
var f = doc.findGrep();
for (i=0;i<f.length;i++){
    f[i].parentStory.textContainers[0].appliedObjectStyle = doc.objectStyles.itemByID(osID[applyOStyle.selection.index]);
    }
 
function getStyles(styleType,styleList,styleID){
    var s = styleList+" = doc."+styleType+"s.everyItem().name;\n";
    s += styleID+" = doc."+styleType+"s.everyItem().id;\n";
    s += styleType+"G = doc."+styleType+"Groups;\n";
    s += "for (i=0; i<"+styleType+"G.length; i++){\n";
    s += "for (j=0; j<"+styleType+"G[i]."+styleType+"s.length; j++){\n";
    s += styleList+".push("+styleType+"G[i]."+styleType+"s[j].name + \" (\"+"+styleType+"G[i].name+\")\");\n";
    s += styleID+".push("+styleType+"G[i]."+styleType+"s[j].id);\n";
    s += "}}";
    app.doScript(s,ScriptLanguage.JAVASCRIPT);
    }
 
  • Спасибо
Реакции: MRFM

MRFM

Участник
Топикстартер
Сообщения
18
Реакции
1
Проверяйте на копии документа.
Добрый вечер!
Спасибо, что откликнулись!
В CS3 отлично отработал, а в CS6 выдал такую ошибку:
3196471.jpg

Если возможно, то можете сделать вариант и для CS6?

Жду в личку реквизиты, куда и как "сказать" спасибо :)
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Проверил в CS6, у меня всё срабатывает, и ошибок не выдаёт, как бы я ни старался. Попробуйте описать подробнее, какими стилями с какими параметрами здесь пользуетесь, а ещё лучше — приложите файл через наш файлообменник.

Не по теме:
Куда сказать "спасибо", можете найти здесь.:) Там же мои личные контакты.
 
  • Спасибо
Реакции: MRFM

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Шрифты не нужны. Какой абзацный стиль ищете, и какой объектный стиль назначаете?
 
  • Спасибо
Реакции: MRFM

MRFM

Участник
Топикстартер
Сообщения
18
Реакции
1
Стиль абзаца — стиль объекта
Название товара — Заголовок товара
Слоган — Слоган
Булиты — Булиты
Пояснения — Пояснения

Там вообще ещё каша :) и в других разделах есть ещё текстовые блоки отличные от тех, что содержатся в переданном файле.
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ошибка выдаётся, если искомый текст находится в оверсете, т.е. не в текстовом фрейме.
Есть три варианта, как поступить дальше.
Первый: избавляться от оверсетов перед запуском скрипта.
Второй: заставить скрипт определять материал (story) найденного текста, искать первый текстовый фрейм этого story и ему назначать об.стиль (в Вашем случае, в принципе, приемлемый вариант).
Третий: в случае оверсета пропускать текст, фрейм и ничего не делать.
 
  • Спасибо
Реакции: MRFM

MRFM

Участник
Топикстартер
Сообщения
18
Реакции
1
Второй вариант самый оптимальный, так как в каталоге практически нет связанных фреймов, и по сути первый фрейм стори, будет единственным :)
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Поправил код в посте №2, проверьте ещё раз.
 
  • Спасибо
Реакции: MRFM

MRFM

Участник
Топикстартер
Сообщения
18
Реакции
1
Спасибо!
Как по маслу :)
Сегодня-завтра "скажу" спасибо по вебмани :)
 
  • Спасибо
Реакции: Eugenyus
Статус
Закрыто для дальнейших ответов.