создание объектного стиля скриптом

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

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
при открытии каждого клиентского документа я проделываю следующую операцию:

  1. запускаю скрипт предварительного препресса (ну там блиды выставить, цвета лишние убить и прочие мелочи)
  2. добавляю на страницу некий боксик из библиотеки, для того, чтобы добавился объектный стиль в стили документа
  3. удаляю этот боксик.

и очень-очень хотелось бы пункты 2-3 убрать из цепочки. соответственно — мне нужно сделать добавление этого стиля в документ без вставки-удаления (дописать в скрипт из п.1)

ну и в качестве бонуса наверно предварительно стоит один раз получить в файл все параметры объектного стиля того самого боксика


Не по теме:
и таки да. поиском пользовался, но ничего не нашел :(


заранее спасибо :)
 
Ответ: создание объектного стиля скриптом

Поиском тут и искать-то нечего, всё стандартно:
Код:
app.activeDocument.objectStyles.add({name:"Стиль что надо",fillColor:"...",... и т.д.});
А дальше открывать объектную модель, искать свойства объектного стиля - и вперёд.
 
Ответ: создание объектного стиля скриптом

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

о! кстати! про это я сразу не подумал — а команда на добавление текстового стиля ...nt.textStyles.add... и ...nt.paragraphStyles.add...?
 
Ответ: создание объектного стиля скриптом

Тут есть скрипт, который можно доправить таким образом, чтобы он "достал" Вам свойства нужного объектного стиля. Дальше эта информация приводится вручную к такому формату:
{имя_свойства: параметр, имя_свойства: параметр, ...}
и загоняется в текстовый файл.

Дальше в скрипте читаем из файла строку:
Код:
var myFile = File(app.activeScript.path+"/имя_файла.ini");
myFile.open("r");
var myObjStyleProp = myFile.readln();
myFile.close();
после чего создаём стиль и даём ему эти свойства из файла:
Код:
var myObjStyle = myDoc.objectStyles.add();
var myString ="myObjStyle.properties = " + myObjStyleProp;
app.doScript(myString);
 
Ответ: создание объектного стиля скриптом

Тут есть скрипт, который можно доправить таким образом, чтобы он "достал" Вам свойства нужного объектного стиля

вместо
var mySelection = app.selection[0];
поставил ему
var mySelection = app.objectStyles[x];
но тут меня ждал облом.
нулевой стиль — отсутствует
первый — [Basic Graphics Frame]
второй — [Basic Text Frame]
третий — [Basic Grid]
четвертый, пятый, . и так далее — отсутствует.

но даже если бы я таки поймал нужный объектный стиль — то данные, которые выдает этот скрипт явно не то, что нужно. как минимум — мало
 

Вложения

Ответ: создание объектного стиля скриптом

А если
Код:
var mySelection = app.[B]activeDocument[/B].objectStyles[x];
 
Ответ: создание объектного стиля скриптом

воистину так! нашел нужный стиль, и выдал те-же параметры, что прицеплены к предыдущему посту
в общем:
даже если бы я таки поймал нужный объектный стиль — то данные, которые выдает этот скрипт явно не то, что нужно. как минимум — мало

пойду копаться в полном синтаксисе objectStyles.add. если найду, конечно :)
заодно посмотрю на characterStyles.add и paragraphStyles.add, если таковые существуют :)
 
Ответ: создание объектного стиля скриптом

если найду, конечно
В смысле?
В смысле.jpg
если таковые существуют
Там же. CharacterStyle и ParagraphStyle. В алфавитном порядке идут.
 
  • Спасибо
Реакции: bossrus
Ответ: создание объектного стиля скриптом

а что это за "object model viewer"?



а есть еще вариант просто автоматом добавлять в верстку объект из библиотеки, и тут-же его убивать. будет то-же самое, но без геморроя :)
 
Ответ: создание объектного стиля скриптом

а что это за "object model viewer"?
F1 ))


автоматом добавлять в верстку объект из библиотеки, и тут-же его убивать
Как-то так:
Код:
var myLib = app.libraries.item("Library.indl");
myObj = myLib.assets.itemByName("An_Object_With_ObjStyle");
myObj.placeAsset(app.activeDocument);
app.activeDocument.pageItems[-1].remove();
В последней строке внимательно: удаляется последний по списку объект в документе — тот, что был только что добавлен из библиотеки, и это, в принципе, логично, что у него последний номер. И у меня так сработало. Но я где-то читал, что то ли в ранних версиях, то ли как-то где-то ещё, но у людей объект, помещенный из библиотеки, занимает первое место в массиве и получает индекс 0 (ноль), хотя могу и ошибаться. Тут просто проверьте, как у Вас сработает.
 
Ответ: создание объектного стиля скриптом

placeAsset же возвращает помещенные объекты, зачем гадать
 
Ответ: создание объектного стиля скриптом

в пустом документе — работает идеально. стили появляются, объект — вовремя удаляется
в новом созданном документе с набросанными картинками — тоже работает.
круть.
но!
на готовом макете — элемент из библиотеки добавляется, ошибок не выдает... и начинаются странности:
иногда удаляются дизайнерские элементы на странице, а иногда что именно удаляется — непонятно. визуально ничего не меняется...
нулевой объект — всегда клиентский и никогда не из библиотеки.

картинка повторяется в разных клиентских в файлах из разных индизов (но пробы проводились в 5.5). с чем связано такое поведение — пока непонятно.

а есть возможность вставлять объект из библиотеки по координатам?
тогда его и удалять не обязательно. просто будет висеть на полях или даже за полями. никто и не узнает :D

ща еще попробую вывести номер объекта в консоль. посмотрим какой ему присваивается

placeAsset же возвращает помещенные объекты, зачем гадать


а поподробнее можно?



added later:——————————————————————————

ща еще попробую вывести номер объекта в консоль. посмотрим какой ему присваивается
переоценил свои силы. не получилось :))))
 
Ответ: создание объектного стиля скриптом

метод placeAsset возвращает помещенные объекты. вот так можно написать, чтоб их сразу удалить

Код:
myObj.placeAsset(app.activeDocument).everyItem().remove()
 
Ответ: создание объектного стиля скриптом

а ну да, точно, извиняюсь, там же просто массив. ну тогда так

Код:
var placedItems=myObj.placeAsset(app.activeDocument);
if(placedItems) for(var i=0;i<placedItems.length;i++) placedItems[i].remove();
 
Ответ: создание объектного стиля скриптом

Ну и еще вариант на закуску - с текстовым фреймом. Так совсем надёжно будет:
Код:
var myLib = app.libraries.item("Library.indl");
myObj = myLib.assets.itemByName("An_Object_With_ObjStyle");
var myTF = app.activeDocument.textFrames.add({geometricBounds: app.activeDocument.pages[0].bounds});
myObj.placeAsset(myTF.texts[0]);
myTF.remove();
 
  • Спасибо
Реакции: bossrus
Ответ: создание объектного стиля скриптом

огромное всем спасибо!
заработало! экономия минимум еще одного получаса за рабочий день достигнута :D
 
Статус
Закрыто для дальнейших ответов.