1

这是我的尝试:

function makeAllTextBlack() {
  var document = app.activeDocument,
    textFrames = document.textFrames,
    nbTextFrames = textFrames.length,
    swatch = document.swatches.item("C=100 M=100 Y=100 K=100"),
    i;
  for (i = 0; i < nbTextFrames; i +=1) {
      textFrames[i].fillColor = swatch;
  }
}

makeAllTextBlack();

在 ExtendScript Toolkit 中运行此脚本时,它抱怨为fillColor属性定义的值不正确,说它需要一个 Swatch 或一个字符串,但什么也没收到。我的样本有问题吗?

4

2 回答 2

2

您以这种方式获得的样本是无效的,即使您尝试通过名称(itemByName)获取它也不要问我为什么,但最好使用 Color 对象。例如,您可以这样做来创建颜色:

var color = document.colors.itemByName("myblack");
if(color==null){
    color = document.colors.add();
    color.name = "myblack";
    color.colorValue = [100,100,100,100];
}

然后将其直接应用到 f​​illColor 属性。

(一句话, textFrames.fillColor 不会改变文本颜色,但 TextFrame 背景......我想你想迭代每个 TextFrame 上的文本并改变它们的填充颜色。)

于 2012-06-21T14:48:41.313 回答
1

使用颜色对象似乎可以解决问题:

function makeAllTextBlack() {
        var doc, blackColor;
        if( !app.documents.length ){ return; }

        doc = app.activeDocument;
        blackColor = doc.colors.itemByName ( "fullBlack" );
        if ( !blackColor.isValid )
        { 
            blackColor = doc.colors.add( {colorSpace:ColorSpace.CMYK, model:ColorModel.PROCESS, colorValue:[100,100,100,100], name:"fullBlack"} );
        }
        try
        {
            doc.stories.everyItem().fillColor = blackColor;
            alert("done");
        }
        catch(e)
        {
            alert(e+" "+e.line);
        }
    }

    makeAllTextBlack();

希望能帮助到你,

洛伊克

于 2012-06-21T14:59:47.567 回答