Копирование из документа в документ

Статус
Закрыто для дальнейших ответов.

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Условия: Имеется документ "1.indd" и в нем один единственный текстовый фрейм. Кроме того есть еще один открытый документ с выделенным текстовым блоком.
Задача: Необходимо выделенный блок из текущего документа скопировать в конец единственного текстового фрейма в документ "1.indd" с сохранением форматирования.

То, что я навоял, как-то не так футычит. Помогите, пожалуйста, разобраться, сам я в скриптописании не ахти :(...

Код:
with(app){
    var tArr = new Array();
    var myFromDoc = activeDocument;
    var myToDoc = app.documents.itemByName("1.indd");
    if (selection.length == 0){alert ("Ничего не выбрано.\nВыберите фрейм или поместите курсор в текст\nи попробуйте снова.","Ошибка");exit()}
    var myContent = "";
    activeDocument = myFromDoc;
    myContent = activeDocument.selection[0];
    activeDocument = myToDoc;
    var myToContent = activeDocument.pages[0].textFrames.item(0);
    tArr.push(myToContent);
    myContent = activeDocument.selection[0];
    tArr.push(myContent);
    assemble(tArr);
    activeDocument = myFromDoc;
}

function assemble(inArr){
    var arr = inArr;
    var targFrame = arr[0];
    for (var i=arr.length-1; i > 0; i--){
        var storedLayer = arr.itemLayer;
        var storedLayerLock = storedLayer.locked;
        arr[i-1].textStyleRanges.lastItem().contents += "\r";
        arr.previousTextFrame = arr[i-1];
        arr.itemLayer.locked = false;
        arr.locked = false;
        arr.remove();
        storedLayer.locked = storedLayerLock;
    }
    targFrame.nextTextFrame = null;
    targFrame.fit(FitOptions.FRAME_TO_CONTENT);
}
 
Последнее редактирование:

Oleg Butrin

20 лет на форуме
Сообщения
1 991
Реакции
1 222
Код:
function copytext () {
    var sourceDoc = app.activeDocument;
    var destDoc = app.documents[1];

    try {
        var chk = app.selection[0].appliedCharacterStyle;
    } catch (error) {
        alert('Текст не выделен!')
        return false;
    }

    app.copy();

    try {
        var tf = destDoc.pages[0].textFrames[0];
    } catch (error) {
        alert ('В целевом документе отсутствует текстовый фрейм!');
        return false;
    }

    var story = tf.parentStory;
    var ip = story.insertionPoints[story.insertionPoints.length - 1];
    ip.contents = ip.contents + '\u000D';
    ip = story.insertionPoints[story.insertionPoints.length - 1];

    app.activeDocument = destDoc;
    ip.select();
    app.paste();

    return true;
   
}

if (copytext()) {
    alert('Готово!');
};
 

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Олег, спасибо за быстрый ответ из за решение. В таком варианте работает, а дальше попробую сам, т.к. хотелось бы в исходном документе выделить только текстовый блок без необходимости выделения в нем текста...
И еще вопрос по реализации: через .copy()/.paste() вроде все ясно. А если через .textFrames какие свойста нужно переносить, чтобы сохранить форматирование?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 991
Реакции
1 222
Копирование-вставка скриптом сохраняют форматирование так же, как операция вручную.
Не совсем понятно, что значит
выделенный блок из текущего документа скопировать в конец единственного текстового фрейма
Скопировать текст из фрейма и вставить как текст, вставить фрейм как инлайн-объект, связать фрейм с предыдущим?
 

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Извините за неточную формулировку. Имелось в виду вставлять текст с сохранением форматирования из ткущего в целевой файл. При этом в целевом файле должен остатся один текстовый фрем.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 991
Реакции
1 222
То есть, по сути надо выбрать содержимое выделенного текстового фрейма и далее то же самое, что скрипт уже делает?
 

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Абсолютно верно. Но реализация этого вроде ясна, и думаю что справлюсь, однако если Мастер предложит свое решение, буду только рад.
Вопрос о копировании стилей через .textFrames был из "спортивного" интереса с цель лучшего понимания объектной модели InDesign-а.
Еще раз спасибо.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 991
Реакции
1 222
Код:
function selectText () {
    var tf = app.selection[0];

    try {
        var story = tf.parentStory;
        var chk = tf.geometricBounds;
    } catch (error) {
        alert('Не выделен текстовый фрейм!');
        return false;
    }

    // "tf" заменить на "story", если надо выделить весь текст статьи 
    var ips = tf.insertionPoints;
    var text = ips.itemByRange(ips[0], ips[ips.length - 1]);
    text.select();
}

selectText();

однако если Мастер предложит свое решение
Не говори так. Тебе ничего, а я на один бок кривой стану.
 

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Прошу прощения. Я не по злому умыслу, а токма из лучших побуждений...

Еще раз спасибо за предложенное решение!
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Комментарий модератора: @UserD, для "спасибо" используйте кнопку "Спасибо". Спасибо.:)
 
Статус
Закрыто для дальнейших ответов.