Скрипты InDesign — для начинающих

Я опытный программист JavaScript и в настоящее время работаю над проектом, который требует много работы, и я надеюсь, что этот процесс можно будет автоматизировать с помощью сценариев для InDesign.

По сути, вот что я хочу сделать. У меня есть 5-значная (иногда, но редко 4-значная) строка. Затем у меня есть три прямоугольника под текстовым фреймом, к которым я хотел бы применить образец, в зависимости от последних цифр числа. Числам 0-9 присвоен определенный цвет (и образец), и в данный момент я вручную просматриваю каждый прямоугольник, выбираю его по последним двум цифрам и применяю образец ко всем выделенным.

Я убежден, что должна быть возможность автоматизировать процесс с помощью пользовательских сценариев InDesign, но я плохо в этом разбираюсь. Вот пример того, как цвета назначаются специальным штрих-кодам:

0 = красный 1 = синий 2 = зеленый ....

Итак, для следующего кода: 12312 я бы хотел, чтобы столбцы внизу имели следующие цвета:

синий красный синий

(т. е. верхний и нижний ряд = предпоследняя цифра; средний ряд = последняя цифра).

Может ли кто-нибудь указать мне, как я могу написать сценарий, который перебирает страницы в моем документе, находит коды, извлекает последние две цифры, а затем применяет образец к прямоугольному объекту, в зависимости от числа...

Я уверен, что мог бы написать что-то подобное, используя обычный JavaScript и HTML, но, как уже было сказано, я знаком с DOM в HTML...

Любая помощь или указатели будут с благодарностью получены!


person BenM    schedule 04.05.2011    source источник
comment
Где хранятся цветовые коды? Находятся ли они в текстовом фрейме (над вашим прямоугольником, к которому нужно применить образец)? Если да, то сгруппирован ли текстовый фрейм с прямоугольником, к которому нужно применить образец, или как бы вы связали их вместе?   -  person lhan    schedule 04.05.2011
comment
Спасибо за ваш комментарий. Все соответствующие элементы (например, текстовый фрейм и три прямоугольника) сгруппированы вместе.   -  person BenM    schedule 04.05.2011


Ответы (1)


Вот пример сценария, который я только что быстро набрал, который поможет вам начать работу. Возможно, вам придется настроить его, но я думаю, что он охватывает то, что вы просите.

test();
function test(){

    //Open your document:
    var myDoc = app.open('c:/users/user/desktop/test.indd');

    //Get all groups for this document:
    var myGroups = myDoc.groups;

    //Get all swatches for this document:
    var mySwatches = myDoc.swatches;

    //Loop through all of your groups:
    for (var i = 0; i < myGroups.length; i++){

        //for each group we need to get the code from the text frame,
        //so get the text frame first:
        var myTextFrame = myGroups[i].textFrames[0];

        //Now get the color code from the text frame:
        var myColorCode = myTextFrame.contents;

        //get the rectangle from this group:
        var myRect = myGroups[i].rectangles[0];

        //here you would want to parse out whichever digits you need from myColorCode

        //use the code to determine which swatch to use, loop through the swatches:
        for(var s = 0; s < mySwatches.length; s++){

                //find it:
                var mySwatch = mySwatches[s];

                //apply this swatch to your rectangle, and leave the loop:
                myRect.fillColor = mySwatch;
                break;
        }

    }


}

Надеюсь, это поможет! Вот несколько справочных материалов непосредственно от Adobe, которые должны помочь. Дайте мне знать, если у вас есть какие-либо вопросы по приведенному выше примеру.

person lhan    schedule 04.05.2011
comment
Это просто фантастика. Искреннее спасибо за вашу помощь - вы спасли меня от огромной работы! +1 - person BenM; 04.05.2011