2 Replies Latest reply on Feb 25, 2010 9:02 PM by Shonkyin

    Inserting an image after findGrep

    frameexpert Level 4

      Hello All,


      I have a some square-bracked text in my document. Inside each set of square brackets is the name of an EPS file that I want to insert inline at that location. So, for example:


      This is a test for inline images.[Image1.eps] This is where the image will go. Insert [Image2.eps]


      I am using this to locate the "tags":


      var oDoc = app.activeDocument;


      app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
      app.findGrepPreferences.findWhat = "\\[([\\w]+\\.eps)\\]";
      app.changeGrepPreferences.changeTo = "";


      var oText = oDoc.findGrep(true);


      Now that I have an array of text objects in oText, I need to know how to get the location at the end of each one, so I can place the image after the "]" character. After I place the images, I will delete the bracketed text.


      So, my basic question is, given an item in oText, how do I get the location at the end of it? Thank you very much.


      Rick Quatro

        • 1. Re: Inserting an image after findGrep
          Mac_06 Level 2

          Have you tried Kasyan nice script?? If not please try






          • 2. Re: Inserting an image after findGrep
            Shonkyin Level 3

            Below script comes with indesign_cs4_scripting_guide_scripts. It will also help you.



            //An InDesign CS4 JavaScript


            //Replaces each instance of a string with a specified graphic file.


            function main(){





            function mySetup(){

                 //Create an example document.

                 var myDocument = app.documents.add();

                 myDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;

                 myDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;

                 //Create a text frame on page 1.

                 var myTextFrame = myDocument.pages.item(0).textFrames.add();

                 //Set the bounds of the text frame.

                 myTextFrame.geometricBounds = myGetBounds(myDocument, myDocument.pages.item(0));

                 //Fill the text frame with placeholder text.

                 var myString = "This is an example paragraph.\r<graphic: \/c\/test.tif>\rThis is a paragraph following an inline graphic.\r<graphic: \/c\/test.tif>\rThis is another paragraph.";

                 myTextFrame.contents = myString;


            function mySnippet(){


                 var myInlineGraphic, myX1, myY1, myX2, myY2, myFoundItem;

                 var myRegExp = "(?i)<graphic\\:\\s?(.*)\\s?>"

                 var myDocument = app.documents.item(0);

                 //Clear the grep find/change preferences.

                 app.findGrepPreferences = NothingEnum.nothing;

                 app.changeGrepPreferences = NothingEnum.nothing;

                 app.findGrepPreferences.findWhat = myRegExp;

                 //Search the document.

                 var myFoundItems = myDocument.findGrep(true);

                 //Clear the find/change preferences after the search.

                 app.findGrepPreferences = NothingEnum.nothing;

                 app.changeGrepPreferences = NothingEnum.nothing;

                 if(myFoundItems.length != 0){

                      for(var myCounter = 0; myCounter < myFoundItems.length; myCounter ++){

                           //A potential problem comes up here: what if the graphic is too big

                           //to fit on the page? What if the text is overset? There are no

                           //foolproof solutions that can handle all of the possible problems

                           //that can arise; your best bet is to adjust your scripts to deal

                           //with the specific layouts of specific documents rather than to try to

                           //create a single function that can handle all situations for all

                           //possible documents.


                           //In this case, we simply make the frame a set size and place the graphic

                           //into the frame, then fit the graphic to the frame proportionally, and

                           //then fit the frame to the resized graphic.

                           myFoundItem = myFoundItems[myCounter];

                           myX1 = myFoundItem.characters.item(0).horizontalOffset;

                           myY1 = myFoundItem.characters.item(0).baseline;

                           myX2 = myX1 + 72;

                           myY2 = myY1 + 72;

                           myFileName = myFoundItem.contents.replace(/<graphic\:\s(.*)\s?>/i, "$1");

                           myFrame = myFoundItem.insertionPoints.item(0).rectangles.add();

                           //Recompose the text after adding the inline frame.


                           myFrame.geometricBounds = [myY1, myX1, myY2, myX2];


                                myInlineGraphic = myFrame.place(File(myFileName))[0];



                           } catch(myError){}



                 //Now replace the tags.

                 app.findGrepPreferences.findWhat = myRegExp;

                 app.changeGrepPreferences.changeTo = "";


                 //Clear the find/change preferences after the search.

                 app.findGrepPreferences = NothingEnum.nothing;

                 app.changeGrepPreferences = NothingEnum.nothing;



            function myTeardown(){


            function myGetBounds(myDocument, myPage){

                 var myPageWidth = myDocument.documentPreferences.pageWidth;

                 var myPageHeight = myDocument.documentPreferences.pageHeight

                 if(myPage.side == PageSideOptions.leftHand){

                      var myX2 = myPage.marginPreferences.left;

                      var myX1 = myPage.marginPreferences.right;



                      var myX1 = myPage.marginPreferences.left;

                      var myX2 = myPage.marginPreferences.right;


                 var myY1 = myPage.marginPreferences.top;

                 var myX2 = myPageWidth - myX2;

                 var myY2 = myPageHeight - myPage.marginPreferences.bottom;

                 return [myY1, myX1, myY2, myX2];