Skip to main content
Known Participant
February 6, 2013
Question

Need help in automating batch placing of images on spreads

  • February 6, 2013
  • 2 replies
  • 3948 views

My workflow is :

  • I have jpeg files (mostly 100+).
  • They are the size of 2 pages (e.g. 1 spread per jpeg file)
  • I need to place them on either even or odd page (aligned Top-Left).

Currently I’m doing this work manually.
Need help to automate this.

Thanks and regards.

This topic has been closed for replies.

2 replies

RuqAuthor
Known Participant
February 6, 2013

I tried my hands on JavaScript in InDesign for the first time, and thankfully I was able to make a script which did what I was doing manually.

Will post the script here after proper testing and debugging.

Thanks and regards.

Participating Frequently
February 6, 2013

Hi,

I have a very similar workflow. I have tried to edit the ImageCatalog.jsx myself, however, being a total JavaScript novis, I have had no luck.

Because I want to work within my active document, I am trying to alter line 236 -

var myDocument:Document = app.documents.add();

to

var myDocument:Document = app.activeDocument;

Of course, when I change this line, the rest of the script malfunctions susseccively. Currently I am running into confusion at line 241 -

var myNumberOfPages = Math.round(myNumberOfFrames / myFramesPerPage);

    if ((myNumberOfPages * myFramesPerPage) < myNumberOfFrames){ 

        myNumberOfPages++;

    }

If you edited an existing script, I would love some further explaination.

If you created a whole new script, I would be grateful for any resources you used as reference.

If you could post your script I would very much appreciate that too.

Thanks!

RuqAuthor
Known Participant
February 6, 2013

As I mentioned earlier I have very little experience with JavaScript.

I also copied the ImageCatalog script to a new file and read it atleast five times, and tried to wrap my head around the flow of execution.

The comments were really helpful in the process.

I proritized what i want to achive with my script and started deleting unwanted code. I also tested it frequently.

Here is my script as it stands right now.

function Init(){

            

        var myFilteredFiles;

        //Make certain that user interaction (display of dialogs, etc.) is turned on.

        app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

        myExtensions = [".jpg", ".jpeg"]

        //Display the folder browser.

        var myFolder = Folder.selectDialog("Select the folder containing the images", "");

        //Get the path to the folder containing the files you want to place.

        if(myFolder != null){

                    if(File.fs == "Macintosh"){

                        myFilteredFiles = myMacOSFileFilter(myFolder);

                    }

                    else{

                        myFilteredFiles = myWinOSFileFilter(myFolder);

                    }

                    if(myFilteredFiles.length != 0){

                            myPlaceImages(myFilteredFiles);

                            alert("Done!");

                    }

              }

        }

// call the initial function

Init();

//Windows version of the file filter.

function myWinOSFileFilter(myFolder){

          var myFiles = new Array;

          var myFilteredFiles = new Array;

          for(myExtensionCounter = 0; myExtensionCounter < myExtensions.length; myExtensionCounter++){

                    myExtension = myExtensions[myExtensionCounter];

        myFiles = myFolder.getFiles("*"+ myExtension);

                    if(myFiles.length != 0){

                              for(var myFileCounter = 0; myFileCounter < myFiles.length; myFileCounter++){

                                        myFilteredFiles.push(myFiles[myFileCounter]);

                              }

                    }

          }

          return myFilteredFiles;

}

function myMacOSFileFilter(myFolder){

          var myFilteredFiles = myFolder.getFiles(myFileFilter);

          return myFilteredFiles;

}

//Mac OS version of file filter

//Have to provide a separate version because not all Mac OS users use file extensions

//and/or file extensions are sometimes hidden by the Finder.

function myFileFilter(myFile){

          var myFileType = myFile.type;

          switch (myFileType){

                    case "JPEG":

        return true;

                              break;

                    default:

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

                              var myExtension = myExtensions[myCounter];

                              if(myFile.name.indexOf(myExtension)>-1){

                                        return true;

                                        break;

                              }

                    }

          }

          return false;

}

function myPlaceImages(myFiles){

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

        var myDocumentPreferences = myDocument.documentPreferences;        

       

        var myNumberOfFiles = myFiles.length;

       

        alert(myNumberOfFiles);

       

        var myNumberOfPages = (myNumberOfFiles * 2) + 1;

        myDocumentPreferences.pagesPerDocument = myNumberOfPages;       

       

       

        var myPage = myDocument.pages.item(0);

        var myPages = myDocument.pages;

         

       

        for (myCounter = myDocument.pages.length-1; myCounter >= 0; myCounter--){ 

            if(myCounter%2 == 1){

                 myPage = myPages.item(myCounter);

                var myLiveWidth = myDocumentPreferences.pageWidth

                var myLiveHeight = myDocumentPreferences.pageHeight

    

                myY1 = 0

                myY2 = myLiveHeight

                myX1 = 0

                myX2 = myLiveWidth * 2

                myRectangle = myPage.rectangles.add(myDocument.layers.item(-1), undefined, undefined, {geometricBounds:[myY1, myX1, myY2, myX2], strokeWeight:0, strokeColor:myDocument.swatches.item("None")}); 

        }

    }

        for (myCounter = 0; myCounter < myNumberOfFiles; myCounter++){ 

           

            myFile = myFiles[myCounter]; 

            //alert(myFile);           

            myRectangle = myDocument.rectangles.item(myCounter);

            myRectangle.place(File(myFile));

        }

                    for (var myCounter = myDocument.rectangles.length-1; myCounter >= 0;myCounter--){ 

                              if (myDocument.rectangles.item(myCounter).contentType == ContentType.unassigned){

                                        myDocument.rectangles.item(myCounter).remove();

                              } 

                              else{

                                        //As soon as you encounter a rectangle with content, exit the loop.

                                        break;

                              }

                    }

 

}

Jump_Over
Legend
February 6, 2013

Hi,

1st aid:

you could use ImageCatalog.jsx from application script samples.

or

you could modify it

or

you could create your own one...

so are you looking for help or someone who just can do it?

rgds

RuqAuthor
Known Participant
February 6, 2013

Thanks for the help.

I tried Image Catalog script. The script places each file on its own page, whereas i want to place one image per spread.

I have no experience in InDesign Scripting.

Will be very grateful if someone from the scripting gurus can help me out by making a simple and useful script.

Kindly help.

Thanks and regards.