Search code examples
metadataphotoshopphotoshop-script

How can I check meta data between 2 document using script?


I am looking for a script can check Physical file id of a document and compare it to another one. For example, I have some images named xxx_01.tif, xxx_02.tif... (they already had their own Raw data), I always need to save as a swatch (named xxx_sw.tif) from xxx_01 file to keep the Raw data but sometimes I created from xxx_02 and it didn't match.

Is there any way to check and alert if "Physical file id" of sw file doesn't match to 01's ?

Reply @GhoulFool:

var srcDoc = app.activeDocument;
var ctpath = srcDoc.path;
var ctname = srcDoc.name

var rawData1 = srcDoc.xmpMetadata.rawData;
var idCT = find_original_document_ID(rawData1);

function find_original_document_ID(str)
{
  var regEx = new RegExp(".+xmpMM:OriginalDocumentID.+", "gim");
  var result = str.match(regEx);

  if (result != null)
  {
    return result;
  }
}

File(ctpath)
.getFiles(function(v) {v.name.indexOf('_bustfront1') + 1 && open(v)})

var doc2 = app.activeDocument;
var fName = doc2.name;
var rawData2 = doc2.xmpMetadata.rawData;
//alert(rawData);
var id01 = find_original_document_ID(rawData2);

function find_original_document_ID(str)
{
  var regEx = new RegExp(".+xmpMM:OriginalDocumentID.+", "gim");
  var result = str.match(regEx);

  if (result != null)
  {

    return result;
  }
}
doc2.close();

// I stucked here, alert always shows even it true or false
if (idCT == id01) {}
else {alert (ctname +  idCT + '\n' + '\n' + fName + id01)}

Solution

  • If by phyiscal id you mean OriginalDocumentID then yes It can be found with app.activeDocument.xmpMetadata.rawData

    There are probably better ways to get the ID from the XML, but you get the idea.

    // call the source document
    var srcDoc = app.activeDocument;
    
    var rawData = srcDoc.xmpMetadata.rawData;
    //alert(rawData);
    var id = find_original_document_ID(rawData);
    alert(id);
    
    
    function find_original_document_ID(str)
    {
      var regEx = new RegExp("\<xmpMM\:DocumentID.+", "gim"); //whole line
      var result = str.match(regEx);
    
      if (result != null)
      {
        alert(result);
        var justID = result.toString();
        // <xmpMM:DocumentID>xmp.did:8731d1f4-07fb-084b-b66c-ecd397cc0b21</xmpMM:DocumentID>
        // <xmpMM:DocumentID>adobe:docid:photoshop:2ca50ad0-bdcb-534e-8720-4d1f0f32fe9c</xmpMM:DocumentID>
        justID = justID.replace(/\<\/?xmpMM\:DocumentID\>/g, "");
        return justID;
      }
    }
    

    It should just be a matter of comparing ID1 == ID2 after that.

    • I've updated the function and it now returns the ID as a string without the xmpMM:DocumentID tags. Still need to do research on that as those IDs come in various flavours.