А еще не хватает случая, что внутри группы может быть вложено еще куча групп. И тогда верхний объект не путь с заливкой. Надо рекурсивно найти какой одиночный путь является верхним.
У _MBK_ скрипт сделан через генерацию временного экшена, который вызывает системную команду из панели Pathfinder. Это тоже хорошее решение. Только скрипты, внутри которых вызываются экшены, категорически нельзя внутрь других экшенов добавлять для вызова по клавишам F1..F12, иначе повесит Адоб, так как нет асинхронности выполнения. И я больше люблю скриптами обрабатывать выбранные пользователем объекты, а не весь документ. Потому что пользователь сам контролирует объем обрабатываемых данных. А то случайно запустил скрипт на документе с тысячами объектов и прикурил в ожидании
JavaScript:
(function () {
if (!app.documents.length || !app.selection.length) {
return;
}
var docSel = app.selection;
var groups = [];
var results = [];
for (var i = 0; i < docSel.length; i++) {
if (docSel[i].typename === "GroupItem" && docSel[i].pageItems.length) {
groups.push(docSel[i]);
}
}
if (!groups.length) return;
for (var g = 0; g < groups.length; g++) {
var currGroup = groups[g];
app.executeMenuCommand('deselectall');
currGroup.selected = true;
var topPath = findTopPath(currGroup);
var fillColor = null;
var opacity = 100;
var blendMode = BlendModes.NORMAL;
var strokeColor = null;
var strokeWeight = 0;
if (topPath) {
fillColor = topPath.fillColor;
opacity = topPath.opacity;
blendMode = topPath.blendingMode;
strokeColor = topPath.strokeColor;
strokeWeight = topPath.strokeWeight;
} else {
continue;
}
try {
app.executeMenuCommand('group');
app.executeMenuCommand('Live Pathfinder Add');
app.executeMenuCommand('expandStyle');
app.executeMenuCommand('ungroup');
if (app.selection.length > 0) {
var resultItem = app.selection[0];
if (fillColor) resultItem.fillColor = fillColor;
resultItem.opacity = opacity;
resultItem.blendingMode = blendMode;
if (strokeColor) resultItem.strokeColor = strokeColor;
if (strokeWeight > 0) resultItem.strokeWeight = strokeWeight;
results.push(resultItem);
}
} catch (e) {}
}
app.selection = results;
function findTopPath(group) {
for (var i = 0; i < group.pageItems.length; i++) {
var item = group.pageItems[i];
var type = item.typename;
if (type === "PathItem") {
return item;
}
if (type === "CompoundPathItem" && item.pathItems.length) {
return item.pathItems[0];
}
if (type === "GroupItem") {
var found = findTopPath(item);
if (found) return found;
}
}
return null;
}
})();