При удалении фрейма виснет InDesign Server

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

dim4an

Участник
Топикстартер
Сообщения
93
Реакции
1
Может подскажете в рамках данной темы.
Есть текстфрейм, в него помещаются другие фреймы, до тех пор пока у родительского фрейма значение overflow не станет равным true. Получается так, что в фрейм поместилось 5 фреймов, а 6 не поместился, он "ушел в осадок". Его необходимо удалить. Пытаюсь проделать это вот так
Код:
masterTextFrame.parentStory.textFrames.lastItem().remove();
но результатов ноль.
 
Сначала мы его находим в документе по скрипт лабел
Код:
var stColumTempl = getPageItemByScriptLabel(layoutDoc, "colum1");
далее дублируем и передаем в функцию для заполнения его данными, где stColumTemplDupl становится masterTextFrame
Код:
    var stColumTemplDupl = stColumTempl.duplicate();
    moveIntoMasterTextFrame(stColumTemplDupl, myObjectList);
 
Что дает вывод
Код:
app.consoleout(masterTextFrame.toString())
после определения masterTextFrame?
 
Что дает вывод
Код:
app.consoleout(masterTextFrame.toString())
после определения masterTextFrame?

в консоль вроде все правильно выводит "object TextFrame".
Возможно я изначально некорректно выразился. Хоть и результата от выполнения данной операции нет, но он все же есть. Сам процесс InDesign Server вешается намертво. Убить его можно только через таск менеджер. Может баг самого индизайна?
 
Может немного ясности принесет полный код вставки фрейма в родительский фрейм.
Код:
    var newTextFrame = masterTextFrame.insertionPoints[0].textFrames.add();
    newTextFrame.properties = frame.properties;
    if (newTextFrame.texts.length > 0) {
        newTextFrame.texts[0].remove();
    }
    frame.texts[0].duplicate(LocationOptions.AT_BEGINNING, newTextFrame.texts[0]);
    newTextFrame.textFramePreferences.properties = frame.textFramePreferences.properties;

frame - фрейм заполненный данными
 
Желательно точно найти, на каком действии IDS виснет — через лог в консоль.
Можно попробовать удалять таким образом:
Код:
masterTextFrame.parentStory.textFrames[-1].parent.remove();
 
Желательно точно найти, на каком действии IDS виснет — через лог в консоль.
Можно попробовать удалять таким образом:
Код:
masterTextFrame.parentStory.textFrames[-1].parent.remove();

предложенный вами способ, тоже вешает индизайн :(. Обычный тесктфрейм удаляется, а вот если он не поместился в фрейме, то не удаляется. Может есть какой то способ полностью очистить то, что не поместилось в фрейм?
 
Еще один вариант:
Код:
masterTextFrame.parentStory.recompose();
перед удалением фрейма.
 
у меня одного ощущение, что происходят какие-то странные манипуляции? почему бы не расставлять на полосы обычные фреймы, без инлайна? с ними работать намного проще - двигать как угодно, в частности
 
у меня одного ощущение, что происходят какие-то странные манипуляции? почему бы не расставлять на полосы обычные фреймы, без инлайна? с ними работать намного проще - двигать как угодно, в частности

Возможно вы правы. Но у меня стоит зада, создать документ, который не будет требовать вмешательства в его верстку. Инлайн фреймы выбрал потому что, это первый способ, который я увидел, и поразмыслив над ним немного, подумал что, так я смогу выполнить поставленную задачу. Ну а еще у меня опыта работы c IDS всего неделя)
 
Еще один вариант:
Код:
masterTextFrame.parentStory.recompose();
перед удалением фрейма.

увы, тоже самое. Решил пока отложить это в долгий ящик. Решил проблему следующим образом. После генерации документа, выполняю следующий код.
Код:
    for (var i = 0; i < layoutDoc.pages.length; i++) {
        var tfLength = layoutDoc.pages[i].textFrames.length;
        for (var j = 0; j < tfLength; j++) {
            var tf = layoutDoc.pages[i].textFrames[j];
            if (tf.overflows) {
                try {
                    tf.parentStory.textFrames.lastItem().remove();
                } catch (e) { }
            }
        }
    }
 
Статус
Закрыто для дальнейших ответов.