如何在 Illustrator 中对文本对象应用填充颜色?

问题描述 投票:0回答:1

我尝试重新着色文本对象。颜色 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;
    }
}
javascript adobe-illustrator
1个回答
0
投票

我建议使用递归和

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.