我随机生成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);
}
答案 0 :(得分:1)
您可以利用 AdobeXMPScript 库中的setProperty()
方法来创建和设置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
的值时,准则指出:
应该确保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)
函数调用。