Variables InDesign样式变量

Variables InDesign样式变量,variables,styles,adobe-indesign,Variables,Styles,Adobe Indesign,有没有一种方法可以使用样式(脚本?)中的变量来共享带有一些变体的样式,比如颜色 示例:我正在布置一本包含多个章节的书。每一章都是一个独立的文件。我想对书中的所有文档使用通用样式,但它们的颜色会有所不同。因此,我不再使用多个对象样式,如:RoundedBox红色、RoundedBox蓝色等,而是使用一个样式RoundedBox,然后在某个地方输入颜色变量的值…我发现了。最困难的部分是为Indesign javascript脚本API找到一个好的文档。。。Adobe的文档要么很难找到,要么缺乏。此外

有没有一种方法可以使用样式(脚本?)中的变量来共享带有一些变体的样式,比如颜色


示例:我正在布置一本包含多个章节的书。每一章都是一个独立的文件。我想对书中的所有文档使用通用样式,但它们的颜色会有所不同。因此,我不再使用多个对象样式,如:RoundedBox红色、RoundedBox蓝色等,而是使用一个样式RoundedBox,然后在某个地方输入颜色变量的值…

我发现了。最困难的部分是为Indesign javascript脚本API找到一个好的文档。。。Adobe的文档要么很难找到,要么缺乏。此外,他们将所有内容都发布为PDF,这让IMHO非常恼火。我找到了一个新的。我正在使用CC,但我使用的一切似乎都是一样的。无论如何,我已经创造了以下脚本,非常不完整和不完美,但为我工作

//设置对话框用户界面
var myDialog=app.dialogs.add({
名称:“样式变量”,
癌症:对
});
//我通常从不使用“with”,但就是这样做的
//在Adobe的文档中。。。
使用(myDialog.dialogColumns.add()){
添加({staticLabel:“主色样名称:”});
添加({staticLabel:“要替换的样式:”});
添加({staticLabel:“将样式替换为:”});
添加({staticLabel:“选择要目标的形状类型:”});
}
使用(myDialog.dialogColumns.add()){
var swatchField=textEditBox.add({editContents:'',minWidth:180}),
oldStyleField=TextEditBox.add({editContents:'',minWidth:180}),
newStyleField=TextEditBox.add({editContents:'',minWidth:180}),
shapeTypeField=dropdowns.add({stringList:['Rectangles','Ovals','Polygons']});//默认为矩形
}
//获取用户输入并处理它
var myResult=myDialog.show();
如果(myResult==真)
{
var docs=app.documents,
myDoc=docs[0],
allStyles=myDoc.objectStyles,
oldStyle=allStyles.itemByName(oldStyleField.editContents),
newStyle=allStyles.itemByName(newStyleField.editContents),
样例=app.documents[0]。样例,
newSwatch=swatches.itemByName(swatchField.editContents),
形状;
//获取我们目标的形状类型:
开关(shapeTypeField.selectedIndex)
{
案例0:
形状=myDoc.rectanges;
打破
案例1:
形状=myDoc.ovals;
打破
案例2:
形状=myDoc.polygons;
打破
违约:
形状=myDoc.矩形;
}
//将基本样式颜色设置为用户选择的样例:
newStyle.fillColor=新闻手表;

对于(var i=0;i您是否有理由只检查矩形、椭圆形和多边形?如果没有,您可以使用pageItems。放弃形状选择和开关,使用:

shapes = myDoc.allPageItems;
for (var i=0; i<shapes.length; i++)
{
    if (shapes[i].appliedObjectStyle.name === oldStyle.name)
    {
        shapes[i].applyObjectStyle( newStyle );
    }
}
所以你不必在实际对象上循环。虽然没有测试过,但它应该可以工作

oldStyle.fillColor = newSwatch;