Skip to main content
feinschmecker
Known Participant
February 19, 2019
Answered

Copy multiple Contact meta fields into Description field

  • February 19, 2019
  • 1 reply
  • 985 views

Hi all

I'm having a quite big problem (I'm desperate).

I have around 3000 image files with various text in the metadata Creator fields.

Creator

Creator: Job Title

Creator: Address

Creator: Cirt

Creator: State/Province

Creator: Postal Code

Creator: Country

Creator: Phone(s)

Creator: Email(s)

Creator: Website(s)

I need each field copied to the Description field (with line breaks of course).

So the Description field end up having anywhere form 1 to 10 lines depending on which of the above fields have data. So if a field is empty, nothing gets copied.

I don't know anything about scripting - and I'm a little desperate..

It it possible? Can anyone help me? Or point me to a possible solution?

Thanks in advance!

Kind regards

Henrik

This topic has been closed for replies.
Correct answer SuperMerlin

Please try this script on selected documents...

#target bridge;

   if( BridgeTalk.appName == "bridge" ) { 

CreatorFields = MenuElement.create("command", "Update Desc From Creator Fields", "at the end of Tools");

}

CreatorFields.onSelect  = function () { 

var thumbs = app.document.selections;

if (ExternalObject.AdobeXMPScript == undefined)  ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript");

for(var a in thumbs){

updateThumb(thumbs);

}

function updateThumb(selectedFile){

desc = '';

function getArrayItems(xmp,ns, prop){ 

var arrItem=[]; 

try{ 

var items = xmp.countArrayItems(ns, prop); 

for(var i = 1;i <= items;i++){ 

arrItem.push(xmp.getArrayItem(ns, prop, i)); 

     } 

return arrItem.toString(); 

}catch(e){alert(e +" Line: "+ e.line);} 

};

var xmp = new XMPMeta(selectedFile.synchronousMetadata.serialize());

if(xmp.doesPropertyExist(XMPConst.NS_DC, "description")){

    desc = getArrayItems(xmp,XMPConst.NS_DC, "description").toString();

    }

xmp.deleteProperty(XMPConst.NS_DC, "description");

if(xmp.doesPropertyExist(XMPConst.NS_DC, "creator")){

    var creator = getArrayItems(xmp,XMPConst.NS_DC, "creator");

    desc += "\n" + creator.toString();

    }

if(xmp.doesPropertyExist(XMPConst.NS_PHOTOSHOP, "AuthorsPosition")){

var Ap = xmp.getProperty(XMPConst.NS_PHOTOSHOP, "AuthorsPosition");

desc += "\n" + Ap.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrExtadr")){

var Address = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrExtadr");

    desc += "\n" + Address.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCity")){

var City = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCity");

    desc += "\n" + City.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrRegion")){

var State = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrRegion");

    desc += "\n" + State.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrPcode")){

var PC = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrPcode");

    desc += "\n" + PC.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCtry")){

var Country = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCtry");

    desc += "\n" + Country.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiTelWork")){

var Tel = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiTelWork");

    desc += "\n" + Tel.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiEmailWork")){

var Email = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiEmailWork");

    desc += "\n" + Email.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiUrlWork")){

var URLs = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiUrlWork");

    desc += "\n" + URLs.toString();

}

xmp.setLocalizedText( XMPConst.NS_DC, "description", null, "x-default", desc);

var newPacket = xmp.serialize(XMPConst.SERIALIZE_USE_COMPACT_FORMAT);

selectedFile.metadata = new Metadata(newPacket);

    }

};

SuperMerlin
SuperMerlinCorrect answer
Inspiring
February 19, 2019

Please try this script on selected documents...

#target bridge;

   if( BridgeTalk.appName == "bridge" ) { 

CreatorFields = MenuElement.create("command", "Update Desc From Creator Fields", "at the end of Tools");

}

CreatorFields.onSelect  = function () { 

var thumbs = app.document.selections;

if (ExternalObject.AdobeXMPScript == undefined)  ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript");

for(var a in thumbs){

updateThumb(thumbs);

}

function updateThumb(selectedFile){

desc = '';

function getArrayItems(xmp,ns, prop){ 

var arrItem=[]; 

try{ 

var items = xmp.countArrayItems(ns, prop); 

for(var i = 1;i <= items;i++){ 

arrItem.push(xmp.getArrayItem(ns, prop, i)); 

     } 

return arrItem.toString(); 

}catch(e){alert(e +" Line: "+ e.line);} 

};

var xmp = new XMPMeta(selectedFile.synchronousMetadata.serialize());

if(xmp.doesPropertyExist(XMPConst.NS_DC, "description")){

    desc = getArrayItems(xmp,XMPConst.NS_DC, "description").toString();

    }

xmp.deleteProperty(XMPConst.NS_DC, "description");

if(xmp.doesPropertyExist(XMPConst.NS_DC, "creator")){

    var creator = getArrayItems(xmp,XMPConst.NS_DC, "creator");

    desc += "\n" + creator.toString();

    }

if(xmp.doesPropertyExist(XMPConst.NS_PHOTOSHOP, "AuthorsPosition")){

var Ap = xmp.getProperty(XMPConst.NS_PHOTOSHOP, "AuthorsPosition");

desc += "\n" + Ap.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrExtadr")){

var Address = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrExtadr");

    desc += "\n" + Address.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCity")){

var City = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCity");

    desc += "\n" + City.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrRegion")){

var State = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrRegion");

    desc += "\n" + State.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrPcode")){

var PC = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrPcode");

    desc += "\n" + PC.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCtry")){

var Country = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCtry");

    desc += "\n" + Country.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiTelWork")){

var Tel = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiTelWork");

    desc += "\n" + Tel.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiEmailWork")){

var Email = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiEmailWork");

    desc += "\n" + Email.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiUrlWork")){

var URLs = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiUrlWork");

    desc += "\n" + URLs.toString();

}

xmp.setLocalizedText( XMPConst.NS_DC, "description", null, "x-default", desc);

var newPacket = xmp.serialize(XMPConst.SERIALIZE_USE_COMPACT_FORMAT);

selectedFile.metadata = new Metadata(newPacket);

    }

};

feinschmecker
Known Participant
February 19, 2019

Thanks again SuperMerlin

It seems to be working. I got an error loading the script the first time, but after enabling it in preferences, it seems to be working.

Say sometime in the future I wanted the data to go into, say, Headline. Would it be as simple as changing "description" to "headline" in the code?

Kind regards and thanks!

/Henrik

SuperMerlin
Inspiring
February 19, 2019

The Headline would be slightly different...

#target bridge;

   if( BridgeTalk.appName == "bridge" ) { 

CreatorFieldsHead = MenuElement.create("command", "Update Headline From Creator Fields", "at the end of Tools");

}

CreatorFieldsHead.onSelect  = function () { 

var thumbs = app.document.selections;

if (ExternalObject.AdobeXMPScript == undefined)  ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript");

for(var a in thumbs){

updateThumb(thumbs);

}

function updateThumb(selectedFile){

desc = '';

function getArrayItems(xmp,ns, prop){ 

var arrItem=[]; 

try{ 

var items = xmp.countArrayItems(ns, prop); 

for(var i = 1;i <= items;i++){ 

arrItem.push(xmp.getArrayItem(ns, prop, i)); 

     } 

return arrItem.toString(); 

}catch(e){alert(e +" Line: "+ e.line);} 

};

var xmp = new XMPMeta(selectedFile.synchronousMetadata.serialize());

if(xmp.doesPropertyExist(XMPConst.NS_PHOTOSHOP, "Headline")){

    desc = xmp.getProperty(XMPConst.NS_PHOTOSHOP, "Headline").toString();

    }

xmp.deleteProperty(XMPConst.NS_PHOTOSHOP, "Headline");

if(xmp.doesPropertyExist(XMPConst.NS_DC, "creator")){

    var creator = getArrayItems(xmp,XMPConst.NS_DC, "creator");

    desc += "\n" + creator.toString();

    }

if(xmp.doesPropertyExist(XMPConst.NS_PHOTOSHOP, "AuthorsPosition")){

var Ap = xmp.getProperty(XMPConst.NS_PHOTOSHOP, "AuthorsPosition");

desc += "\n" + Ap.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrExtadr")){

var Address = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrExtadr");

    desc += "\n" + Address.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCity")){

var City = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCity");

    desc += "\n" + City.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrRegion")){

var State = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrRegion");

    desc += "\n" + State.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrPcode")){

var PC = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrPcode");

    desc += "\n" + PC.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCtry")){

var Country = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiAdrCtry");

    desc += "\n" + Country.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiTelWork")){

var Tel = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiTelWork");

    desc += "\n" + Tel.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiEmailWork")){

var Email = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiEmailWork");

    desc += "\n" + Email.toString();

}

if(xmp.doesStructFieldExist(XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiUrlWork")){

var URLs = xmp.getStructField( XMPConst.NS_IPTC_CORE, "CreatorContactInfo",XMPConst.NS_IPTC_CORE, "CiUrlWork");

    desc += "\n" + URLs.toString();

}

xmp.setProperty(XMPConst.NS_PHOTOSHOP, "Headline",desc);

var newPacket = xmp.serialize(XMPConst.SERIALIZE_USE_COMPACT_FORMAT);

selectedFile.metadata = new Metadata(newPacket);

    }

};