[ID CC-CC2021] Из Photoshop-а в InDesign

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Доброго времени уважаемым форумчанам.

Пытаюсь приручить скриты в Ph: Надо, после сохранения файла обновить связь в InD. Код следующий
Код:
pdDoc = app.activeDocument;
myNewFile = "Test.psd";

options = new PhotoshopSaveOptions();
pdDoc.saveAs (File(myNewFile), options, false);
pdDoc.close();

executeTarget ("indesign");

var bt = new BridgeTalk;
bt.onResult = function(resultMsg) {
    app.waitForAllTasks();
    mySelLink.update();
    if (mySelLink.status) {mySelLink.update()};
}
bt.send(100000);

var myLink = app.selection[0].allGraphics[0].itemLink;
if (File(myNewFile).exists) myLink.relink(File(myNewFile));
myLink.update();

// Функция запуска приложения с использованием функций BrigeTalk
// (подробно об использовании Bridge Talk смотри в описании Bridge Scripting)
function executeTarget (appSpec) {
    try {
//      если приложение уже запущено, передаем ему фокус
        if (BridgeTalk.isRunning(appSpec)) {
            BridgeTalk.bringToFront (appSpec);
        } else {
//          если приложение не запущено, запускаем его и передаем фокус
            BridgeTalk.launch (appSpec);
            BridgeTalk.bringToFront (appSpec);
        }
        return true;
    } catch (error) {
        return false;
    }
}

Но затыкается на
Код:
var myLink = app.selection[0].allGraphics[0].itemLink;
Причем в InD объект выделен.
В чём ошибка?
 
Последнее редактирование:

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Да, вроде, как-бы пытаюсь перейти в InD
Код:
executeTarget ("indesign");
да не получается, вот и жалуется что myLink undefined :(
как же перейти к InD?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Весь код, который вы привели здесь, выполняется в Photoshop. В том числе код метода onResult.
Чтобы выполнить некие действия в InDesign, надо свойству body объекта Bridgetalk передать функцию в виде текста.
 

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Чтобы выполнить некие действия в InDesign, надо свойству body объекта Bridgetalk передать функцию в виде текста.
Ага, ясно. Буду копать...
PS А нет возможности в скрите как-то переключаться между приложениями и выполнять код в контексте конкретного приложения?
PPS Извините за полуграмотные вопросы ;]]
 

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
Ага, ясно. Буду копать...
PS А нет возможности в скрите как-то переключаться между приложениями и выполнять код в контексте конкретного приложения?
PPS Извините за полуграмотные вопросы ;]]
База без отлова ошибок
Код:
#target photoshop

function GetIndesignInstation() {
        var myIndesignTitle = "indesign";
        var myIndesignIdx=null;
        var myIndesignInstance=null;
        for (var i=0; i< apps.length;i++){
            if (apps[i].toLowerCase().indexOf(myIndesignTitle) == -1) continue;
            myIndesignIdx=i;
            break;
         }
        
        myIndesignInstance = apps[myIndesignIdx];
        if (!BridgeTalk.isRunning(myIndesignInstance)) return null;
        return myIndesignInstance;
}

var indd = GetIndesignInstation();

var myBT = new BridgeTalk;
myBT.target = indd;

myBT.body='alert (\'alert from indesign\');';
myBT.send();
 

UserD

Топикстартер
15 лет на форуме
Сообщения
48
Реакции
1
Всем огромное спасибо! 'beer1'
Задача нашла реализацию через BridgeTalk.send()