2013-07-09 2 views
0

Есть ли способ использовать переменные в стилях (скрипт?) Для совместного использования стилей с некоторыми вариантами, например, цвета?Переменная стиля InDesign

Пример: Я выкладываю книгу с несколькими главами. Каждая глава является документом InDesign. Я хотел бы использовать общие стили для всех документов в книге, но они будут отличаться по цвету. Поэтому вместо того, чтобы иметь несколько типов объектов: RoundedBox-red, RoundedBox-blue и т. Д., У меня будет только один стиль RoundedBox и просто введите значение цветовой переменной где-нибудь ...

ответ

1

У вас есть основания для рассмотрения только прямоугольники, овалы и многоугольники? Если нет, вы можете использовать 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; 

так что вы дон не нужно перебирать фактические объекты. Не проверен, но он должен работать.

0

Ну, я узнал. Самая сложная часть - действительно найти хорошую документацию для API-интерфейсов JavaScript с индексом Indesign ... Документация Adobe трудно найти или не найти. Кроме того, они публикуют все как PDF-файлы, которые ИМХО действительно раздражает. Я нашел good online documentation for CS6. Я работаю над CC, но все, что я использовал, похоже на то же самое. Во всяком случае, я создал следующий скрипт, очень неполную и не совершенен, но работает для меня ...

// Setup the dialog UI 
    var myDialog = app.dialogs.add({ 
     name: "Style Variables", 
     canCancel: true 
    }); 

// I usually never use 'with', but this is how it is done 
// in Adobe's documentation... 
with(myDialog.dialogColumns.add()) { 
    staticTexts.add({staticLabel: "Main Color swatch name:"}); 
    staticTexts.add({staticLabel: "Style to replace:"}); 
    staticTexts.add({staticLabel: "Replace style with:"}); 
    staticTexts.add({staticLabel: "Choose shape type to target:"}); 
} 
with(myDialog.dialogColumns.add()){ 
    var swatchField  = textEditboxes.add({editContents:'', minWidth:180}), 
     oldStyleField = textEditboxes.add({editContents:'', minWidth:180}), 
     newStyleField = textEditboxes.add({editContents:'', minWidth:180}), 
     shapeTypeField = dropdowns.add({stringList:['Rectangles', 'Ovals', 'Polygons']});  // Defaults to rectangles 
} 

// Get the user input and do stuff with it 
var myResult = myDialog.show(); 
if (myResult === true) 
{ 
    var docs  = app.documents, 
     myDoc  = docs[0], 
     allStyles = myDoc.objectStyles, 
     oldStyle = allStyles.itemByName(oldStyleField.editContents), 
     newStyle = allStyles.itemByName(newStyleField.editContents), 
     swatches = app.documents[0].swatches, 
     newSwatch = swatches.itemByName(swatchField.editContents), 
     shapes; 

// Get the shape type we are targetting: 
switch(shapeTypeField.selectedIndex) 
{ 
    case 0: 
     shapes = myDoc.rectanges; 
     break; 
    case 1: 
     shapes = myDoc.ovals; 
    break; 
case 2: 
    shapes = myDoc.polygons; 
    break; 

default: 
    shapes = myDoc.rectangles; 
} 
// Set the base style color to the user chosen swatch: 
newStyle.fillColor = newSwatch; 

    for (var i=0; i<shapes.length; i++) 
    { 
     if (shapes[i].appliedObjectStyle.name === oldStyle.name) 
     { 
      shapes[i].applyObjectStyle(newStyle); 
     } 
    } 
} 
else 
{ 
    alert('Script cancelled, nothing was done.'); 
} 

// Destroy dialog box 
myDialog.destroy();