如何使用ExtendScript将InDesign文档中的所有文本设置为黑色?

时间:2012-06-21 13:35:10

标签: adobe-indesign extendscript

这是我的尝试:

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或String但没有收到任何内容。我的色板有问题吗?

2 个答案:

答案 0 :(得分: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];
}

然后将其直接应用于fillColor属性。

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

答案 1 :(得分: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();

希望它有所帮助,

卢瓦克