我尝试重新着色文本对象。颜色 PANTONE 185 C 出现在样本中,如果对象类型是CompoundPathItem,则它可以工作。但是,当选择文本对象时,它会失去颜色(即,它变成没有填充的对象)。
var doc = app.activeDocument;
var swatches = doc.swatches;
if (doc.selection.length > 0) {
var targetItem = doc.selection[0];
if (targetItem.typename == "PathItem" || targetItem.typename == "CompoundPathItem") {
var colorFound = false;
for (var i = 0; i < swatches.length; i++) {
if (swatches[i].name == "PANTONE 185 C") {
alert("PANTONE 185 C");
targetItem.fillColor = swatches[i].color;
colorFound = true;
break;
}
}
if (!colorFound) {
alert("PANTONE 185 C not found in Swatches");
}
} else {
alert("apply fill color");
var textRange = targetItem.textRange;
applyFillColor(textRange, swatches[i].color);
}
} else {
alert("select an object");
}
function applyFillColor(textRange, color) {
for (var i = 0; i < textRange.characters.length; i++) {
textRange.characters[i].fillColor = color;
}
}
我建议使用递归和
try/catch
,如下所示:
var doc = app.activeDocument;
var sel = doc.selection;
var pantone = 'PANTONE 185 C';
try {
var color = doc.swatches.getByName(pantone).color;
set_fill_color(sel);
} catch(e) {
alert('Not found the color: ' + pantone);
}
function set_fill_color(item) {
try { item.fillColor = color } catch(e) {}
try { for (var i=0; i<item.length; i++) set_fill_color(item[i]) } catch(e) {}
if (item instanceof CompoundPathItem) item.pathItems[0].fillColor = color;
if (item instanceof TextFrame) set_fill_color(item.textRanges);
if (item instanceof GroupItem) {
set_fill_color(item.pathItems);
set_fill_color(item.compoundPathItems);
set_fill_color(item.textFrames);
set_fill_color(item.groupItems);
}
}