Copy link to clipboard
Copied
I have made this little script to quickly add margins to an illustrator document and am posting it here to anyone that might find this helpful.
The script will bring up a dialog where you can enter the sizes. Checking the equal box makes all sizes the same as the first.
You have the option of using Millimetres, Inches or Pixels for your units and a last option to apply to all artboards or just the active one.
The script then adds the guides to a locked layer called 'Margins' for convenience.
There are two versions for your taste- The first creates 4 seperate guidelines. The second creates one rectangle guide.
#target illustrator
var docRef = app.activeDocument;
var artboardRef = docRef.artboards;
var workingLayer = docRef.activeLayer;
//window
var win = new Window('dialog', "Add Margins");
this.windowRef = win;
//panels
win.fieldpanel = win.add("panel", undefined, "");
win.radiopanel = win.add("panel", undefined, "");
win.radiopanel2 = win.add("panel", undefined, "");
//panel orientation
win.fieldpanel.orientation='row';
win.radiopanel.orientation='row';
win.radiopanel2.orientation='row';
//fieldpanel
win.fieldpanel.panel1 = win.fieldpanel.add('panel', undefined, "Left");
win.fieldpanel.panel2 = win.fieldpanel.add('panel', undefined, "Right");
win.fieldpanel.panel3 = win.fieldpanel.add('panel', undefined, "Top");
win.fieldpanel.panel4 = win.fieldpanel.add('panel', undefined, "Bottom");
win.fieldpanel.panel1.left_input = win.fieldpanel.panel1.add('edittext', undefined, "0");
win.fieldpanel.panel2.right_input = win.fieldpanel.panel2.add('edittext', undefined, "0");
win.fieldpanel.panel3.top_input = win.fieldpanel.panel3.add('edittext', undefined, "0");
win.fieldpanel.panel4.bottom_input = win.fieldpanel.panel4.add('edittext', undefined, "0");
win.fieldpanel.panel1.left_input.characters = 5;
win.fieldpanel.panel2.right_input.characters = 5;
win.fieldpanel.panel3.top_input.characters = 5;
win.fieldpanel.panel4.bottom_input.characters = 5;
win.fieldpanel.check1 = win.fieldpanel.add('checkbox', undefined, "Equal");
//radiopanel
win.radiopanel.radio1 = win.radiopanel.add('radiobutton',undefined, "mm");
win.radiopanel.radio2 = win.radiopanel.add('radiobutton',undefined, "in");
win.radiopanel.radio3 = win.radiopanel.add('radiobutton',undefined, "px");
//radiopanel2
win.radiopanel2.radio1 = win.radiopanel2.add('radiobutton',undefined, "All Artboards");
win.radiopanel2.radio2 = win.radiopanel2.add('radiobutton',undefined, "Active Artboard");
//select first radio buttons
win.radiopanel.radio1.value = true;
win.radiopanel2.radio1.value = true;
//ok button
win.okbutton = win.add('button', undefined, "Ok");
//disable fields with checkbox and equal values
win.fieldpanel.check1.onClick = function() {
if(win.fieldpanel.check1.value){
var leftvalue = win.fieldpanel.panel1.left_input.text;
win.fieldpanel.panel2.right_input.text = leftvalue;
win.fieldpanel.panel3.top_input.text = leftvalue;
win.fieldpanel.panel4.bottom_input.text = leftvalue;
win.fieldpanel.panel2.right_input.enabled = false;
win.fieldpanel.panel3.top_input.enabled = false;
win.fieldpanel.panel4.bottom_input.enabled = false;
} else {
win.fieldpanel.panel2.right_input.enabled = true;
win.fieldpanel.panel3.top_input.enabled = true;
win.fieldpanel.panel4.bottom_input.enabled = true;
}
};
//sync values while checked
win.fieldpanel.panel1.left_input.onChanging = function (){
if(win.fieldpanel.check1.value){
var leftvalue = win.fieldpanel.panel1.left_input.text;
win.fieldpanel.panel2.right_input.text = leftvalue;
win.fieldpanel.panel3.top_input.text = leftvalue;
win.fieldpanel.panel4.bottom_input.text = leftvalue;
}
};
//event listener for ok button
win.okbutton.onClick = function(){
var leftvalue = win.fieldpanel.panel1.left_input.text;
var rightvalue = win.fieldpanel.panel2.right_input.text;
var topvalue = win.fieldpanel.panel3.top_input.text;
var bottomvalue = win.fieldpanel.panel4.bottom_input.text;
if(win.radiopanel.radio1.value) {
var multiplier = 2.834645669291339
}
if(win.radiopanel.radio2.value) {
var multiplier = 72
}
if(win.radiopanel.radio3.value) {
var multiplier = 1
}
//close window
win.close();
//make a margins layer
var guideLayer = docRef.layers.add();
guideLayer.name = "Margins";
if(win.radiopanel2.radio1.value) {
//repeat for each artboard
for(i=0;i<artboardRef.length;i++){
//get artboard size
var left=artboardRef[i].artboardRect[0];
var top=artboardRef[i].artboardRect[1] ;
var right=artboardRef[i].artboardRect[2] ;
var bottom=artboardRef[i].artboardRect[3] ;
//create lines
var lineLeft = docRef.pathItems.add();
var lineRight = docRef.pathItems.add();
var lineTop = docRef.pathItems.add();
var lineBottom = docRef.pathItems.add();
//set line points
var leftmargin = (leftvalue * multiplier);
var rightmargin = (rightvalue * multiplier);
var topmargin = (topvalue * multiplier);
var bottommargin = (bottomvalue * multiplier);
//set line points
lineLeft.setEntirePath([[left + leftmargin, top], [left + leftmargin, bottom]]);
lineRight.setEntirePath([[right - rightmargin, top], [right - rightmargin, bottom]]);
lineTop.setEntirePath([[left, top - topmargin], [right, top - topmargin]]);
lineBottom.setEntirePath([[left, bottom + bottommargin], [right, bottom + bottommargin]]);
//make lines guides
lineLeft.guides = true;
lineRight.guides = true;
lineTop.guides = true;
lineBottom.guides = true;
};
} else {
//get artboard size
var activeAB = docRef.artboards[docRef.artboards.getActiveArtboardIndex()]; // get active AB
var left = activeAB.artboardRect[0];
var top = activeAB.artboardRect[1] ;
var right = activeAB.artboardRect[2] ;
var bottom = activeAB.artboardRect[3] ;
//create lines
var lineLeft = docRef.pathItems.add();
var lineRight = docRef.pathItems.add();
var lineTop = docRef.pathItems.add();
var lineBottom = docRef.pathItems.add();
//set line points
var leftmargin = (leftvalue * multiplier);
var rightmargin = (rightvalue * multiplier);
var topmargin = (topvalue * multiplier);
var bottommargin = (bottomvalue * multiplier);
//set line points
lineLeft.setEntirePath([[left + leftmargin, top], [left + leftmargin, bottom]]);
lineRight.setEntirePath([[right - rightmargin, top], [right - rightmargin, bottom]]);
lineTop.setEntirePath([[left, top - topmargin], [right, top - topmargin]]);
lineBottom.setEntirePath([[left, bottom + bottommargin], [right, bottom + bottommargin]]);
//make lines guides
lineLeft.guides = true;
lineRight.guides = true;
lineTop.guides = true;
lineBottom.guides = true;
};
//lock margins layer and activate original layer
guideLayer.zOrder (ZOrderMethod.SENDTOBACK);
guideLayer.locked = true;
docRef.activeLayer = workingLayer;
};
win.show();
Box Margin Version:
#target illustrator
var docRef = app.activeDocument;
var artboardRef = docRef.artboards;
var workingLayer = docRef.activeLayer;
//window
var win = new Window('dialog', "Add Margins");
this.windowRef = win;
//panels
win.fieldpanel = win.add("panel", undefined, "");
win.radiopanel = win.add("panel", undefined, "");
win.radiopanel2 = win.add("panel", undefined, "");
//panel orientation
win.fieldpanel.orientation='row';
win.radiopanel.orientation='row';
win.radiopanel2.orientation='row';
//fieldpanel
win.fieldpanel.panel1 = win.fieldpanel.add('panel', undefined, "Left");
win.fieldpanel.panel2 = win.fieldpanel.add('panel', undefined, "Right");
win.fieldpanel.panel3 = win.fieldpanel.add('panel', undefined, "Top");
win.fieldpanel.panel4 = win.fieldpanel.add('panel', undefined, "Bottom");
win.fieldpanel.panel1.left_input = win.fieldpanel.panel1.add('edittext', undefined, "0");
win.fieldpanel.panel2.right_input = win.fieldpanel.panel2.add('edittext', undefined, "0");
win.fieldpanel.panel3.top_input = win.fieldpanel.panel3.add('edittext', undefined, "0");
win.fieldpanel.panel4.bottom_input = win.fieldpanel.panel4.add('edittext', undefined, "0");
win.fieldpanel.panel1.left_input.characters = 5;
win.fieldpanel.panel2.right_input.characters = 5;
win.fieldpanel.panel3.top_input.characters = 5;
win.fieldpanel.panel4.bottom_input.characters = 5;
win.fieldpanel.check1 = win.fieldpanel.add('checkbox', undefined, "Equal");
//radiopanel
win.radiopanel.radio1 = win.radiopanel.add('radiobutton',undefined, "mm");
win.radiopanel.radio2 = win.radiopanel.add('radiobutton',undefined, "in");
win.radiopanel.radio3 = win.radiopanel.add('radiobutton',undefined, "px");
//radiopanel2
win.radiopanel2.radio1 = win.radiopanel2.add('radiobutton',undefined, "All Artboards");
win.radiopanel2.radio2 = win.radiopanel2.add('radiobutton',undefined, "Active Artboard");
//select first radio buttons
win.radiopanel.radio1.value = true;
win.radiopanel2.radio1.value = true;
//ok button
win.okbutton = win.add('button', undefined, "Ok");
//disable fields with checkbox and equal values
win.fieldpanel.check1.onClick = function() {
if(win.fieldpanel.check1.value){
var leftvalue = win.fieldpanel.panel1.left_input.text;
win.fieldpanel.panel2.right_input.text = leftvalue;
win.fieldpanel.panel3.top_input.text = leftvalue;
win.fieldpanel.panel4.bottom_input.text = leftvalue;
win.fieldpanel.panel2.right_input.enabled = false;
win.fieldpanel.panel3.top_input.enabled = false;
win.fieldpanel.panel4.bottom_input.enabled = false;
} else {
win.fieldpanel.panel2.right_input.enabled = true;
win.fieldpanel.panel3.top_input.enabled = true;
win.fieldpanel.panel4.bottom_input.enabled = true;
}
};
//sync values while checked
win.fieldpanel.panel1.left_input.onChanging = function (){
if(win.fieldpanel.check1.value){
var leftvalue = win.fieldpanel.panel1.left_input.text;
win.fieldpanel.panel2.right_input.text = leftvalue;
win.fieldpanel.panel3.top_input.text = leftvalue;
win.fieldpanel.panel4.bottom_input.text = leftvalue;
}
};
//event listener for ok button
win.okbutton.onClick = function(){
var leftvalue = win.fieldpanel.panel1.left_input.text;
var rightvalue = win.fieldpanel.panel2.right_input.text;
var topvalue = win.fieldpanel.panel3.top_input.text;
var bottomvalue = win.fieldpanel.panel4.bottom_input.text;
if(win.radiopanel.radio1.value) {
var multiplier = 2.834645669291339
}
if(win.radiopanel.radio2.value) {
var multiplier = 72
}
if(win.radiopanel.radio3.value) {
var multiplier = 1
}
//close window
win.close();
//make a margins layer
var guideLayer = docRef.layers.add();
guideLayer.name = "Margins";
if(win.radiopanel2.radio1.value) {
//repeat for each artboard
for(i=0;i<artboardRef.length;i++){
//get artboard size
var top=artboardRef[i].artboardRect[1] ;
var left=artboardRef[i].artboardRect[0];
var width=artboardRef[i].artboardRect[2]-artboardRef[i].artboardRect[0];
var height=artboardRef[i].artboardRect[1]-artboardRef[i].artboardRect[3];
//set margin sizes
var leftmargin = (leftvalue * multiplier);
var rightmargin = (rightvalue * multiplier);
var topmargin = (topvalue * multiplier);
var bottommargin = (bottomvalue * multiplier);
//create box
var box = docRef.pathItems.rectangle (top - topmargin, left + leftmargin, width - rightmargin - leftmargin, height - topmargin - bottommargin);
box.fillColor = box.strokeColor = new NoColor();
//make box guides
box.guides = true;
};
} else {
//get artboard size
var activeAB = docRef.artboards[docRef.artboards.getActiveArtboardIndex()]; // get active AB
var left = activeAB.artboardRect[0];
var top = activeAB.artboardRect[1] ;
var width = activeAB.artboardRect[2]-activeAB.artboardRect[0];
var height = activeAB.artboardRect[1]-activeAB.artboardRect[3];
//set margin sizes
var leftmargin = (leftvalue * multiplier);
var rightmargin = (rightvalue * multiplier);
var topmargin = (topvalue * multiplier);
var bottommargin = (bottomvalue * multiplier);
//create box
var box = docRef.pathItems.rectangle (top - topmargin, left + leftmargin, width - rightmargin - leftmargin, height - topmargin - bottommargin);
box.fillColor = box.strokeColor = new NoColor();
//make box guides
box.guides = true;
};
//lock margins layer and activate original layer
guideLayer.zOrder (ZOrderMethod.SENDTOBACK);
guideLayer.locked = true;
docRef.activeLayer = workingLayer;
};
win.show();
Copy link to clipboard
Copied
nice, thanks for sharing.
may I suggest something? combine them into one!!
Copy link to clipboard
Copied
Yes that would be sensible! don't know why I didn't...
Here is a combined script:
#target illustrator
var docRef = app.activeDocument;
var artboardRef = docRef.artboards;
var workingLayer = docRef.activeLayer;
//window
var win = new Window('dialog', "Add Margins");
this.windowRef = win;
//panels
win.fieldpanel = win.add("panel", undefined, "Sizes");
win.radiopanel = win.add("panel", undefined, "Units");
win.optionpanel = win.add("panel", undefined, "Options");
win.optionpanel.radiopanel2 = win.optionpanel.add("panel", undefined, "Artboard");
win.optionpanel.radiopanel3 = win.optionpanel.add("panel", undefined, "Margin Type");
//panel orientation
win.fieldpanel.orientation='row';
win.radiopanel.orientation='row';
win.optionpanel.radiopanel2.orientation='row';
win.optionpanel.radiopanel3.orientation='row';
win.optionpanel.orientation='row';
//fieldpanel
win.fieldpanel.panel1 = win.fieldpanel.add('panel', undefined, "Left");
win.fieldpanel.panel2 = win.fieldpanel.add('panel', undefined, "Right");
win.fieldpanel.panel3 = win.fieldpanel.add('panel', undefined, "Top");
win.fieldpanel.panel4 = win.fieldpanel.add('panel', undefined, "Bottom");
win.fieldpanel.panel1.left_input = win.fieldpanel.panel1.add('edittext', undefined, "0");
win.fieldpanel.panel2.right_input = win.fieldpanel.panel2.add('edittext', undefined, "0");
win.fieldpanel.panel3.top_input = win.fieldpanel.panel3.add('edittext', undefined, "0");
win.fieldpanel.panel4.bottom_input = win.fieldpanel.panel4.add('edittext', undefined, "0");
win.fieldpanel.panel1.left_input.characters = 5;
win.fieldpanel.panel2.right_input.characters = 5;
win.fieldpanel.panel3.top_input.characters = 5;
win.fieldpanel.panel4.bottom_input.characters = 5;
win.fieldpanel.check1 = win.fieldpanel.add('checkbox', undefined, "Equal");
//radiopanel
win.radiopanel.radio1 = win.radiopanel.add('radiobutton',undefined, "mm");
win.radiopanel.radio2 = win.radiopanel.add('radiobutton',undefined, "in");
win.radiopanel.radio3 = win.radiopanel.add('radiobutton',undefined, "px");
//radiopanel2
win.optionpanel.radiopanel2.radio1 = win.optionpanel.radiopanel2.add('radiobutton',undefined, "All Artboards");
win.optionpanel.radiopanel2.radio2 = win.optionpanel.radiopanel2.add('radiobutton',undefined, "Active Artboard");
//radiopanel3
win.optionpanel.radiopanel3.radio1 = win.optionpanel.radiopanel3.add('radiobutton',undefined, "Margin Lines");
win.optionpanel.radiopanel3.radio2 = win.optionpanel.radiopanel3.add('radiobutton',undefined, "Margin Box");
//select first radio buttons
win.radiopanel.radio1.value = true;
win.optionpanel.radiopanel2.radio1.value = true;
win.optionpanel.radiopanel3.radio1.value = true;
//buttons
win.okbutton = win.add('button', undefined, "Ok");
//disable fields with checkbox and equal values
win.fieldpanel.check1.onClick = function() {
if(win.fieldpanel.check1.value){
var leftvalue = win.fieldpanel.panel1.left_input.text;
win.fieldpanel.panel2.right_input.text = leftvalue;
win.fieldpanel.panel3.top_input.text = leftvalue;
win.fieldpanel.panel4.bottom_input.text = leftvalue;
win.fieldpanel.panel2.right_input.enabled = false;
win.fieldpanel.panel3.top_input.enabled = false;
win.fieldpanel.panel4.bottom_input.enabled = false;
} else {
win.fieldpanel.panel2.right_input.enabled = true;
win.fieldpanel.panel3.top_input.enabled = true;
win.fieldpanel.panel4.bottom_input.enabled = true;
}
};
//sync values while checked
win.fieldpanel.panel1.left_input.onChanging = function (){
if(win.fieldpanel.check1.value){
var leftvalue = win.fieldpanel.panel1.left_input.text;
win.fieldpanel.panel2.right_input.text = leftvalue;
win.fieldpanel.panel3.top_input.text = leftvalue;
win.fieldpanel.panel4.bottom_input.text = leftvalue;
}
};
//event listener for ok button
win.okbutton.onClick = function(){
var leftvalue = win.fieldpanel.panel1.left_input.text;
var rightvalue = win.fieldpanel.panel2.right_input.text;
var topvalue = win.fieldpanel.panel3.top_input.text;
var bottomvalue = win.fieldpanel.panel4.bottom_input.text;
if(win.radiopanel.radio1.value) {
var multiplier = 2.834645669291339
}
if(win.radiopanel.radio2.value) {
var multiplier = 72
}
if(win.radiopanel.radio3.value) {
var multiplier = 1
}
//make a margins layer
var guideLayer = docRef.layers.add();
guideLayer.name = "Margins";
if(win.optionpanel.radiopanel2.radio1.value) {
//repeat for each artboard
for(i=0;i<artboardRef.length;i++){
//get artboard size
var left = artboardRef[i].artboardRect[0];
var top = artboardRef[i].artboardRect[1] ;
var right = artboardRef[i].artboardRect[2] ;
var bottom = artboardRef[i].artboardRect[3] ;
var width = artboardRef[i].artboardRect[2]-artboardRef[i].artboardRect[0];
var height = artboardRef[i].artboardRect[1]-artboardRef[i].artboardRect[3];
//create lines
var lineLeft = docRef.pathItems.add();
var lineRight = docRef.pathItems.add();
var lineTop = docRef.pathItems.add();
var lineBottom = docRef.pathItems.add();
//set margin values
var leftmargin = (leftvalue * multiplier);
var rightmargin = (rightvalue * multiplier);
var topmargin = (topvalue * multiplier);
var bottommargin = (bottomvalue * multiplier);
if(win.optionpanel.radiopanel3.radio1.value) {
//set line points
lineLeft.setEntirePath([[left + leftmargin, top], [left + leftmargin, bottom]]);
lineRight.setEntirePath([[right - rightmargin, top], [right - rightmargin, bottom]]);
lineTop.setEntirePath([[left, top - topmargin], [right, top - topmargin]]);
lineBottom.setEntirePath([[left, bottom + bottommargin], [right, bottom + bottommargin]]);
//make lines guides
lineLeft.guides = true;
lineRight.guides = true;
lineTop.guides = true;
lineBottom.guides = true;
} else {
//create box
var box = docRef.pathItems.rectangle (top - topmargin, left + leftmargin, width - rightmargin - leftmargin, height - topmargin - bottommargin);
box.fillColor = box.strokeColor = new NoColor();
//make box guides
box.guides = true;
};
};
} else {
//get artboard size
var activeAB = docRef.artboards[docRef.artboards.getActiveArtboardIndex()]; // get active AB
var left = activeAB.artboardRect[0];
var top = activeAB.artboardRect[1] ;
var right = activeAB.artboardRect[2] ;
var bottom = activeAB.artboardRect[3] ;
var width = activeAB.artboardRect[2]-activeAB.artboardRect[0];
var height = activeAB.artboardRect[1]-activeAB.artboardRect[3];
//create lines
var lineLeft = docRef.pathItems.add();
var lineRight = docRef.pathItems.add();
var lineTop = docRef.pathItems.add();
var lineBottom = docRef.pathItems.add();
//set margin values
var leftmargin = (leftvalue * multiplier);
var rightmargin = (rightvalue * multiplier);
var topmargin = (topvalue * multiplier);
var bottommargin = (bottomvalue * multiplier);
if(win.optionpanel.radiopanel3.radio1.value) {
//set line points
lineLeft.setEntirePath([[left + leftmargin, top], [left + leftmargin, bottom]]);
lineRight.setEntirePath([[right - rightmargin, top], [right - rightmargin, bottom]]);
lineTop.setEntirePath([[left, top - topmargin], [right, top - topmargin]]);
lineBottom.setEntirePath([[left, bottom + bottommargin], [right, bottom + bottommargin]]);
//make lines guides
lineLeft.guides = true;
lineRight.guides = true;
lineTop.guides = true;
lineBottom.guides = true;
} else {
//create box
var box = docRef.pathItems.rectangle (top - topmargin, left + leftmargin, width - rightmargin - leftmargin, height - topmargin - bottommargin);
box.fillColor = box.strokeColor = new NoColor();
//make box guides
box.guides = true;
};
};
//lock margins layer and activate original layer
guideLayer.zOrder (ZOrderMethod.SENDTOBACK);
guideLayer.locked = true;
docRef.activeLayer = workingLayer;
//close window
win.close();
};
win.show();
Copy link to clipboard
Copied
thanks, much more efficient.
thanks
Copy link to clipboard
Copied
I know it's been a few years, but I just discovered your script. Very handy. Thank you!!
Copy link to clipboard
Copied
thanks so much for this!!!! In AI 2023 it only works on a single page (not "all artboards") and nothing shows when I choose "margin lines", but with active artboard and margin box selected it will save me hours of work each month! Thanks again.
Copy link to clipboard
Copied
the forum migration to a new platform a couple of years ago messed up some of the scripts. Try copying the script again, I just fixed it.
Copy link to clipboard
Copied
thanks, this works much better - only problem now is on large documents. For example, a 110" square ai doc, if I set the margins to 6", they actuually appear at what looks to be 49" in.
I'm unable to get illustrator 28.1 to snap to guides properly so it's hard to tell exactly the size.
Copy link to clipboard
Copied
for large canvas try using a 10th of your value, 0.6"
Copy link to clipboard
Copied
Thanks for the script, been needing almost this exact setup for the start of something else. Is there anyway to get it so that when I enter 1 and click equal, it now puts a guide at each side and top/bottom at 1 inch, but i also need it to do it at.25 and .5 inch as well as the 1. Is it possible to get all 3 guides placed with one entry? 1st pic is current output, 2nd is what im needing for the guides
Copy link to clipboard
Copied
here you go, this version will add 3 guides per side, full size as entered in the UI, then 2 more at half the previous size. ie if you enter 1/2", then two more guides will be created at 1/4" and 1/8"
// add guides by eiranix
// https://community.adobe.com/t5/illustrator-discussions/add-margins-in-illustrator/m-p/14543246#M403970
// v2 - this version will create 3 guides per side as per defaultfrzzkd6qqsht request
var docRef = app.activeDocument;
var artboardRef = docRef.artboards;
var workingLayer = docRef.activeLayer;
//window
var win = new Window('dialog', "Add Margins");
this.windowRef = win;
//panels
win.fieldpanel = win.add("panel", undefined, "Sizes");
win.radiopanel = win.add("panel", undefined, "Units");
win.optionpanel = win.add("panel", undefined, "Options");
win.optionpanel.radiopanel2 = win.optionpanel.add("panel", undefined, "Artboard");
win.optionpanel.radiopanel3 = win.optionpanel.add("panel", undefined, "Margin Type");
//panel orientation
win.fieldpanel.orientation='row';
win.radiopanel.orientation='row';
win.optionpanel.radiopanel2.orientation='row';
win.optionpanel.radiopanel3.orientation='row';
win.optionpanel.orientation='row';
//fieldpanel
win.fieldpanel.panel1 = win.fieldpanel.add('panel', undefined, "Left");
win.fieldpanel.panel2 = win.fieldpanel.add('panel', undefined, "Right");
win.fieldpanel.panel3 = win.fieldpanel.add('panel', undefined, "Top");
win.fieldpanel.panel4 = win.fieldpanel.add('panel', undefined, "Bottom");
win.fieldpanel.panel1.left_input = win.fieldpanel.panel1.add('edittext', undefined, "1");
win.fieldpanel.panel2.right_input = win.fieldpanel.panel2.add('edittext', undefined, "0");
win.fieldpanel.panel3.top_input = win.fieldpanel.panel3.add('edittext', undefined, "0");
win.fieldpanel.panel4.bottom_input = win.fieldpanel.panel4.add('edittext', undefined, "0");
win.fieldpanel.panel1.left_input.characters = 5;
win.fieldpanel.panel2.right_input.characters = 5;
win.fieldpanel.panel3.top_input.characters = 5;
win.fieldpanel.panel4.bottom_input.characters = 5;
win.fieldpanel.check1 = win.fieldpanel.add('checkbox', undefined, "Equal");
//radiopanel
win.radiopanel.radio1 = win.radiopanel.add('radiobutton',undefined, "mm");
win.radiopanel.radio2 = win.radiopanel.add('radiobutton',undefined, "in");
win.radiopanel.radio3 = win.radiopanel.add('radiobutton',undefined, "px");
//radiopanel2
win.optionpanel.radiopanel2.radio1 = win.optionpanel.radiopanel2.add('radiobutton',undefined, "All Artboards");
win.optionpanel.radiopanel2.radio2 = win.optionpanel.radiopanel2.add('radiobutton',undefined, "Active Artboard");
//radiopanel3
win.optionpanel.radiopanel3.radio1 = win.optionpanel.radiopanel3.add('radiobutton',undefined, "Margin Lines");
win.optionpanel.radiopanel3.radio2 = win.optionpanel.radiopanel3.add('radiobutton',undefined, "Margin Box");
//select first radio buttons
win.radiopanel.radio2.value = true; // inches
win.optionpanel.radiopanel2.radio1.value = true;
win.optionpanel.radiopanel3.radio1.value = true;
//buttons
win.okbutton = win.add('button', undefined, "Ok");
//disable fields with checkbox and equal values
win.fieldpanel.check1.onClick = function() {
if(win.fieldpanel.check1.value){
var leftvalue = win.fieldpanel.panel1.left_input.text;
win.fieldpanel.panel2.right_input.text = leftvalue;
win.fieldpanel.panel3.top_input.text = leftvalue;
win.fieldpanel.panel4.bottom_input.text = leftvalue;
win.fieldpanel.panel2.right_input.enabled = false;
win.fieldpanel.panel3.top_input.enabled = false;
win.fieldpanel.panel4.bottom_input.enabled = false;
} else {
win.fieldpanel.panel2.right_input.enabled = true;
win.fieldpanel.panel3.top_input.enabled = true;
win.fieldpanel.panel4.bottom_input.enabled = true;
}
};
//sync values while checked
win.fieldpanel.panel1.left_input.onChanging = function (){
if(win.fieldpanel.check1.value){
var leftvalue = win.fieldpanel.panel1.left_input.text;
win.fieldpanel.panel2.right_input.text = leftvalue;
win.fieldpanel.panel3.top_input.text = leftvalue;
win.fieldpanel.panel4.bottom_input.text = leftvalue;
}
};
//event listener for ok button
win.okbutton.onClick = function(){
var leftvalue = win.fieldpanel.panel1.left_input.text;
var rightvalue = win.fieldpanel.panel2.right_input.text;
var topvalue = win.fieldpanel.panel3.top_input.text;
var bottomvalue = win.fieldpanel.panel4.bottom_input.text;
// carlos edit for defaultfrzzkd6qqsht, to add 1" but also 1/2" and 1/4"
var sizehalving = [1,2,2];
//make a margins layer
var guideLayer = docRef.layers.add();
guideLayer.name = "Margins";
for (var bb=0; bb<sizehalving.length; bb++) {
leftvalue = leftvalue/sizehalving[bb];
rightvalue = rightvalue/sizehalving[bb];
topvalue = topvalue/sizehalving[bb];
bottomvalue = bottomvalue/sizehalving[bb];
if(win.radiopanel.radio1.value) {
var multiplier = 2.834645669291339
}
if(win.radiopanel.radio2.value) {
var multiplier = 72
}
if(win.radiopanel.radio3.value) {
var multiplier = 1
}
if(win.optionpanel.radiopanel2.radio1.value) {
//repeat for each artboard
for(i=0;i<artboardRef.length;i++){
//get artboard size
var left = artboardRef[i].artboardRect[0];
var top = artboardRef[i].artboardRect[1] ;
var right = artboardRef[i].artboardRect[2] ;
var bottom = artboardRef[i].artboardRect[3] ;
var width = artboardRef[i].artboardRect[2]-artboardRef[i].artboardRect[0];
var height = artboardRef[i].artboardRect[1]-artboardRef[i].artboardRect[3];
//create lines
var lineLeft = docRef.pathItems.add();
var lineRight = docRef.pathItems.add();
var lineTop = docRef.pathItems.add();
var lineBottom = docRef.pathItems.add();
//set margin values
var leftmargin = (leftvalue * multiplier);
var rightmargin = (rightvalue * multiplier);
var topmargin = (topvalue * multiplier);
var bottommargin = (bottomvalue * multiplier);
if(win.optionpanel.radiopanel3.radio1.value) {
//set line points
lineLeft.setEntirePath([[left + leftmargin, top], [left + leftmargin, bottom]]);
lineRight.setEntirePath([[right - rightmargin, top], [right - rightmargin, bottom]]);
lineTop.setEntirePath([[left, top - topmargin], [right, top - topmargin]]);
lineBottom.setEntirePath([[left, bottom + bottommargin], [right, bottom + bottommargin]]);
//make lines guides
lineLeft.guides = true;
lineRight.guides = true;
lineTop.guides = true;
lineBottom.guides = true;
} else {
//create box
var box = docRef.pathItems.rectangle (top - topmargin, left + leftmargin, width - rightmargin - leftmargin, height - topmargin - bottommargin);
box.fillColor = box.strokeColor = new NoColor();
//make box guides
box.guides = true;
};
};
} else {
//get artboard size
var activeAB = docRef.artboards[docRef.artboards.getActiveArtboardIndex()]; // get active AB
var left = activeAB.artboardRect[0];
var top = activeAB.artboardRect[1] ;
var right = activeAB.artboardRect[2] ;
var bottom = activeAB.artboardRect[3] ;
var width = activeAB.artboardRect[2]-activeAB.artboardRect[0];
var height = activeAB.artboardRect[1]-activeAB.artboardRect[3];
//create lines
var lineLeft = docRef.pathItems.add();
var lineRight = docRef.pathItems.add();
var lineTop = docRef.pathItems.add();
var lineBottom = docRef.pathItems.add();
//set margin values
var leftmargin = (leftvalue * multiplier);
var rightmargin = (rightvalue * multiplier);
var topmargin = (topvalue * multiplier);
var bottommargin = (bottomvalue * multiplier);
if(win.optionpanel.radiopanel3.radio1.value) {
//set line points
lineLeft.setEntirePath([[left + leftmargin, top], [left + leftmargin, bottom]]);
lineRight.setEntirePath([[right - rightmargin, top], [right - rightmargin, bottom]]);
lineTop.setEntirePath([[left, top - topmargin], [right, top - topmargin]]);
lineBottom.setEntirePath([[left, bottom + bottommargin], [right, bottom + bottommargin]]);
//make lines guides
lineLeft.guides = true;
lineRight.guides = true;
lineTop.guides = true;
lineBottom.guides = true;
} else {
//create box
var box = docRef.pathItems.rectangle (top - topmargin, left + leftmargin, width - rightmargin - leftmargin, height - topmargin - bottommargin);
box.fillColor = box.strokeColor = new NoColor();
//make box guides
box.guides = true;
};
};
}; // end carlos edit
//lock margins layer and activate original layer
guideLayer.zOrder (ZOrderMethod.SENDTOBACK);
guideLayer.locked = true;
docRef.activeLayer = workingLayer;
//close window
win.close();
};
win.show();
Copy link to clipboard
Copied
I've made some modifications and improvements to the script to make it easier to use and more feature complete:
The configuration file will be created automatically if it doesn't exist, editing it will update the default options.
// AddMargins by eiranix
// https://community.adobe.com/t5/illustrator-discussions/add-margins-in-illustrator/m-p/14543246#M403970
// Version 3.0 - 2025-09-08, edited by Rutger Valk-van de Klundert
// Renamed to AddMargins as it's more appropriate to what the script does
// Added option to create multiple guide sizes (1x, 0.5x, 0.5x)
// Added option to lock the margins layer
// Changed default settings
// Added document units as a unit option
// Improved the UI a bit
// Cleaned up the code a bit
// Added JSON configuration support
var docRef = app.activeDocument;
var artboardRef = docRef.artboards;
var workingLayer = docRef.activeLayer;
// Configuration system
var CONFIG = {
// Default values - modify these or load from file
defaults: {
leftValue: "10",
rightValue: "0",
topValue: "0",
bottomValue: "0",
equalInputs: true,
unitType: "document", // "mm", "in", "px", "document"
allArtboards: false, // true = all artboards, false = active artboard
marginType: "box", // "lines" or "box"
locked: true,
multipleGuides: false
},
// Get config file path (same directory as script)
getConfigPath: function() {
var scriptFile = new File($.fileName);
var scriptFolder = scriptFile.parent;
return new File(scriptFolder + "/AddMargins_config.json");
},
// Load configuration from JSON file
load: function() {
var configFile = this.getConfigPath();
if (configFile.exists) {
try {
configFile.open("r");
var content = configFile.read();
configFile.close();
// Simple JSON parsing (ExtendScript compatible)
var config = eval("(" + content + ")");
// Merge with defaults
for (var key in config) {
if (this.defaults.hasOwnProperty(key)) {
this.defaults[key] = config[key];
}
}
return true;
} catch (e) {
// File exists but couldn't be parsed, use defaults
return false;
}
}
return false;
},
// Save configuration to JSON file
save: function(values) {
try {
var configFile = this.getConfigPath();
configFile.open("w");
// Create JSON string manually (ExtendScript compatible)
var jsonStr = "{\n";
var props = [];
for (var key in values) {
if (typeof values[key] === "string") {
props.push(' "' + key + '": "' + values[key] + '"');
} else {
props.push(' "' + key + '": ' + values[key]);
}
}
jsonStr += props.join(",\n") + "\n}";
configFile.write(jsonStr);
configFile.close();
return true;
} catch (e) {
return false;
}
}
};
// Load configuration
CONFIG.load();
// Window
var win = new Window("dialog", "Add Margins");
this.windowRef = win;
// Panels
win.inputPanel = win.add("panel", undefined, "Sizes");
win.unitPanel = win.add("panel", undefined, "Units");
win.optionPanel = win.add("panel", undefined, "Options");
win.optionPanel.artboardOptions = win.optionPanel.add("panel", undefined, "Artboard");
win.optionPanel.marginOptions = win.optionPanel.add("panel", undefined, "Margin Type");
win.optionPanel.sizingOptions = win.optionPanel.add("panel", undefined, "Size Halving");
// Panel orientation
win.inputPanel.orientation = "row";
win.unitPanel.orientation = "row";
win.optionPanel.alignChildren = "fill";
win.optionPanel.artboardOptions.orientation = "row";
win.optionPanel.marginOptions.orientation = "row";
win.optionPanel.sizingOptions.orientation = "row";
// Input panel
win.inputPanel.panel1 = win.inputPanel.add("panel", undefined, "Left");
win.inputPanel.panel2 = win.inputPanel.add("panel", undefined, "Right");
win.inputPanel.panel3 = win.inputPanel.add("panel", undefined, "Top");
win.inputPanel.panel4 = win.inputPanel.add("panel", undefined, "Bottom");
win.inputPanel.panel1.left_input = win.inputPanel.panel1.add("edittext", undefined, CONFIG.defaults.leftValue);
win.inputPanel.panel2.right_input = win.inputPanel.panel2.add("edittext", undefined, CONFIG.defaults.rightValue);
win.inputPanel.panel3.top_input = win.inputPanel.panel3.add("edittext", undefined, CONFIG.defaults.topValue);
win.inputPanel.panel4.bottom_input = win.inputPanel.panel4.add("edittext", undefined, CONFIG.defaults.bottomValue);
win.inputPanel.panel1.left_input.characters = 5;
win.inputPanel.panel2.right_input.characters = 5;
win.inputPanel.panel3.top_input.characters = 5;
win.inputPanel.panel4.bottom_input.characters = 5;
win.inputPanel.check1 = win.inputPanel.add("checkbox", undefined, "Equal");
// Unit panel
win.unitPanel.radio1 = win.unitPanel.add("radiobutton", undefined, "mm");
win.unitPanel.radio2 = win.unitPanel.add("radiobutton", undefined, "in");
win.unitPanel.radio3 = win.unitPanel.add("radiobutton", undefined, "px");
win.unitPanel.radio4 = win.unitPanel.add("radiobutton", undefined, "Document");
// Option panel
win.optionPanel.artboardOptions.radio1 = win.optionPanel.artboardOptions.add("radiobutton", undefined, "All Artboards");
win.optionPanel.artboardOptions.radio2 = win.optionPanel.artboardOptions.add("radiobutton", undefined, "Active Artboard");
win.optionPanel.marginOptions.radio1 = win.optionPanel.marginOptions.add("radiobutton", undefined, "Margin Lines");
win.optionPanel.marginOptions.radio2 = win.optionPanel.marginOptions.add("radiobutton", undefined, "Margin Box");
win.optionPanel.marginOptions.check1 = win.optionPanel.marginOptions.add("checkbox", undefined, "Locked");
win.optionPanel.sizingOptions.check1 = win.optionPanel.sizingOptions.add("checkbox", undefined, "Multiple Guide Sizes (1x, 0.5x, 0.5x)");
// Toggle enabling/disabling of right, top, and bottom inputs based on "Equal" checkbox
function toggleEqualInputs() {
if (win.inputPanel.check1.value) {
var leftvalue = win.inputPanel.panel1.left_input.text;
win.inputPanel.panel2.right_input.text = leftvalue;
win.inputPanel.panel3.top_input.text = leftvalue;
win.inputPanel.panel4.bottom_input.text = leftvalue;
win.inputPanel.panel2.right_input.enabled = false;
win.inputPanel.panel3.top_input.enabled = false;
win.inputPanel.panel4.bottom_input.enabled = false;
} else {
win.inputPanel.panel2.right_input.enabled = true;
win.inputPanel.panel3.top_input.enabled = true;
win.inputPanel.panel4.bottom_input.enabled = true;
}
}
// Apply configuration to UI
function applyConfig() {
// Set input values
win.inputPanel.check1.value = CONFIG.defaults.equalInputs;
// Set unit radio buttons
switch(CONFIG.defaults.unitType) {
case "mm":
win.unitPanel.radio1.value = true;
break;
case "in":
win.unitPanel.radio2.value = true;
break;
case "px":
win.unitPanel.radio3.value = true;
break;
case "document":
default:
win.unitPanel.radio4.value = true;
break;
}
// Set artboard options
if (CONFIG.defaults.allArtboards) {
win.optionPanel.artboardOptions.radio1.value = true;
} else {
win.optionPanel.artboardOptions.radio2.value = true;
}
// Set margin type
if (CONFIG.defaults.marginType === "lines") {
win.optionPanel.marginOptions.radio1.value = true;
} else {
win.optionPanel.marginOptions.radio2.value = true;
}
// Set checkboxes
win.optionPanel.marginOptions.check1.value = CONFIG.defaults.locked;
win.optionPanel.sizingOptions.check1.value = CONFIG.defaults.multipleGuides;
// Apply equal inputs toggle
toggleEqualInputs();
}
// Get current UI values for saving
function getCurrentConfig() {
var unitType = "document";
if (win.unitPanel.radio1.value) unitType = "mm";
else if (win.unitPanel.radio2.value) unitType = "in";
else if (win.unitPanel.radio3.value) unitType = "px";
return {
leftValue: win.inputPanel.panel1.left_input.text,
rightValue: win.inputPanel.panel2.right_input.text,
topValue: win.inputPanel.panel3.top_input.text,
bottomValue: win.inputPanel.panel4.bottom_input.text,
equalInputs: win.inputPanel.check1.value,
unitType: unitType,
allArtboards: win.optionPanel.artboardOptions.radio1.value,
marginType: win.optionPanel.marginOptions.radio1.value ? "lines" : "box",
locked: win.optionPanel.marginOptions.check1.value,
multipleGuides: win.optionPanel.sizingOptions.check1.value
};
}
// Apply loaded configuration
applyConfig();
// Buttons
win.okbutton = win.add("button", undefined, "Ok");
// Toggle equal inputs on checkbox click
win.inputPanel.check1.onClick = function () {
toggleEqualInputs();
};
// Sync values while checked
win.inputPanel.panel1.left_input.onChanging = function () {
if (win.inputPanel.check1.value) {
var leftvalue = win.inputPanel.panel1.left_input.text;
win.inputPanel.panel2.right_input.text = leftvalue;
win.inputPanel.panel3.top_input.text = leftvalue;
win.inputPanel.panel4.bottom_input.text = leftvalue;
}
};
// Event listener for ok button
win.okbutton.onClick = function () {
// Save current configuration
CONFIG.save(getCurrentConfig());
var leftvalue = win.inputPanel.panel1.left_input.text;
var rightvalue = win.inputPanel.panel2.right_input.text;
var topvalue = win.inputPanel.panel3.top_input.text;
var bottomvalue = win.inputPanel.panel4.bottom_input.text;
// Use sizehalving array only if checkbox is checked
var sizehalving = win.optionPanel.sizingOptions.check1.value ? [1, 2, 2] : [1];
// Make a margins layer
var guideLayer = docRef.layers.add();
guideLayer.name = "Margins";
for (var bb = 0; bb < sizehalving.length; bb++) {
leftvalue = leftvalue / sizehalving[bb];
rightvalue = rightvalue / sizehalving[bb];
topvalue = topvalue / sizehalving[bb];
bottomvalue = bottomvalue / sizehalving[bb];
// Determine unit type based on radio selection
var unitType;
if (win.unitPanel.radio1.value) {
unitType = "mm";
} else if (win.unitPanel.radio2.value) {
unitType = "in";
} else if (win.unitPanel.radio3.value) {
unitType = "px";
} else if (win.unitPanel.radio4.value) {
// Use document units
var docUnits = docRef.rulerUnits;
if (docUnits == RulerUnits.Millimeters) {
unitType = "mm";
} else if (docUnits == RulerUnits.Inches) {
unitType = "in";
} else if (docUnits == RulerUnits.Pixels) {
unitType = "px";
} else if (docUnits == RulerUnits.Centimeters) {
unitType = "cm";
} else if (docUnits == RulerUnits.Picas) {
unitType = "pc";
} else {
unitType = "pt"; // Default to points
}
}
if (win.optionPanel.artboardOptions.radio1.value) {
// Repeat for each artboard
for (i = 0; i < artboardRef.length; i++) {
// Get artboard size
var left = artboardRef[i].artboardRect[0];
var top = artboardRef[i].artboardRect[1];
var right = artboardRef[i].artboardRect[2];
var bottom = artboardRef[i].artboardRect[3];
var width = artboardRef[i].artboardRect[2] - artboardRef[i].artboardRect[0];
var height = artboardRef[i].artboardRect[1] - artboardRef[i].artboardRect[3];
// Create lines
var lineLeft = docRef.pathItems.add();
var lineRight = docRef.pathItems.add();
var lineTop = docRef.pathItems.add();
var lineBottom = docRef.pathItems.add();
// Set margin values using UnitValue for clean conversion
var leftmargin = new UnitValue(leftvalue, unitType).as("pt");
var rightmargin = new UnitValue(rightvalue, unitType).as("pt");
var topmargin = new UnitValue(topvalue, unitType).as("pt");
var bottommargin = new UnitValue(bottomvalue, unitType).as("pt");
if (win.optionPanel.marginOptions.radio1.value) {
// Set line points
lineLeft.setEntirePath([[left + leftmargin, top], [left + leftmargin, bottom]]);
lineRight.setEntirePath([[right - rightmargin, top], [right - rightmargin, bottom]]);
lineTop.setEntirePath([[left, top - topmargin], [right, top - topmargin]]);
lineBottom.setEntirePath([[left, bottom + bottommargin], [right, bottom + bottommargin]]);
// Make lines guides
lineLeft.guides = true;
lineRight.guides = true;
lineTop.guides = true;
lineBottom.guides = true;
} else {
// Create box
var box = docRef.pathItems.rectangle(
top - topmargin,
left + leftmargin,
width - rightmargin - leftmargin,
height - topmargin - bottommargin
);
box.fillColor = box.strokeColor = new NoColor();
box.guides = true;
}
}
} else {
// Get artboard size
var activeAB = docRef.artboards[docRef.artboards.getActiveArtboardIndex()];
var left = activeAB.artboardRect[0];
var top = activeAB.artboardRect[1];
var right = activeAB.artboardRect[2];
var bottom = activeAB.artboardRect[3];
var width = activeAB.artboardRect[2] - activeAB.artboardRect[0];
var height = activeAB.artboardRect[1] - activeAB.artboardRect[3];
// Create lines
var lineLeft = docRef.pathItems.add();
var lineRight = docRef.pathItems.add();
var lineTop = docRef.pathItems.add();
var lineBottom = docRef.pathItems.add();
// Set margin values using UnitValue for clean conversion
var leftmargin = new UnitValue(leftvalue, unitType).as("pt");
var rightmargin = new UnitValue(rightvalue, unitType).as("pt");
var topmargin = new UnitValue(topvalue, unitType).as("pt");
var bottommargin = new UnitValue(bottomvalue, unitType).as("pt");
if (win.optionPanel.marginOptions.radio1.value) {
// Set line points
lineLeft.setEntirePath([[left + leftmargin, top], [left + leftmargin, bottom]]);
lineRight.setEntirePath([[right - rightmargin, top], [right - rightmargin, bottom]]);
lineTop.setEntirePath([[left, top - topmargin], [right, top - topmargin]]);
lineBottom.setEntirePath([[left, bottom + bottommargin], [right, bottom + bottommargin]]);
// Make lines guides
lineLeft.guides = true;
lineRight.guides = true;
lineTop.guides = true;
lineBottom.guides = true;
} else {
// Create box
var box = docRef.pathItems.rectangle(
top - topmargin,
left + leftmargin,
width - rightmargin - leftmargin,
height - topmargin - bottommargin
);
box.fillColor = box.strokeColor = new NoColor();
box.guides = true;
}
}
}
// Lock margins layer and activate original layer
guideLayer.zOrder(ZOrderMethod.SENDTOBACK);
// Lock margins layer if checkbox is checked
if (win.optionPanel.marginOptions.check1.value) {
guideLayer.locked = true;
}
docRef.activeLayer = workingLayer;
win.close();
};
win.show();
Copy link to clipboard
Copied
great script thanks - it doesn't work on oversized docs though - if i enter 10" on a doc 500x500 the margins are 100"
Copy link to clipboard
Copied
I see what you mean, thanks for pointing that out!
Copy link to clipboard
Copied
thanks for sharing!
Find more inspiration, events, and resources on the new Adobe Community
Explore Now