检查 InDesign 链接是否缺少 XMP - DocumentID 和 InstanceID

Check InDesign Links for missing XMP - DocumentID and InstanceID

我正在使用 ExtendScript 处理 InDesignCC 2019 中 .indd 个文件的元数据信息。

我的要求是我需要访问与 .indd 文件关联的所有个人 links 元数据,并查看是否缺少任何 links 元数据 DocumentIDInstanceID。如果任何 links 元数据没有 DocumentID and/or InstanceID 属性的值,那么我需要显示与该 link 关联的文件名,表示该特定文件缺少 DocumentID and/or InstanceID.

我使用下面的脚本访问了 .indd 文件的元数据。

$.level=0

// 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;
 var myXmp = null;

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


if (myXmp){
      $.writeln (myXmp);
    $.writeln (XMPFile.getFormatInfo(XMPConst.FILE_INDESIGN));

}

任何人都可以帮助我如何进一步处理这个问题?

从 link 获得 XMP 后,即 xmpFile.getXMP(),您需要:

  1. 利用getProperty()方法检索特定元数据的值属性。

  2. 通常 DocumentIDInstanceID 将与 NS_XMP_MM 架构命名空间关联,描述为:

    NS_XMP_MM The XML namespace for the XMP digital asset management schema.

    例如,要获得 DocumentID,您需要执行以下操作:

     var documentID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'DocumentID', XMPConst.STRING);
    

解决方案:

下面的要点 (example.jsx) 执行以下操作:

  1. 检查 .indd 文件是否打开,如果没有打开则通知用户。

  2. 加载 Adob​​eXMPScript XMP 库

  3. 检查所有链接的状态是否为“OK”,即检查它们是否为“已修改”[=72] =],也没有 “失踪”。如果任何 link 状态不是 "OK",则要求用户将其状态更新为 "OK".

  4. 检查每个 linked 资产是否有 DocumentIDInstanceID 并将它们的值记录到 JavaScript 控制台.

  5. 对于任何没有 DocumentID and/or InstanceID 的 linked 资产,会出现一个警告对话框,指示名称和路径linked 资产。

example.jsx

$.level=0;

// Warn if there are no documents open.
if (!app.documents.length) {
  alert('Open a document and try again.', 'Missing Document', false);
  exit();
}

var doc = app.activeDocument;

// load XMP Library
function loadXMPLibrary() {
  if (!ExternalObject.AdobeXMPScript) {
    try {
      ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');
    } catch (e) {
      alert('Failed loading AdobeXMPScript library\n' + e.message, 'Error', true);
      return false;
    }
  }
  return true;
}

// Check all link statuses are be ok.
function linksStatusCheck(doc) {
  for (var i = 0, len = doc.links.length; i < len; i++) {
    if (doc.links[i].status !== LinkStatus.NORMAL) {
      alert('The status of all links must be OK \nPlease update link status ' +
          'via the Links panel and try again', 'Link Status', true); 
      exit();
    }
  }
  return true;
}

function checkLinksXMP(doc) {
  for (var i = 0, len = doc.links.length; i < len; i++) {

    var linkFilepath = File(doc.links[i].filePath).fsName;
    var linkFileName = doc.links[i].name;

    var xmpFile = new XMPFile(linkFilepath, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_READ);
    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);
      
    // Useful for testing purposes....
    // Log properties for each link to the console.
    $.writeln('linkName: ' + linkFileName);
    $.writeln('filePath: ' + linkFilepath);
    $.writeln('DocumentID: ' + documentID);
    $.writeln('InstanceID: ' + instanceID);
    $.writeln('-------------------------------------');

    // Notify user when XMP is missing...
    if (!documentID && !instanceID) {
      alert('Link missing DocumentID and InstanceID\n' + 
          'Name: ' + linkFileName + '\n\n' +
          'Path: ' + linkFilepath, 'Missing XMP', true); 
    } else if (!documentID) {
      alert('Link missing DocumentID\n' + 
          'Name: ' + linkFileName + '\n\n' +
          'Path: ' + linkFilepath, 'Missing XMP', true); 
    } else if (!instanceID) {
      alert('Link missing InstanceID\n' + 
          'Name: ' + linkFileName + '\n\n' +
          'Path: ' + linkFilepath, 'Missing XMP', true);
    }
  }
}

if (loadXMPLibrary() && linksStatusCheck(doc)) {
  checkLinksXMP(doc);
}