Copy link to clipboard
Copied
Copy link to clipboard
Copied
Copy link to clipboard
Copied
I wrote a Javascript that will resize the artboard in Illustrator CS4.
/********************************************************** FitArtboardToArt.jsx DESCRIPTION In Adobe Illustrator CS4, fit the artboard to the visible bounds of a document. NOTE: The script leaves behind some artifacts in the document window but is correct. Darryl Zurn, 2009-11-25 daz-scripting@zzzurn.com **********************************************************/ if (app.documents.length > 0) { var docRef = app.activeDocument; if (docRef.artboards.length > 1) { alert('Need exactly one artboard'); quit; } // Found 1 artboard var myVisibleBounds = docRef.pageItems[0].visibleBounds; // The VisibleBounds rect is in this order: left, right, top, bottom // so use variables to show which side we are using var myLeft = 0; var myRight = 1; var myTop = 2; var myBottom = 3; for ( var i = 1; i < docRef.pageItems.length ; i += 1 ) { // We want the ultimate maximum bounds, so select the minimum left and bottom, and max right and top of our rect. myVisibleBounds[myLeft ] = Math.min( myVisibleBounds[myLeft ], docRef.pageItems.visibleBounds[myLeft ] ); myVisibleBounds[myRight ] = Math.max( myVisibleBounds[myRight ], docRef.pageItems.visibleBounds[myRight ] ); myVisibleBounds[myTop ] = Math.max( myVisibleBounds[myTop ], docRef.pageItems.visibleBounds[myTop ] ); myVisibleBounds[myBottom] = Math.min( myVisibleBounds[myBottom], docRef.pageItems.visibleBounds[myBottom] ); } // We have our maximum bounds, so use it to set the document's (only) artboard docRef.artboards[0].artboardRect = myVisibleBounds; } else { alert('Open a document before running this script', 'Error running FitArtboardToArt.jsx'); }
Copy link to clipboard
Copied
Hi D Zurn
Your script is really working great. Is it possible that we can maintain some certain distance instead of fitting exactly? I mean now it is exactly fitting with artwork. I am requesting to maintain 10mm from 4 sides.
If it is possible, please edit this script.
if (app.documents.length > 0) {
var docRef = app.activeDocument;
if (docRef.artboards.length > 1)
{
alert('Need exactly one artboard');
quit;
}
// Found 1 artboard
var myVisibleBounds = docRef.pageItems[0].visibleBounds;
// The VisibleBounds rect is in this order: left, right, top, bottom
// so use variables to show which side we are using
var myLeft = 0; var myRight = 1; var myTop = 2; var myBottom = 3;
for ( var i = 1; i < docRef.pageItems.length ; i += 1 )
{
// We want the ultimate maximum bounds, so select the minimum left and bottom, and max right and top of our rect.
myVisibleBounds[myLeft ] = Math.min( myVisibleBounds[myLeft ], docRef.pageItems.visibleBounds[myLeft ] );
myVisibleBounds[myRight ] = Math.max( myVisibleBounds[myRight ], docRef.pageItems.visibleBounds[myRight ] );
myVisibleBounds[myTop ] = Math.max( myVisibleBounds[myTop ], docRef.pageItems.visibleBounds[myTop ] );
myVisibleBounds[myBottom] = Math.min( myVisibleBounds[myBottom], docRef.pageItems.visibleBounds[myBottom] );
}
// We have our maximum bounds, so use it to set the document's (only) artboard
docRef.artboards[0].artboardRect = myVisibleBounds;
}
else {
alert('Open a document before running this script', 'Error running FitArtboardToArt.jsx');
}
Thanks in advance..
Regards
HARI
Copy link to clipboard
Copied
I got a message from another user who had modified my script to ask the user how much to add, and then did it. I thought it had been sent to the rest of the group too, but I don't see it and I think I deleted the message.
I'll try my other computer to see if the script is still around, or hopefully they can repost it to the forum.
Darryl
Copy link to clipboard
Copied
Hi D Zurn
Thanks for your reply,
Could you guys please post the updated script.
Thanks in advance.
Regards
HARI
Copy link to clipboard
Copied
If im correct the bounds are actually 0,1,2,3 equals left, top, right, bottom
Copy link to clipboard
Copied
Copy link to clipboard
Copied
The only way I have found to do this is to copy the contents of the original into a new document.
Here is my code:
tell application "Adobe Illustrator"
activate
open your_doc.ai --replace with your filename and path
tell me to do shell script "sleep 3"
tell application "System Events" --Select all.
tell application "Adobe Illustrator" to activate
key code 0 using command down
end tell
tell application "System Events" --Group objects, may not be necessary.
tell application "Adobe Illustrator" to activate
key code 5 using command down
end tell
tell application "System Events" --Copy selection.
tell application "Adobe Illustrator" to activate
key code 8 using command down
end tell
close this_file without saving --out with the old, in with the new
--make a new artboard with the appropriate dimentions
set docRef to make new document with properties {«class caCS»:«constant eCLSeCyM», «class pSHw»:205.2, «class pSHh»:61.2, «class pNAr»:1, «class pALy»:«constant eDALpGrR», «class pASp»:20.0, «class pARC»:3}
tell application "System Events"
tell application "Adobe Illustrator" to activate
key code 9 using command down
end tell
end tell
------------------
In the above, "«class pSHw»:" is width in pixels, "«class pSHw»:" is height in pixels, «class pNAr»: is the number of artboards.
The artboard with automatically be centered.
I figured this out from messing with the default scripts.
There is no way to do it in the current document, so this is the only workaround.
Cheers.
Copy link to clipboard
Copied
Not sure if this is what you want, but you can resize the artboard in CS4 with this call in javascript
app.activeDocument.artboards[0].artboardRect = [333,1182,1197,318];
Copy link to clipboard
Copied
I get a crash in VB when I try it in CS4 VB script.
aiDoc.ArtBoard.ArtboardRect(0)=333
aiDoc.ArtBoard.ArtboardRect(1)=1182
aiDoc.ArtBoard.ArtboardRect(2)=1197
aiDoc.ArtBoard.ArtboardRect(3)=318
Copy link to clipboard
Copied
I use Applescript, so I do not know if this works for anybody else, but this is where I ended up:
tell application "Adobe Illustrator"
tell current document
tell artboard 1
--get original page size
set artPage to artboard rectangle
set x1orig to item 1 of artPage
set y1orig to item 2 of artPage
set x2orig to item 3 of artPage
set y2orig to item 4 of artPage
--determine new page size (add half inch in each direction)
set x1new to (x1orig - 36) as real
set y1new to (y1orig + 36) as real
set x2new to (x2orig + 36) as real
set y2new to (y2orig - 36) as real
--set new page size
set artboard rectangle to {x1new, y1new, x2new, y2new}
end tell --artboard
end tell --document
end tell --AI
Copy link to clipboard
Copied
I amended panda42_s script to allow variable adjustment of height and width:
tell application "Adobe Illustrator"
tell current document
tell artboard 1
--get original page size
set artPage to artboard rectangle
set x1orig to item 1 of artPage
set y1orig to item 2 of artPage
set x2orig to item 3 of artPage
set y2orig to item 4 of artPage
set newHeight to text returned of (display dialog "enter increase in height in mm" default answer "")
set newWidth to text returned of (display dialog "enter increase in width in mm" default answer "")
--determine new page size (add half inch in each direction)
set x1new to (x1orig - newWidth / 2 * 2.834645) as real
set y1new to (y1orig + newHeight / 2 * 2.834645) as real
set x2new to (x2orig + newWidth / 2 * 2.834645) as real
set y2new to (y2orig - newHeight / 2 * 2.834645) as real
--set new page size
set artboard rectangle to {x1new, y1new, x2new, y2new}
end tell --artboard
end tell --document
end tell --AI
Copy link to clipboard
Copied
Sorry forgot to take comment out of previous post (not that it stops it from working):
tell application "Adobe Illustrator"
tell current document
tell artboard 1
--get original page size
set artPage to artboard rectangle
set x1orig to item 1 of artPage
set y1orig to item 2 of artPage
set x2orig to item 3 of artPage
set y2orig to item 4 of artPage
set newHeight to text returned of (display dialog "enter increase in height in mm" default answer "")
set newWidth to text returned of (display dialog "enter increase in width in mm" default answer "")
--determine new page size
set x1new to (x1orig - newWidth / 2 * 2.834645) as real
set y1new to (y1orig + newHeight / 2 * 2.834645) as real
set x2new to (x2orig + newWidth / 2 * 2.834645) as real
set y2new to (y2orig - newHeight / 2 * 2.834645) as real
--set new page size
set artboard rectangle to {x1new, y1new, x2new, y2new}
end tell --artboard
end tell --document
end tell --AI
Copy link to clipboard
Copied
Hi,
First an elegant solution, and then a question.
If your goal is to reduce the size of the artboard to the visible boundaries of the artwork, this works like gang busters. (I can't take credit, but I can share it.)
#target illustrator
var doc = app.activeDocument;
doc.artboards[0].artboardRect = doc.visibleBounds;
Now, I'd like to enlarge the artboard on all sides by say, 20px. I don't want to set specific X and Y coordinates, since the art I will be running it on is variably-sized.
How do we then enlarge the artboard dimensions relatively from the new artboard values? Thanks for the Applescript, Panda, btw.
This should be easy, but I can't quite figure it out. Any help is much appreciated.
Thanks in advance, you'll be saving my rear end.
-t
Copy link to clipboard
Copied
OK, with some help, I have a JS ExtendScript that works, but I still need help making it more batchable.
This script below will for perform the following two changes to all open documents:
var myDocs = app.documents;
var i = 0;
for (i = myDocs.length-1 ; i >= 0; i--)
{
var doc = myDocs;
app.activeDocument= doc;
var myVisibleBounds = doc.visibleBounds; //Rect, which is an array;
myVisibleBounds[0] -= 20;
myVisibleBounds[1] += 20;
myVisibleBounds[2] += 20;
myVisibleBounds[3] -= 20;
doc.artboards[0].artboardRect = myVisibleBounds;
doc.close(SaveOptions.SAVECHANGES);
}
But this is limited, since you can only load so many files at once into Illustrator. Does anyone know how to point the JS at a folder?
Thanks!
Tom
Copy link to clipboard
Copied
Some thing like this should do it for CS5… Plus I did it so it's simple enough to adjust…
#target illustrator var doc = app.activeDocument; var docVB = doc.visibleBounds; var left = docVB[0] - 20; var top = docVB[1] + 20; var right = docVB[2] + 20; var bottom = docVB[3] - 20; var ab = doc.artboards.getActiveArtboardIndex(); doc.artboards[ab].artboardRect = [left,top,right,bottom];
Copy link to clipboard
Copied
Muppet,
Great, thanks for the code. Any thoughts on how to make it more batchable? I've got thousands of files to do...
-Tom
Copy link to clipboard
Copied
Firstly… You could just save that snippet in to Illustrator's scripts folder, make a action that calls it via 'insert menu item' from the flyout, once you have the recorded and saved action use as a batch… The other way would be to have a purpose built script that does the whole of the processing for you… Much would depend up on the files in question where they are within your file system… If you need the latter then start a new topic this is an old thread… If you go down the action route don't forget that the script call will be forgotten by the app at quit… A much complained about issue…
Copy link to clipboard
Copied
Great tip about "Insert Menu Item". Once I placed my script in the Illustrator CS4>Presets>en_US>Scripts folder it showed up in the menu list, and I could access it through batch. I modified the script to be used in the batch, and I'll include that here:
app.activeDocument= doc;
var myVisibleBounds = doc.visibleBounds; //Rect, which is an array;
myVisibleBounds[0] -= 20; //left coordinate (use negative values to add artboard)
myVisibleBounds[1] += 20; //ltop coordinate
myVisibleBounds[2] += 20; //right coordinate
myVisibleBounds[3] -= 20; //bottom coordinate (use negative values to add artboard)
doc.artboards[0].artboardRect = myVisibleBounds;
Thanks for your help, Muppet!
tf
Copy link to clipboard
Copied
This script seems to be exactly what I'm looking for, also, but it's not working for me. I suspect my problem is that I'm in CS3. Can anyone dumb it down to work in CS3?
Copy link to clipboard
Copied
Sorry it's just not possible pre CS4…
Copy link to clipboard
Copied
I realize this post is a bit dated, but was hoping someone might know how to modify this script; I have been using it daily, and have it saved three ways in my script folder (one reduces the artboard to the art, one adds 1/8" distance from the art, and one adds 5" distance). Is there a way to make the 'edge' a percentage of the artwork, so if the art was 10"x10" and the percentage was 10% it would add an inch, whereas art 100"x100" with 10% would get a 10" border? I wouldn't need to set the percentage each time; that could be built into the script.
-g-
Copy link to clipboard
Copied
OK -- this will challange you a little bit, in that you have to do a little conversion from VB.NET to JS, but this should do the trick for you. It should be easy enough. At minimum, you'll understand the differences a little bit.
A few caveats:
1) You may or may not find that you desire a consistent margin on a rectangular-dimensioned collection of pathitems. Since you chose a "square" excample, you may or may not have considered that.
2) This has been tested on CS6. I beileve that it works back to CS5, but I forget when (what version) the vertical scale was changed so before that it probably needs some adjustment.
3) I used the variable abMargin to allow you to adjust easily the percentage that you desire in margins for your artboard. Note: '10' = 10%. While I could have made the code a little cleaner with less variables, I thought that spelling it out may help you understand the logic better.
4) I noticed in a previous post's example the use of Artboards(0). While the documentation states a zero-based array value, in my testing I could only get it work as a 1-base array. I'm sure that I am missing something that someone else may spell out.
5) Lastly (thank goodness) in the future, you may be better served by opening a new discussion and referencing the old discussion link. That's just my opinion, though. No harm, no foul.
So here you go. Hope this helps. Good luck! -TT
----------------
Public Sub DrawBorderPcnt(app As AI.Application, abMargin As Double)
Dim aDoc As AI.Document = app.ActiveDocument
Dim vb = aDoc.VisibleBounds
Dim width = (vb(2) - vb(0)) 'left-right
Dim height = -(vb(3) - vb(1)) 'bottom-top
vb(0) -= (width * (1 + abMargin / 100) - width) / 2 'left
vb(1) += (height * (1 + abMargin / 100) - height) / 2 'top
vb(2) += (width * (1 + abMargin / 100) - width) / 2 'right
vb(3) -= (height * (1 + abMargin / 100) - height) / 2 'bottom
aDoc.Artboards(1).ArtboardRect = vb
End Sub
---------------
PS: If you still need help in the conversion, let us know and if someone doesn't get to it first, I'll try to help. -TT
Copy link to clipboard
Copied
Thanks, TT for the reply -- the extent of my script abilities are making slight modifications to existing ones, so much of what you posted is beyond me. I think what you are doing is getting the width of the artboard, dividing by 100, adding 1, dividing this in half, and adding this number to each dimension. I'm not sure how abMargin works here... See if what I have below might work:
replace in the JS example:
var left = docVB[0] - 20;
var top = docVB[1] + 20;
var right = docVB[2] + 20;
var bottom = docVB[3] - 20;
var left = docVB[0] - ((1+(docVB[0]-docVB[2])/100)/2)
etc...
Thanks for any insights...
-g-