Welcome Dialog

Welcome to the Community!

We have a brand new look! Take a tour with us and explore the latest updates on Adobe Support Community.


Is there an indesign script to arrange multiple objects in a matrix?

Explorer ,
Oct 25, 2020 Oct 25, 2020

Copy link to clipboard

Copied

can control the spacing and size.
The size can be controlled by calling the object style.
For example, I want to arrange 6 plates into: 2 columns and 3 rows.
The horizontal spacing is 4mm, and the vertical spacing is 8mm.

TOPICS
Bug, How to, Import and export, Scripting, Server developers

Views

558

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Adobe Community Professional , Nov 01, 2020 Nov 01, 2020
There are a lot of possible variables—are the objects different sizes, does their placement in the matrix matter, where is the position of the matrix on the page? This arranges a selection of same sized objects: #target indesign app.activeDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.MILLIMETERS; app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.MILLIMETERS; var s = app.activeDocument.selection; //number of columns and rows var col = 2;...

Likes

Translate

Translate
Adobe Community Professional ,
Oct 25, 2020 Oct 25, 2020

Copy link to clipboard

Copied

Can you share some screenshots for better understanding?

 

Sunil

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Nov 01, 2020 Nov 01, 2020

Copy link to clipboard

Copied

Sorry, I was a bit busy lately and did not reply in time.
Like this, 6 different pictures, I want to quickly get 2 columns, 3 rows, the spacing is 4mm.

There are hundreds of such pictures, if the number of columns, rows, and spacing may also change

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Oct 25, 2020 Oct 25, 2020

Copy link to clipboard

Copied

What type of objects?

Maybe "MakeGrid" which comes with InDesign is kind of what you're looking for?

MakeGrid.gif

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Nov 01, 2020 Nov 01, 2020

Copy link to clipboard

Copied

There are a lot of possible variables—are the objects different sizes, does their placement in the matrix matter, where is the position of the matrix on the page? This arranges a selection of same sized objects:

 


#target indesign

app.activeDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.MILLIMETERS;
app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.MILLIMETERS;

var s = app.activeDocument.selection;

//number of columns and rows
var col = 2; var row = 3;

//space between the frames
var xgut = 4;
var ygut = 8;

var colw = getPos(s)[0];
var colh = getPos(s)[1];
var xoff = getPos(s)[2];
var yoff = getPos(s)[3] - (colh + ygut);
var startX = xoff;

//make matrix using modulo to set the columns
for (var i = 0; i < s.length; i++){
    if (i % col > 0) {
        xoff = xoff + colw + xgut;
    }else{
        xoff = startX;
        yoff = yoff + colh + ygut;
    }
    s[i].move( [xoff, yoff] );
};   



/**
* Get matrix tile position 
* @Param the selection to arrange 
* @Return an array with colwidth, rowheight, x, and y 
* 
*/
function getPos(sel){
    var x = sel[0].geometricBounds[1];
    var y = sel[0].geometricBounds[0];
    
    var w = 0;
    var h = 0;
    var a = []
    for (var i = 0; i < sel.length; i++){
        var b = sel[i].geometricBounds;
        if (b[1] < x) {
            x = b[1]
        } 
        if (b[0] < y) {
            y = b[0]
        } 
        if (b[3]-b[1] > w) {
            w = b[3]-b[1]
        } 
        if (b[2]-b[0] > h) {
            h = b[2]-b[0]
        }
    };
    a=[w, h, x, y];
    return a
}

 

Screen Shot 11.pngScreen Shot 12.png

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Nov 01, 2020 Nov 01, 2020

Copy link to clipboard

Copied

Thanks Rob Day
You are very nice

This is exactly what i want

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Nov 03, 2020 Nov 03, 2020

Copy link to clipboard

Copied

This seems like a useful script so I added a dialog. It defaults to millimeters, but you can use any InDesign measurement unit, i.e. 1in. Haven’t tested much.

 

#target indesign
#targetengine "session"

//check for a doc
var s = app.activeDocument.selection;
if (s.length > 1) {
    makeDialog();
} else {alert("Please Select Some Frames.")}

//result variables
var xoff, syoff, col, row, xgut, ygut; 

/**
* Make the export settings dialog 
* @Return 
* 
*/
function makeDialog(){
    var mw = 90;

    //the dialog name
    var theDialog = app.dialogs.add({name:"Arrange Matrix", canCancel:true});
    with(theDialog){
        with(dialogColumns.add()){
            with(borderPanels.add()){
                with(dialogColumns.add()){
                    staticTexts.add({staticLabel:"Matrix X Pos:"});
                    staticTexts.add({staticLabel:"Matrix Y Pos:"});
                    staticTexts.add({staticLabel:"Columns:"});
                    staticTexts.add({staticLabel:"Rows:"});
                    staticTexts.add({staticLabel:"Column Gutter:"});
                    staticTexts.add({staticLabel:"Row Gutter:"});
                }
                with(dialogColumns.add()){
                    var matrixX = measurementEditboxes.add({editUnits:MeasurementUnits.MILLIMETERS, editValue:0, minWidth:mw});
                    var matrixY = measurementEditboxes.add({editUnits:MeasurementUnits.MILLIMETERS, editValue:0, minWidth:mw});
                    var nCol = integerEditboxes.add({editValue:2, minWidth:mw});
                    var nRow = integerEditboxes.add({editValue:2, minWidth:mw});
                    var colGutter = measurementEditboxes.add({editUnits:MeasurementUnits.MILLIMETERS, editValue:0, minWidth:mw});
                    var rowGutter = measurementEditboxes.add({editUnits:MeasurementUnits.MILLIMETERS, editValue:0, minWidth:mw});
                }
            }
        }
    }
	
    var dResult = theDialog.show();
    if(dResult == true){
        xoff = matrixX.editValue;
        syoff = matrixY.editValue;
        col = nCol.editValue;
        row = nRow.editValue;
        xgut = colGutter.editValue;
        ygut = rowGutter.editValue
        theDialog.destroy();
        makeMatrix();
	}else{
		theDialog.destroy();
	}
}



/**
* Discription 
* @Return void 
* 
*/
function makeMatrix(){
    
    var ohm = app.activeDocument.viewPreferences.horizontalMeasurementUnits;
    var ovm = app.activeDocument.viewPreferences.horizontalMeasurementUnits;
    app.activeDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.POINTS;
    app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.POINTS;
    

    var colw = getPos(s)[0];
    var colh = getPos(s)[1];
    var yoff = syoff - (colh + ygut);
    var startX = xoff;

    //make matrix using modulo to set the columns
    for (var i = 0; i < s.length; i++){
        if (i % col > 0) {
            xoff = xoff + colw + xgut;
        }else{
            xoff = startX;
            yoff = yoff + colh + ygut;
        }
            s[i].move( [xoff, yoff] );
    };   

    app.activeDocument.viewPreferences.horizontalMeasurementUnits = ohm;
    app.activeDocument.viewPreferences.verticalMeasurementUnits = ovm;
}


/**
* Get matrix tile position 
* @Param the selection to arrange 
* @Return an array with colwidth, rowheight 
* 
*/
function getPos(sel){
    var w = 0;
    var h = 0;
    var a = []
    for (var i = 0; i < sel.length; i++){
        var b = sel[i].geometricBounds;
        if (b[3]-b[1] > w) {
            w = b[3]-b[1]
        } 
        if (b[2]-b[0] > h) {
            h = b[2]-b[0]
        }
    };
    a=[w, h];
    return a
}

 

Screen Shot 36.png

 

 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 22, 2021 Apr 22, 2021

Copy link to clipboard

Copied

Hi~ Rob day.

Your script doesn't respond after double clicking.

It's strange that the last script used to work, but now it doesn't respond.

Is it because I use the latest version of InDesign?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Apr 22, 2021 Apr 22, 2021

Copy link to clipboard

Copied

Do you get an error message?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 22, 2021 Apr 22, 2021

Copy link to clipboard

Copied

There was no response to double clicking.

There is no message.

InDesign version: 16.1 X64

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Apr 23, 2021 Apr 23, 2021

Copy link to clipboard

Copied

It’s working for me. Here’s a compiled version:

 

https://shared-assets.adobe.com/link/cd84bf34-4a49-413b-5438-10aa7bdcf59f

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 23, 2021 Apr 23, 2021

Copy link to clipboard

Copied

what is it?

I can't open it, it will automatically jump to adobe.com The home page of.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Apr 23, 2021 Apr 23, 2021

Copy link to clipboard

Copied

Click Download to  download the script:

 

Screen Shot 17.png

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 23, 2021 Apr 23, 2021

Copy link to clipboard

Copied

After I click, the address will jump to www.adobe.com

Unable to reach the specified network

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Apr 24, 2021 Apr 24, 2021

Copy link to clipboard

Copied

Hmm worked for me. Maybe you need to log into your Adobe account?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 24, 2021 Apr 24, 2021

Copy link to clipboard

Copied

I've been here www.adobe.com inside

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 24, 2021 Apr 24, 2021

Copy link to clipboard

Copied

Maybe that file is missing, so skip to "www.adobe.com" home page.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Apr 24, 2021 Apr 24, 2021

Copy link to clipboard

Copied

The file is not missing, maybe try pasting the link address into your browser’s URL address field?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Apr 24, 2021 Apr 24, 2021

Copy link to clipboard

Copied

I downloaded it.

Switch to MS edge browser and it will be successful.

I tried, but still can't run, it should be because of my InDesign.

Let's wait for the next InDesign version.

Thank you all.

……

I now use three browsers to browse Adobe.com .

chromium、Maxthon、Edge

……

I thought edge would take it all, but only Maxthon can reply from time to time.

……

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Apr 26, 2021 Apr 26, 2021

Copy link to clipboard

Copied

LATEST

Hi dublove,

Firefox is working as well on my Windows 10 machine:

NoIssueToDownload-1.PNG

 

Also running the script on a selection of items:

( German InDesign 2021 on Windows 10. )

SelectionMatrixDialogScript-by-RobDay.PNG

 

Regards,
Uwe Laubender

( ACP )

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines