需要XMP对象的setProperty语法

时间:2019-05-22 13:17:44

标签: javascript adobe adobe-indesign extendscript xmp

我随机生成DocumentIDInstanceID,但是在将属性DocumentIDInstanceID设置为xmp对象时遇到问题。

如何将生成的DocumentIDInstanceID设置为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 个答案:

答案 0 :(得分:1)

您可以利用 Adob​​eXMPScript 库中的setProperty()方法来创建和设置DocumentIDInstanceID

的值

以下是用于添加DocumentIDInstanceID的几个帮助函数。

// 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());

附加说明:

生成DocumentIDInstanceID的值时,准则指出:

  

应该确保ID在全局上是唯一的(实际上,这意味着发生碰撞的可能性非常小,以至于实际上是不可能的)。通常使用128位或144位数字,编码为十六进制字符串

摘录(以上)可以在Partner's guide to XMP for Dynamic Media(PDF)的第19页中找到

不幸的是, 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)函数调用。