0

I'd like to tag specific inline images in my document but am a but stuck on the actual tagging part. What I already have is the following :

var myDoc = app.activeDocument;
var myItems = myDoc.allPageItems;
var foundInlineImages = Array();

// loop through the page and find all inline objects (images).
// Name has to be Rectangle to exclude grouped objects.

for(var i = 0, len = myItems.length; i < len; i++)
{
    if( (myItems[i].constructor.name=="Rectangle") && (myItems[i].parent instanceof Character) )
    {
        foundInlineImages.push(myItems[i]);
    }
}


// encapsulate all array entries with [Image] tag

for(var i = 0; i < foundInlineImages.length; i++)
{
   // I need here something like foundInlineImages[i].changeTextPreferences.markupTag="Image";
   // unfortunatly this doesn't work ...
}

Can somebody lead me to the right syntax to encapsulate each found object in my array with a tag (in this case 'image') ?

Thanks in advance !

Ian Campbell
  • 2,678
  • 10
  • 56
  • 104
Wokoman
  • 1,089
  • 2
  • 13
  • 30

1 Answers1

1

@Wokoman -- To encapsulate an image with an XML tag as you are saying:

  • first create an XML tag named "Image" for each image
  • create an XML element from that tag
  • then insert each image into the XML element

You are trying to change a property of an Image object, but  Image  does not have the properties  changeTextPreference.markupTag  (see InDesign object model --> Image for reference).

 Application  has these properties  changeTextPreference.markupTag (see InDesign object model --> changeTextPreference for reference).


So, try this out (this is untested, and based on p. 168 of InDesignCS5_ScriptingGuide_JS):
var xmlImageTag = "";
var xmlImageElement = "";

for(var i = 0, len = foundInlineImages.length; i < len; i++)
{
    // each Image tag created here
    xmlImageTag = myDoc.xmlTags.add("Image");

    // each Image element created here, from the Image tag
    xmlImageElement = myDoc.xmlElements.item(i).xmlElements.add(xmlImageTag);

    // inserting each image into each new Image element
    xmlImageElement.contents = foundInlineImages[i];
}
Ian Campbell
  • 2,678
  • 10
  • 56
  • 104