需要通过扩展脚本生成和更新.indd Indesign文件的链接的缺少DocumentID和instanceID

时间:2019-05-21 10:05:19

标签: adobe adobe-indesign extendscript

我将Mac与InDesign CC 219一起使用,并且在我的.indd文件中,某些链接丢失了DocumentIDInstanceID,以下是我正在使用的代码得到那些细节。如果对于任何链接,DocumentIDInstanceID都丢失了,那么我需要生成随机的DocumentIDInstanceID,并更新相关链接的元数据。是否可以通过脚本编写,请指示任何方向...

   var doc = app.activeDocument;

    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);
}

1 个答案:

答案 0 :(得分:0)

$.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 randomString(length, chars) {
    var randomGenStr = '';
    for (var i = length; i > 0; --i) {
    randomGenStr += chars[Math.floor(Math.random() * chars.length)];
    }
    return randomGenStr;
}



function randomString(length) {  
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    for(var k = 0; k < length; k++) {
        text += possible.charAt(Math.floor(Math.random() * possible.length));
    }
    return text;

    }

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_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);

    // Useful for testing purposes....
    // Log properties for each link to the console.


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

          docMissingCnt++;
          insMissingCnt++;

    } else if (!documentID) {
      alert('Link missing DocumentID\n' + 
          'Name: ' + linkFileName + '\n\n' +
          'Path: ' + linkFilepath, 'Missing XMP', true); 
            docMissingCnt++;
    } else if (!instanceID) {
      alert('Link missing InstanceID\n' + 
          'Name: ' + linkFileName + '\n\n' +
          'Path: ' + linkFilepath, 'Missing XMP', true);
           insMissingCnt++;
    }

       if(docMissingCnt > 0) {
           documentID =  randomString(32);

          allXMP.setProperty(XMPConst.NS_XMP_MM, 'DocumentID', documentID);
          var documentIDNew = allXMP.getProperty(XMPConst.NS_XMP_MM, 'DocumentID', XMPConst.STRING);
         $.writeln('DocumentID - New : ' + documentIDNew);
         docMissingCnt = 0;
          }

      if(insMissingCnt > 0) {

          instanceID = randomString(32);

          allXMP.setProperty(XMPConst.NS_XMP_MM, 'InstanceID', instanceID);
          var instanceIDNew = allXMP.getProperty(XMPConst.NS_XMP_MM, 'InstanceID', XMPConst.STRING);

         $.writeln('InstanceID - New : ' + instanceIDNew);
         insMissingCnt = 0;
          }

 }
}

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