получение файла XMP не имеет ошибки конструктора через ExtendScript - PullRequest
1 голос
/ 14 мая 2019

Я использую In Design CC 2019 на моей Mac OS. Когда я пытаюсь получить XMP данные для моего .indd (документ InDesign), используя ExtendScript.

В настоящее время я получаю сообщение об ошибке:

XMPFile Does not have a constructor.

Ниже мой сценарий.

// load XMP Library
function loadXMPLibrary(){
    if ( ExternalObject.AdobeXMPScript){
        try{ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');}
        catch (e){alert('Unable to load the AdobeXMPScript library!'); return false;}
    }
    return true;
}



var myFile= app.activeDocument.fullName;

// check library and file
if(loadXMPLibrary() && myFile != null){
   xmpFile = new XMPFile(myFile.fsName, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_UPDATE);
   var myXmp = xmpFile.getXMP();
}

if(myXmp){
    $.writeln ('sucess')
 }

enter image description here

enter image description here

1 Ответ

1 голос
/ 15 мая 2019

Есть проблема с логикой ваших кодов, вам нужно внести следующее изменение:

  1. Добавить оператор Logical NOT (т.е. !) кусловие, указанное для вашего оператора if в теле вашей функции loadXMPLibrary.

    function loadXMPLibrary(){
        if (!ExternalObject.AdobeXMPScript) { // <--- Change to this
        //  ^
          try {ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');}
          catch (e){alert('Unable to load the AdobeXMPScript library!'); return false;}
        }
        return true;
    }
    

    Вам необходимо добавить это, потому что в настоящее время ваш оператор if проверяет, является ли условие истинным, т.е.ExternalObject.AdobeXMPScript - это true.Это всегда будет оставаться false до тех пор, пока библиотека AdobeXMPScript не будет загружена, поэтому ваш код, который фактически загружает библиотеку, так и не будет выполнен.

Пересмотренный скрипт:

Для ясности приведу полный пересмотренный скрипт:

// load XMP Library
function loadXMPLibrary() {
    if (!ExternalObject.AdobeXMPScript) {
        try{ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');}
        catch (e){alert('Unable to load the AdobeXMPScript library!'); return false;}
    }
    return true;
}

var myFile= app.activeDocument.fullName;

// check library and file
if (loadXMPLibrary() && myFile !== null) {
    xmpFile = new XMPFile(myFile.fsName, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_UPDATE);
    var myXmp = xmpFile.getXMP();
}

if (myXmp){
    $.writeln ('success')
}
...