Script: Why It Does Not Process All Items
The script does not process all visible and unlocked items in the document. is it because of the duplicates?
Objective:
The working script should duplicate items with fills, remove their strokes, and delete the original items' fills. After processing, the script should:
1. Duplicate match item (change fills, strokes).
2. Create three layers named fills, strokes, and both.
3. Move items to the corresponding layers.
4. Remove any empty layers to clean up.
Problem:
Not all items are being processed correctly, and it is unclear why.
Illustrator Script:
function processItems() {
app.activeDocument.selection = null;
var doc = app.activeDocument;
var items = doc.pageItems;
// Duplicate and process items
for (var i = items.length -1; i > 0 ; i--) {
var item = items[i];
if (item.visible && !item.locked && item.filled) {
var copiedItem = item.duplicate();
copiedItem.stroked = false;
item.filled = false;
copiedItem.move(item, ElementPlacement.PLACEAFTER);
}
}
var layers = doc.layers;
var strokesLayer, fillsLayer, bothLayer;
// Function to get or create a layer
function getOrCreateLayer(name) {
for (var i = 0; i < layers.length; i++) {
if (layers[i].name === name) {
return layers[i];
}
}
var layer = doc.layers.add();
layer.name = name;
return layer;
}
fillsLayer = getOrCreateLayer("Fills");
strokesLayer = getOrCreateLayer("Strokes");
bothLayer = getOrCreateLayer("Both");
// Move items to the appropriate layers
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (item.visible && !item.locked) {
if (item.stroked && item.filled) {
item.move(bothLayer, ElementPlacement.PLACEINSIDE);
} else if (item.stroked) {
item.move(strokesLayer, ElementPlacement.PLACEINSIDE);
} else if (item.filled) {
item.move(fillsLayer, ElementPlacement.PLACEINSIDE);
}
}
}
}
processItems();
