Skip to main content
Participating Frequently
October 19, 2021
Answered

Illustrator script embed selected art in selected layer

  • October 19, 2021
  • 2 replies
  • 2713 views

Hi there,

 

I have an Illustrator document with multiple layers and multiple layers with linked images/art in them. I would like to with a script select a specific layer and embed all images in the selecte layer only.

 

This is the script I have but as soon as I have multiple images in the layer it will only embed one of the images.

 

var i = 1
var doc = app.activeDocument;
var myLayers = doc.layers;

EmbedTestLayer();

function EmbedTestLayer()
{
//Layers visible and unlocked
for (a=0; a<myLayers.length; a++){
myLayer = myLayers[a];
myLayer.visible = true;
myLayer.locked = false;
}
}
try{
//Deselect all objects
app.activeDocument.selection = null;

//Embed objects in layer
myLayers.getByName ("Test Layer").hasSelectedArtwork = true;
placedArt = app.activeDocument.placedItems[i];
placedArt.embed("Test Layer");
}
catch (e) {}
 
Test Layer is the layer that I want to select as well as all elements/sublayers and then embed the Art.
 
Help will be greately appreciated.
Correct answer femkeblanco

Hi Femke,

 

I think I fixed it myself this way:

 

var doc = app.activeDocument;
var _placedItems;
var _name = doc.layers[""];
if (_name == "") {
_placedItems = doc.placedItems;
_embed()
} else {
try {
var targetLayer = doc.layers["Test Layer"];
targetLayer.visible = true;
targetLayer.locked = false;
_placedItems = [];
function recurse(items) {
for (var i = 0; i < items.length; i++) {
if (items[i].typename == "PlacedItem") {
_placedItems.push(items[i]);
} else if (items[i].typename == "GroupItem") {
recurse(items[i].pageItems);
}
}
}
recurse(targetLayer.pageItems);
_embed()
} catch(e) {}
}
function _embed() {
for (var i = _placedItems.length - 1; i > -1; i--) {
_placedItems[i].embed();
}
}
If you dont mind having a quick look, I will be forever greatfull!

Yes, that is fine. 

 

Edit:  Or you could use this:

var doc = app.activeDocument;
try {
    var targetLayer = doc.layers["Test Layer"];
    targetLayer.visible = true;
    targetLayer.locked = false;
    var _placedItems = [];
    function recurse(items) {
        for (var i = 0; i < items.length; i++) {
            if (items[i].typename == "PlacedItem") {
                _placedItems.push(items[i]);
            } else if (items[i].typename == "GroupItem") {
                recurse(items[i].pageItems);
            }
        }
    }
    recurse(targetLayer.pageItems);
    for (var i = _placedItems.length - 1; i > -1; i--) {
        _placedItems[i].embed();
    }
} catch(e) {}

2 replies

femkeblanco
Legend
October 19, 2021
var doc = app.activeDocument;
var myLayers = doc.layers;
EmbedTestLayer();
function EmbedTestLayer() {
    for (var a = 0; a < myLayers.length; a++){
        myLayer = myLayers[a];
        myLayer.visible = true;
        myLayer.locked = false;
    }
}
try {
    var targetLayer = myLayers["Test Layer"];
    var items = targetLayer.placedItems;
    for (var i = items.length - 1; i > -1; i--) {
        items[i].embed();
    }
}
catch (e) {}
ErazorAuthor
Participating Frequently
October 19, 2021

Femke, 

 

You are the best! Thank you very much!

ajabon grinsmith
Community Expert
Community Expert
October 19, 2021

The variable "i" has not changed its value to 1. So only one image is processed.