[ID CS4-CS6] Скрипт отделения объектов страницы-шаблона

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

densen

Топикстартер
20 лет на форуме
Сообщения
811
Реакции
726
Есть скрипт override_selection 0.3, который я чуть упростил под свои задачи, но мне не хватает знаний довести его до нужного мне идеала.
Имею бюджет 400 рублей.

Вот этот код выполняет отделение выделенных (selected) объектов страницы-шаблона на всех страницах, к которым применен этот шаблон.
JavaScript:
with (app.activeDocument) {
    for (var i = 0; i < pages.length; i++) {
    if (pages[i].appliedMaster === app.layoutWindows[0].activeSpread) {
        var my_masterPageItem = pages[i].masterPageItems;
        for (var ii = my_masterPageItem.length; ii >= 0; ii--) {
            for (var iii = 0; iii < selection.length; iii++) {
                if (my_masterPageItem[ii] === selection[iii]) {
                    my_masterPageItem[ii].override(pages[i]);
    }}}}}}

Мне нужно, чтобы отделение двух объектов мастер-страницы на всех страницах, к которым применен данных шаблон, происходило без необходимости их выделять. Полагаю, что "опознать" их как нужные объекты можно по Script Label или по Object ID - тут не мне решать, как будет удобнее и проще.
Осложняется это тем, что объектам присвоены гиперссылки, и после отсоединения от шаблона порядок следования гиперссылок в панели Hyperlinks должен быть последовательным и соответствовать порядку следования страниц (как на скриншоте). Вышеприведенный скрипт делает именно так. Очень важно не нарушить эту особенность.

Hyperlinks.png


Скрипт и файл idml в архиве.
Прошу не отказать в помощи! 'alil'
 

Вложения

Последнее редактирование:
если
Очень важно не нарушить эту особенность.
и
Вышеприведенный скрипт делает именно так.
то
можно по Script Label
выделить и в цикле отвязать...
Это нужно?
JavaScript:
with (app.activeDocument) {
/*     for (var i = 0; i < pages.length; i++) {
       
    } */
for (var idx = 0; idx < document.allPageItems.length; idx++)
  {
    var pageItem = document.allPageItems[idx];
    if (pageItem.label == "sel")
    {
      pageItem.select();
    }
 
    for (var i = 0; i < pages.length; i++) {
    if (pages[i].appliedMaster === app.layoutWindows[0].activeSpread) {
        var my_masterPageItem = pages[i].masterPageItems;
        for (var ii = my_masterPageItem.length; ii >= 0; ii--) {
            for (var iii = 0; iii < selection.length; iii++) {
                if (my_masterPageItem[ii] === selection[iii]) {
                    my_masterPageItem[ii].override(pages[i]);
    }}}}}}}
Можно и без выделения... быстрее будет. В массив и перебрать массив без выделения объектов, отвязать их...
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: densen
Можно и без выделения... быстрее будет. В массив и перебрать массив без выделения объектов, отвязать их...
Через Script label решил, значит... Отвязывается без выделения, но порядок нарушается. В списке ссылок сначала идут все ссылки, расположенные на левых страницах, а потом на правых, а нужно, чтобы по порядку следования страниц. И перебор, конечно, долгий по всему документу. :(
 
В списке ссылок сначала идут все ссылки, расположенные на левых страницах, а потом на правых
а так?
JavaScript:
with (app.activeDocument) {
/*     for (var i = 0; i < pages.length; i++) {
       
    } */
app.select(NothingEnum.NOTHING);
for (var idx = 0; idx < document.allPageItems.length; idx++)
  {
    var pageItem = document.allPageItems[idx];
    if (pageItem.label == "sel")
    {
      pageItem.select(SelectionOptions.ADD_TO);
    }
  }
    for (var i = 0; i < pages.length; i++) {
    if (pages[i].appliedMaster === app.layoutWindows[0].activeSpread) {
        var my_masterPageItem = pages[i].masterPageItems;
        for (var ii = my_masterPageItem.length; ii >= 0; ii--) {
            for (var iii = 0; iii < selection.length; iii++) {
                if (my_masterPageItem[ii] === selection[iii]) {
                    my_masterPageItem[ii].override(pages[i]);
    }}}}}}
 
  • Спасибо
Реакции: densen
нет кнопки поддержать форум?