Нужен синтаксис setProperty для объекта XMP

Я случайным образом генерирую 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);     
} 
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
1
0
199
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать метод 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 в рекомендациях указывается:

An ID should be guaranteed to be globally unique (in practical terms, this means that the probability of a collision is so remote as to be effectively impossible). Typically 128- or 144-bit numbers are used, encoded as hexadecimal strings

The excerpt (above) can be found on page 19 of Partner's guide to XMP for Dynamic Media (PDF)

К сожалению, Расширить скрипт не предоставляет встроенной функции для создания глобального уникального идентификатора (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).

Другие вопросы по теме