нужен синтаксис setProperty для объекта XMP - PullRequest
1 голос
/ 22 мая 2019

Я случайно генерирую DocumentID и InstanceID, но сталкиваюсь с проблемой при установке свойства DocumentID и InstanceID для объекта xmp.

Как установить сгенерированные DocumentID и InstanceID на мой allXMP?

var xmpFile = new XMPFile(linkFilepath, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_UPDATE);
var allXMP = xmpFile.getXMP();

// Retrieve values from external links XMP.
var documentID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'DocumentID', XMPConst.STRING);
var instanceID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'InstanceID', XMPConst.STRING);

documentID =  randomString(32);
instanceID = randomString(32);

// ???? Here I need to set DocumentID and InstanceID to allXMP

if (xmpFile.canPutXMP(allXMP)) {     
    xmpFile.putXMP(allXMP);    
    xmpFile.closeFile(XMPConst.CLOSE_UPDATE_SAFELY);     
} 

1 Ответ

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

Вы можете использовать метод setProperty() в библиотеке AdobeXMPScript , чтобы создать и установить значение для DocumentID и InstanceID

Ниже приведено несколько вспомогательных функций для добавления DocumentID и InstanceID.

// Note: This function works on macOS only
function generateUUID() {
  var cmd = 'do shell script "uuidgen | tr -d " & quoted form of "-"';
  return app.doScript(cmd, ScriptLanguage.applescriptLanguage);
}

// Add an XMP property and Value.
function addXmpPropertyAndValue(filePath, xmpProperty, xmpValue) {
  var xmpFile = new XMPFile(filePath, XMPConst.FILE_UNKNOWN, XMPConst.OPEN_FOR_UPDATE);
  var allXMP = xmpFile.getXMP();

  allXMP.setProperty(XMPConst.NS_XMP_MM, xmpProperty, xmpValue);

  if (xmpFile.canPutXMP(allXMP)) {
    xmpFile.putXMP(allXMP);
  }

  xmpFile.closeFile(XMPConst.CLOSE_UPDATE_SAFELY);

  // Useful for testing purposes....
  alert('Added: ' + xmpProperty + '\n' +
      'value: ' + xmpValue + '\n\n' +
      'Path: ' + filePath, 'Updated XMP', false);
}

Чтобы добавить instanceID, вызовите функцию addXmpPropertyAndValue следующим образом:

// The `linkFilepath` argument should be the filepath to the Link you want to update
addXmpPropertyAndValue(linkFilepath, 'InstanceID', 'xmp.iid:' + generateUUID());

Чтобы добавить DocumentID, вызовите функцию addXmpPropertyAndValue следующим образом:

// The `linkFilepath` argument should be the filepath to the Link you want to update
addXmpPropertyAndValue(linkFilepath, 'DocumentID', 'xmp.did:' + generateUUID());

Дополнительное примечание:

При генерации значения (й) для DocumentID и InstanceID указывается состояние:

Идентификатор должен быть гарантированно глобально уникальным (на практике это означает, что вероятность столкновения настолько мала, что фактически невозможна). Обычно используются 128- или 144-битные числа, закодированные в виде шестнадцатеричных строк

Выдержку (см. Выше) можно найти на странице 19 из Руководство партнера по XMP для динамических носителей (PDF)

К сожалению, ExtendScript не предоставляет встроенную функцию для генерации глобального уникального идентификатора (GUID). Однако macOS включает uuidgen, который является утилитой командной строки / библиотекой генерация уникальных идентификаторов (UUID / GUID).

Вспомогательная функция (см. Выше):

function generateUUID() {
  var cmd = 'do shell script "uuidgen | tr -d " & quoted form of "-"';
  return app.doScript(cmd, ScriptLanguage.applescriptLanguage);
}

работает только на macOS. Он использует AppleScript для запуска команды uuidgen.

Возможно, вы захотите сгенерировать идентификатор таким образом вместо текущего randomString(32) вызова функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...