[ID CC-CC2022] Скопировать содержимое всех страниц в другую публикацию

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

aleksasha

Топикстартер
15 лет на форуме
Сообщения
316
Реакции
5
Подскажите, может уже есть готовый скрипт для следующего.
Есть две открытые публикации с одинаковыми размерами и количеством страниц.
Нужно скопировать содержимое всех страниц (без пастборда) активной публикации в другую.
 
Последнее редактирование:
Есть две открытые публикации с одинаковыми размерами и количеством страниц.
Нужно скопировать содержимое всех страниц без пастборда активной публикации в другую.
Стандартными средствами через Move Pages в другой документ не подходит?
Не до конца ясна суть задачи. Куда копируем страницы пустые или там есть контент, а копируемый контент нужно туда добавить? Или просто заменить страницы? Или добавить страницы к уже существующим?
 
А чем родной move pages насолил? Или drag&drop с палитры pages?

Чтобы убрать все объекты c pasteboard, насколько помню, достаточно сделать idml
 
а просто перетащить все страницы в ту, другую, не подходит?
 
Вторая публикация - не пустая, конечно. Это настроенный, вылизанный темплейт. Донор - сырой файл заказчика.
Смотря что за содержимое. Если названия стилей совпадают, применятся стили темплейта, если не совпадают — добавятся и придется их переназначать. Далее есть ли там гиперлинки, букмарки и всякое такое. Файлики глянуть бы.
 
вылизанный темплейт. Донор - сырой файл заказчика
Что то мне подсказывает, что не подойдет черкесское седло корове...
Ни каким скриптом тут вопрос не решить

2020-10-13_23-59-48.png
 
Последнее редактирование:
Смотря что за содержимое. Если названия стилей совпадают, применятся стили темплейта, если не совпадают — добавятся и придется их переназначать. Далее есть ли там гиперлинки, букмарки и всякое такое. Файлики глянуть бы.
Про стили речь не идет. Просто может кто уже писал скрипт Copy/Paste in Place для всех страниц? Вручную все работает чудесно. Выделяю все элементы первого разворота и вставляю на первый разворот второй открытой публикации и так со всеми разворотами. Я именно об этом.
 
Последнее редактирование:
Про стили речь не идет. Просто может кто уже писал скрипт Copy/Paste in Place для всех страниц?
Если речь только про стили, проверьте, чтобы у соответствующих стилей в доноре и темплейте были одинаковые названия и просто копируйте контент, или через Move Pages — к новому контенту применятся стили темплейта. Никакие скрипты для этого не нужны.
 
  • Спасибо
Реакции: aleksasha
Если речь только про стили, проверьте, чтобы у соответствующих стилей в доноре и темплейте были одинаковые названия и просто копируйте контент, или через Move Pages — к новому контенту применятся стили темплейта. Никакие скрипты для этого не нужны.
Это слишком очевидно. :) В темплейте уже нужным разделам назначены мастер страницы. Всего 200 разворотов. Вручную всё можно сделать - переназначить мастера. Но я все же про скрипт, который копирует и вставляет в то же самое место, но в соседнюю публикацию.
 
В темплейте уже нужным разделам назначены мастер страницы.
Вооот, значит дело уже не только в стилях, но и в назначенных мастер-страницах, а потом окажется, что у вас контент на 3-х разных слоях лежит и копировать нужно послойно, а потом окажется, что часть контента еще и locked.... Потому и хорошо бы файлики прикладывать, т.к. нюансов может быть много. )
 
Вооот, значит дело уже не только в стилях, но и в назначенных мастер-страницах, а потом окажется, что у вас контент на 3-х разных слоях лежит и копировать нужно послойно, а потом окажется, что часть контента еще и locked.... Потому и хорошо бы файлики прикладывать, т.к. нюансов может быть много. )
Да без раницы стили и мастер страницы. Я про инструмент спросил. Может уже написан скрипт копирования/вставки.
 
Сам начал писать простой скрипт. Правда на VBA. И столкнулся с такой проблемой при вставке содержимого буфера.
1628680626531.png

Вручную повторил работу скрипта и понял, что это глюк Индеза. При попытке вставить содержимое буфера команда Paste не активна. Но если переключиться на окно донора и назад в целевой документ, команда по волшебству уже активна.
Если кто сталкивался, прокомментируйте, плз.
 
Да без раницы стили и мастер страницы. Я про инструмент спросил. Может уже написан скрипт копирования/вставки.
Ctrl+C и Ctrl+Shift+V. Остальное — крайне индивидуальная специфическая задача. Вам, видимо, нужно копипастить в промышленных объемах, т.к. 200 разворотов скопипастить вручную от силы минут 15 )
 
JavaScript:
var doc = app.documents[0];
var doc2 = app.documents[1];
for (i = 0; i < doc.pages.length; i++){
    for (j = 0; j < doc.pages[i].pageItems.length; j++){
        doc.pages[i].pageItems[j].duplicate(doc2.pages[i]);
        }
    }
Napilnik.jpg
 
У меня есть немного странное, но работающее решение.
Пригодится, если нужно копировать не все подряд, а конкретные страницы одного документа в конкретные страницы другого.
1) Открываете документ-источник.
2) Открываете новый документ, в который надо вставить содержимое определенных страниц.
В этом документе на полях создаете таблицу вида:
| 2 | 4 |
| 3 | 6 |
Первая колонка – номер страницы нового документа, вторая – номер страницы документа-источника, с которого нужно взять содержимое.
3) Выделяете таблицу, запускаете скрипт.
Скрипт использует duplicate(), а не app.copy().
Текстовые цепочки при этом, к сожалению, разделятся на отдельные фреймы.

JavaScript:
    if (app.documents.length < 2) {
        exitScript("Для работы нам нужно два документа");
    }

    if (app.selection.length != 1 || app.selection[0].tables.length == 0) {
        exitScript("Выберите один фрейм с исходной таблицей и попробуйте ещё раз.");
    }

    app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;

    var srsDoc = app.documents.itemByName(app.documents[1].name);
    var newDoc = app.documents.itemByName(app.documents[0].name);

    if (!confirm("!!!\r" + "Copy from: " + srsDoc.name + "\r" + "Paste to: " + newDoc.name + "\r" + "...continue?")) {
        exit();
    }

    // Чистим таблицу
    var myStory = newDoc.selection[0].parentStory;
    doGrep("(^\\d+)(.*)", "$1", myStory);
    doGrep("(^\\D+.+)", "", myStory);

    // Собираем данные
    var dataTable = app.selection[0].tables[0];
    var data = [];
    for (i = 0, iLen = dataTable.rows.length; i < iLen; i++) {
        
        var myRow = dataTable.rows[i];
        var newPageNum = myRow.cells[0].contents;
        var srsPageNum = myRow.cells[1].contents;
        
        if (newPageNum.length == 0 || srsPageNum.length == 0) { continue }

        data.push([newPageNum,srsPageNum]);

    }

    // Копируем и вставляем:
    for (i = 0, dLen = data.length; i < dLen; i++) {
        
        try {
            var tmp = data[i];
            var srsPage = srsDoc.pages.itemByName(tmp[1].toString());
            var newPage = newDoc.pages.itemByName(tmp[0].toString());
            
            for (f = srsPage.allPageItems.length-1; f >=0; f--) {
                var frame = srsPage.allPageItems[f];
                // if (frame.locked === true) { frame.locked = false }
                if (frame.parent.constructor.name === "Rectangle" ) { continue }
                frame.duplicate(newPage);
            }
        } catch (error) {
            continue;
        }

    }

    alert("Done!");

    function exitScript(mess) {
        alert(mess);
        exit();
    }

    function doGrep(myFindWhat, myChangeTo) {
        app.findGrepPreferences = app.changeGrepPreferences = null;
        app.findGrepPreferences.findWhat = myFindWhat;
        app.changeGrepPreferences.changeTo = myChangeTo;
        myStory.changeGrep();
        app.findGrepPreferences = app.changeGrepPreferences = null;
    }
 
  • Спасибо
Реакции: aleksasha
UPD: Я использовал allPageItems потому, что с pageItems объекты вставали на новое место в неправильном порядке, подписи оказывались под фото и так далее.
 
  • Спасибо
Реакции: aleksasha