Copy link to clipboard
Copied
Hello everyone.
i have this script that export each layer of my document as a separate file (originally in PDF format but i changed to EPS for my necessity)
/*
* Description: An Adobe Illustrator script that export each layer as a separate PDF file
* Usage: Layer name is the PDF file name. Rename layers if necessary.
* This is an early version that has not been sufficiently tested. Use at your own risks.
* License: GNU General Public License Version 3. (http://www.gnu.org/licenses/gpl-3.0-standalone.html)
*
* Copyright (c) 2009. William Ngan.
* http://www.metaphorical.net
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var doc = app.activeDocument;
// prepare layers
for(var i=0; i<doc.layers.length; i++) {
doc.layers[i].visible = false;
}
// go through each layers
for(var i=0; i<doc.layers.length; i++) {
doc.layers[i].visible = true;
if (i>0) doc.layers[i-1].visible = false;
var fpath = doc.path; // save to document's folder
fpath.changePath( doc.layers[i].name+'.eps');
saveEPS( fpath );
}
/**
* Save EPS file
* @Param file File object
*/
function saveEPS( file ) {
var saveOpts = new EPSSaveOptions();
doc.saveAs( file, saveOpts );
}
The outcome is: one EPS file for each layers of the original document with one layer visible and all the other invisible.
What i need is that each EPS file has only the visible layer.
For now to get the result i have to subsequently use another script that i use with batch option:
#target illustrator
var myDoc=app.activeDocument;
var layerCount=myDoc.layers.length;
for (var ii = layerCount - 1; ii >= 0; ii--) {
var currentLayer = myDoc.layers[ii];
currentLayer.locked = false;
if (currentLayer.visible == false){
currentLayer.visible = true;
currentLayer.remove();
}
}
Is there a way to make this happen in just one script?
Thanks!
main();
function main() {
var doc = app.activeDocument;
var layers = doc.layers;
var epsArr = [];
var i = 0;
// Prepare layers
for (i = 0; i < layers.length; i++) {
layers[i].visible = false;
}
// Go through each layers
for (i = 0; i < layers.length; i++) {
layers[i].visible = true;
if (i > 0) layers[i - 1].visible = false;
var fPath = doc.path; // save to document's folder
fPath.changePath(layers[i].name + '.eps');
saveEPS(fPath);
epsArr.push(fPa...
Copy link to clipboard
Copied
main();
function main() {
var doc = app.activeDocument;
var layers = doc.layers;
var epsArr = [];
var i = 0;
// Prepare layers
for (i = 0; i < layers.length; i++) {
layers[i].visible = false;
}
// Go through each layers
for (i = 0; i < layers.length; i++) {
layers[i].visible = true;
if (i > 0) layers[i - 1].visible = false;
var fPath = doc.path; // save to document's folder
fPath.changePath(layers[i].name + '.eps');
saveEPS(fPath);
epsArr.push(fPath);
}
doc.close(SaveOptions.DONOTSAVECHANGES);
app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;
for (i = 0; i < epsArr.length; i++) {
rmvHiddenLayers(epsArr[i]);
}
app.userInteractionLevel = UserInteractionLevel.DISPLAYALERTS;
}
// Save EPS file
function saveEPS(f) {
var saveOpts = new EPSSaveOptions();
activeDocument.saveAs(f, saveOpts);
}
// Remove hidden layers from specified file and save
function rmvHiddenLayers(fPath) {
var doc = File(fPath);
try {
doc = app.open(doc);
for (var i = doc.layers.length - 1; i >= 0; i--) {
if (!doc.layers[i].visible) {
doc.layers[i].visible = true;
doc.layers[i].remove();
}
}
doc.close(SaveOptions.SAVECHANGES);
} catch (e) {}
}
Copy link to clipboard
Copied
Hi @Sergey Osokin , i tested it and it works! Brilliant!
Since i want the final eps with all items visible i added this line
app.executeMenuCommand('showAll'); just before
doc.close(SaveOptions.SAVECHANGES);
Even if it seems to work fine, i'd like your confirmation that it's in the right place.
Anyway, thanks a lot!
Wish you the best!
Copy link to clipboard
Copied
It's a working method.
Copy link to clipboard
Copied
Hi @Sergey Osokin sorry to bother you again but i tested your script again adn again and the result is Ai crashing once every couple of times. I tried it with two different files, same result.
Is there a way to prevent this to happen? Maybe it's not the script's fault, i know, but maybe there's a way to improve it so it works everytime?
Thanks in advance!
Copy link to clipboard
Copied
Have you tried another version of Illustrator? Or on a different computer? There's not enough data yet to guess why it crashes. Maybe you can show the file, your version of Illustrator?
Get ready! An upgraded Adobe Community experience is coming in January.
Learn more