[ID CC-CC2021] Удаление структуры в большом проекте

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Здравствуйте.
Прислали каталог в InDesign на почти 1000 страниц одним файлом, задача - подготовить его к переводу.
По требованию заказчика на этом этапе нужно удалить из файла всю информацию о структуре (XML), но оставить весь контент Индизайна на месте.
В файле хранится много элементов структуры, порядка 25000 согласно данным скрипта.

Подготовил скрипт для удаления структуры (в конце поста) и запустил. В связи с тем, что часть тегов находится в заблокированном контенте, постоянно ловил вот такие ошибки:
Error String: Cannot delete elements that contain locked content, or are contained by locked content. Please unlock or check out the content and try again.
Переделал скрипт, чтобы он работал с try ... catch ..., на всякий случай разблокировал весь контент и все слои в документе.
Запустил скрипт опять, подождал порядка 5 часов и обнаружил, что большую часть элементов скрипт удалил, но около 11 тысяч осталось на месте и с повторным запуском скрипта они не удаляются.

Есть ли более простой способ взять и удалить всю информацию об XML из документа? Или это мой скрипт что-то делает не так?

JavaScript:
#targetengine "Structure"

var timeDiff = {
    setStartTime:function (){d = new Date(); time  = d.getTime();},
    getDiff:function (){d = new Date(); t = d.getTime() - time; time = d.getTime(); return t;}
};
timeDiff.setStartTime();

processDocument(app.activeDocument);

alert("Script execution time: " + timeDiff.getDiff() / 1000 + " seconds", "Script execution time");

function processDocument(doc){
    var xe = doc.xmlElements.item(0).xmlElements;
    alert(xe.length);

    var w = new Window ("palette", "Прогресс операций: " + doc.name);
    var pbar = w.add ("progressbar", undefined, 1, xe.length);
    pbar.preferredSize = [600,20];
    w.show();
    
    for (i = xe.length-1; i >= 0 ; i--){
        try {xe[i].untag(); xe[i].remove();} catch(e){}
        if (i % 100 == 0) pbar.value = xe.length-i;
        if (i % 2000 == 0) doc.save();
    }
    
    w.close();
}
 

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Рандомно останавливается с ошибкой
Error String: Cannot delete elements that contain locked content, or are contained by locked content. Please unlock or check out the content and try again.
Поэтому и пришлось перевести скрипт на цикл с try ... catch ...
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
на всякий случай разблокировал весь контент и все слои в документе
Вчера убил весь вечер и не нашел залоченного контента в документе. Тем более, его должно быть очень много, а 11000 должно быть видно невооруженным взглядом. Подозреваю, что это баг какой-то
 

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Вчера с подсказкой @Gad обнаружил, что в списке элементов структуры документа есть элементы, которые блокируют встроенную операцию Untag. Чем они отличаются от нормальных - пока не выяснил