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

时间:2019-05-17 03:48:00

标签: adobe metadata adobe-indesign extendscript xmp

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

我的要求是,我需要访问与.indd文件关联的所有单个链接元数据,并查看是否缺少任何链接元数据DocumentIDInstanceID。如果任何链接元数据都没有DocumentID和/或InstanceID属性的值,那么我需要显示与该链接关联的文件名,表明该特定文件缺少{{ 1}}和/或DocumentID

我已使用以下脚本访问InstanceID文件的元数据。

.indd

任何人都可以帮助我,我该怎么做?

1 个答案:

答案 0 :(得分:1)

一旦您从链接(即xmpFile.getXMP())获得了XMP,就需要:

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

  2. 通常,DocumentIDInstanceIDNS_XMP_MM模式名称空间相关联,描述为:

      

    NS_XMP_MM XMP数字资产管理架构的XML名称空间。

    例如,要获取DocumentID,您将执行以下操作:

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

解决方案:

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

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

  2. 加载AdobeXMPScript XMP库

  3. 检查所有链接的状态是否为“确定” ,即检查其是否不是“ Modified” “ Missing” 。如果任何链接状态不是“ OK” ,则要求用户将其状态更新为“ OK”

  4. 检查每个链接的资产是否都有DocumentIDInstanceID,并将其值记录到 JavaScript控制台

  5. 对于没有DocumentID和/或InstanceID的任何链接资产,将显示一个警告对话框,指示链接资产的名称和路径。

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);
}
相关问题