Как в TextFrame добавить уже существующий TextFrame

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

dim4an

Участник
Топикстартер
Сообщения
93
Реакции
1
Всем привет. Являюсь новичком в работе с InDesign.

Стоит такая задача. Есть 2 файла, в одном находятся темплейты для заполнения данными, сделанные верстальщиком, в другом файле находится разметка (текстфреймы), в которую мы будем добавлять темплейты.

Пытаюсь проделать данную операцию вот таким способом.

Код:
   //ищем объекты по ScriptLabel
    var rendTempl =  getPageItemByScriptLabel(tempDoc,"template1");
    var columTempl =  getPageItemByScriptLabel(layoutDoc,"colum1");
    var tf = columTempl.insertionPoints.lastItem().textFrames.add() ;
    tf = rendTempl;

Вставляется пустой текстфрейм.
 
Если я правильно понял задачу, то так:
rendTempl.select();
app.cut();
columTempl.insertionPoints.lastItem().select();
app.paste();
 
вообще как то странно, не работают методы select(), app.cut(), app.paste(), app.copy(). В чем может быть проблема? Может что то не объявил или не указал.

Скрипт вызываю из .Net приложения, вот таким образом

Код:
 app.DoScript(scriptPath.FullName,
 
              InDesignServer.idScriptLanguage.idJavascript,
 
              scriptArgs,
 
              InDesignServer.idUndoModes.idAutoUndo,
 
              "");

Ну и сам скрипт в подробности

Код:
var tempDocFPath =  eval(arguments[0]);
var layoutDocFPath = eval(arguments[1]);
var saveDocPath = eval(arguments[2]);
var testData = eval(arguments[3]);
var tempDoc;
var layoutDoc;
main();
 
function main(){
    tempDoc = app.open(new File(tempDocFPath), OpenOptions.OPEN_COPY);
    app.consoleout("tempDoc open");
 
    layoutDoc = app.open(new File(layoutDocFPath), OpenOptions.OPEN_COPY);
    app.consoleout("layoutDoc open");
 
    renderDoc();
 
    layoutDoc.save(new File(saveDocPath));
    app.consoleout("file save");
 
    tempDoc.close();
    layoutDoc.close();
}
 
function renderDoc(){
        var rendTempl = getPageItemByScriptLabel(tempDoc,"template1");
        var columTempl = getPageItemByScriptLabel(layoutDoc,"colum1");
        rendTempl.select();
        app.copy();
        columTempl.insertionPoints.lastItem().select();
        app.paste();
  }
 
Нашел ответ на свой вопрос. Поскольку я использую не просто InDesign, а InDesign Server, то там отсутствуют эти методы.

Выдержка из официальной документации.

Copy and paste
Because InDesign Server has no user interface, it also lacks the copy and paste features of InDesign.
Instead of using copy and paste, use duplicate and move. Both methods can create copies of objects, and
can move objects from one document to another.
 
дабы не оставлять ветку без ответа, вот способ, который вставляет инлайн фреймы в фрейм.
Код:
TextFrame.prototype.addFrame = function (frame) {
    var newTextFrame = this.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;
}
 
Статус
Закрыто для дальнейших ответов.