Label script

  • Автор темы Автор темы FlintOFF
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Label script

Крутил Ваш кусок из 18-го поста и так, и эдак — нет ошибки! А по всей задаче — кроме как через select() ничего больше в голову (мою) не приходит.
 
Ответ: Label script

Вот проверил с 18 поста скрипт. Проверял когда в документе нет фрейма с нужной лейбой.
Проверил в CS3 и CS4
Привожу скрин ошибки.
Без имени-1.jpg
 
Ответ: Label script

Ага, понятно. Я через ESTK его запускал, он и не "ругался".
Определить наличие фрейма можно еще, обратившись к его ID (это уникальный номер для каждого объекта):
PHP:
 var myTF = app.activeDocument.textFrames.item("tv_111_1"); 
 try {myTFId = myTF.id; alert("есть");} 
 catch(e){alert("error");}
 
Ответ: Label script

Ага, понятно. Я через ESTK его запускал, он и не "ругался".
Определить наличие фрейма можно еще, обратившись к его ID (это уникальный номер для каждого объекта):
PHP:
 var myTF = app.activeDocument.textFrames.item("tv_111_1"); 
 try {myTFId = myTF.id; alert("есть");} 
 catch(e){alert("error");}

Спасибо Eugenyus, как раз то что нужно было. Теперь на проверку 301 фрейма уходит меньше 6 секунд. В отличии от метода с использованием .select который занимал больше 10 секунд. Да и страницы теперь на "скакают".
 
Ответ: Label script

Добрый день.
Интересная ситуация.
В CS4 скрипт полностью работает, а в CS5 обратиться к фрейму (вернее место для установки фотографии) не выходит.
PHP:
myRectangle = myDocument.rectangles.item("1_1").select();
Два дня голову ломаю, кто может подскажите в чем проблема. Читал что модель отличается между CS2 и CS3, а вот между CS4 и CS5 разницы нет и скрипт должен работать. У меня версия Индизайна 7.5, также пробовал на 7.0 - тоже не работает, а в 6.0.6 - все работает замечательно.
Заранее Вам благодарен.
 
Ответ: Label script

Теперь (в ЦС5) эти метки берутся из палитры слоев — там переименовывайте объекты и обращайтесь к ним через item().
 
Ответ: Label script

Спасибо, буду пробовать.
 
Ответ: Label script

Добрый день.
Пробовал по разному, не получается, не понимаю я модель. Так что если можно то отпишите как нужно сделать. Прошу Вас.
Я же пока сделал как написано тут. Ничего при этом в самом скрипте не переписывал.
Код:
//Для версии CS 5 делаем переименование из label в название элементов в палитре слоев
for(var i = 0; i < app.activeDocument.allPageItems.length; i++)
if(!app.activeDocument.allPageItems[i].name) app.activeDocument.allPageItems[i].name = app.activeDocument.allPageItems[i].label;
 
Ответ: Label script

Ну давайте для начала проверим, что он вообще делает, если делает вообще:
Код:
var myRes = "";
var countRenames = 0;
for(var i = 0; i < app.activeDocument.allPageItems.length; i++){
	if(!app.activeDocument.allPageItems[i].name) {
		app.activeDocument.allPageItems[i].name = app.activeDocument.allPageItems[i].label;
		myRes += app.activeDocument.allPageItems[i].name+"; ";
		countRenames++;
		}
	}
alert ("Имена даны "+countRenames+" объектам:\n"+myRes);

И вопрос для очистки совести: после прогона скриптом Вы палитру слоев открывали, и объекты там НЕ получили в качестве имен метки?
 
Ответ: Label script

Не могу понять что Вы хотите мне сказать, запустил все работает и информация выводиться. Да и код не изменился кроме счетчика и строки вывода.
Могу сказать что так у меня стало работать под CS5 запрос.
Код:
myRectangle = myDocument.rectangles.item("1_1").select();
Что и требовалось сделать.
Но все же для решения проблемы я просил написать как сделать правильно запрос под CS5 без таких ухищрений.
 
Ответ: Label script

Задача состоит в том, чтобы продолжать обращаться к объектам через item().
Теперь (в ЦС5) эти метки берутся из палитры слоев
Скрипт как раз и решает эту задачу - метки, которые раньше записывались в Script Label, он записывает объектам в качестве имен, которые можно увидеть в палитре слоев. Я, конечно, могу чего-то не знать, но по-моему, другого пути нет.
 
Ответ: Label script

Задача как раз стоит в том чтобы найти фрейм с Label "1_1" в документе. В CS4 проблем нет.
В CS5 Script Label остался, я как раз могу туда записать данные, но найти потом данный фрейм по Label я не могу. Потому и копирую с Label в Items.
Прошу подсказать как найти фрейм по Label. (Тот вариант что в гиде на CS5 не подходит)
 
Ответ: Label script

В ЦС5 явно какой то глюк с меткой. Вот к примеру такой код
If TypeName(myDoc.TextFrames(ln).Label) = "String" Then s = s & myDoc.TextFrames(ln).Lable & vbCr
возвращает ошибку на myDoc.TextFrames(ln).Lable мол нет такого свойства у объекта.
Полная чушь получается, условие на строку проходит, а считать её не может.
А вот к примеру myDoc.Links(li).Parent.Parent.Label очень даже хорошо возвращает значение.
 
Ответ: Label script

Блин очепятался, мой косяк.
Однако d.TextFrames("метка"), как и было уже подмечено в ЦС5 не работает с Script Label.
Спасибо за подсказку с именем в палитре слоёв.
 
Ответ: Label script

Блин очепятался, мой косяк.
Однако d.TextFrames("метка"), как и было уже подмечено в ЦС5 не работает с Script Label.
Спасибо за подсказку с именем в палитре слоёв.

Тоже сегодня столкнулся с подобной проблемой textFrames.item("label") под CS5.5
Со слоями долго, неудобно и некрасиво. Проблема решается так:
строкой выше пишем app.scriptPreferences.version = "6.0", после этого все операции с textFrames.item("label") работают как обычно, быстро и без ошибок (у меня несколько фреймов с одинаковыми label и я одной командой .contents=... меняю содержимое сразу во всех). После этих операций можно вернуть совместимость версий назад к 7: app.scriptPreferences.version = "7.0"

Решение взято здесь: http://forums.adobe.com/message/2728489#2728489#2728489

P.S. Может кому-то поможет. У меня чуть руки не опустились, когда я узнал, что работа по меткам перестала работать в 5.5. Просто не охота огород городить, когда можно обойтись одной быстрой командой.
 
Ответ: Label script

В продолжении темы Label Script. Может кто знает, я пока не начал разбираться, завтра...
В Label Script можно поставить не одну метку, а как бы в следующей строке еще одну и еще. Может есть быстрый и красивый способ обратиться к фреймам с одинаковой второй меткой (что то типа textFrames.item("label2"))? Видимо, нет, т.к. раз первая метка у них разная, то эти фреймы теперь вообще считаются разными по общей метке ':(' жаль. Не хочется перебирать все фреймы в цикле в поисках, долго это.
Есть какие-нибудь мысли по этому поводу?
 
Ответ: Label script

можно поставить не одну метку, а как бы в следующей строке еще одну и еще
Эксперимент.
Выделяем фрейм, в Script Label пишем метку в две строки (строки отбиваем обычным ENTER-ом). Оставляем фрейм выделенным и запускаем такой скрипт:
Код:
var myDoc = app.activeDocument;
app.scriptPreferences.version = "6.0";
var tf = myDoc.selection[0];
tf.contents = tf.label;
app.scriptPreferences.version = "7.0";
У меня текст во фрейме получился такой: первая строка из Script Label, конец абзаца (\r), принудительный разрыв строки (\n или shift-ENTER), вторая строка из Script Label.
Вывод у меня таков, что двухстрочная метка — это не две независимых метки, а всё-таки одна. Почему строки разбиваются именно так, двумя символами, мне лично непонятно, но и неинтересно, потому что практического применения меткам в две строки пока не встречал.
А у Вас они как применяются?
 
Ответ: Label script

двухстрочная метка — это не две независимых метки, а всё-таки одна

Я тоже делал такой эксперимент и пришел к такому же выводу.
Где хотел применить? Цена товара в каталоге. Один товар встречается несколько раз и цена одна. Фреймы с ценой у этого товара имеет одну и ту же метку, но разное оформление на разных страницах. Одной командой поставил новую цену textFrames.item("11").contents=10.50. Все хорошо, но некоторые ценники имеют копейки в верхнем регистре 10[SUP]50[/SUP]. Для этого я хотел использовать вторую метку и везде где вторая метка, например, "kop" я бы поднял 2 последних символа и удалил запятую.

А теперь даже не знаю как проще сделать. Внутри скрипта нельзя делать эту привязку, он должен быть универсальным и управляться, так сказать снаружи, только через метки ScriptLabel.

P.S. :) Пока все это писал, понял как делать, ура!

textFrames.item("11").contents=10.50;
textFrames.item("11\r\nkop").contents=10.50; // с \r и \n еще надо разобраться как все это писать.
А потом в цикле обработать все textFrames.item("11\r\nkop") с копейками у которых верхний регистр. И так с каждым товаром
 
Статус
Закрыто для дальнейших ответов.