Избранное »

22.09.2014 – 07:27 | 2 комментария | 27 207 views

Здравствуйте все, кто работает в Индизайне!
Извещаем вас о том, что на youtube.com работает канал «InDesign Мастерская вёрстки». Там уже размещены более 70 видео с полным описанием как работать с программой DoTextOK. Другие интересные темы, касающиеся работы …

Читать полностью »
Работа в InDesign

Хитрости и секреты, приемы работы, уроки

Новая версия!

Особенности новой версии Индизайна

Плагины

Описание плагинов, информация о плагинах для работы с Adobe InDesign

Скрипты

Готовые к использованию скрипты для Adobe InDesign

Скриптинг

Описание языка, приёмов и методов программирования для Adobe InDesign

Home » Скриптинг

Мой первый скрипт «Hello, World!»

Добавлено на 11.11.2008 – 23:322 комментария | 1 704 views
  • Сейчас мы будем создавать первый скрипт для Индизайна на языке JavaScript, который:
  • Создаст новый документ;
  • Создаст текстовый фрейм на определенной странице;
  • Добавит текст в текстовый фрейм.

Запустите ExtendScript Toolkit или текстовый редактор и введите в него следующий скрипт:

var myDocument = app.documents.add();
var myTextFrame = myDocument.pages.item(0).textFrames.add();
myTextFrame.geometricBounds = ["6p", "6p", "24p", "24p"];
myTextFrame.contents = "Hello World!";

Сохраните скрипт как простой текстовый файл с расширением jsx в папку
с пользовательскими скриптами:

Mac OS:
~/Library/Preferences/Adobe InDesign/Version 5.0/Scripts

Windows XP:
~\Documents and Settings\user_name\Application Data\Adobe\InDesign\Version 5.0\Scripts

где ~ системный диск, user_name — имя пользователя.

После этого из Индизайна можно запустить скрипт и посмотреть его работу.

Здесь под app понимаем сам Индизайн CS3.
app.documents — коллекция (или набор) документов которая может быть открыта в Индизайне.
Как и все коллекции, она может быть пустая (когда не открыто ни одного документа). Когда файлы открываются в Индизайне, они становятся членами коллекции. Активный, или текущий документ всегда является самым первым членом коллекции:

var currentDoc = app.documents[0];

add() — это метод, который создает документ Индизайна и добавляет его в коллекцию открытых документов. При создании нового документа автоматически создается и одна страница этого документа. Ведь документ, не содержащий страницы, не имеет смысла.
var myDocument — объектная переменная, под которой мы будем понимать наш документ, созданный в первой строке скрипта.
Принято говорить, что переменная указывает на объект, или ссылается на объект.

Аналогично расшифровывается и вторая строка:
myTextFrame — объектная переменная, под которой мы будем понимать текстовый фрейм, создаваемый методом add() в коллекции текстовых фреймов (textFrames), на первой странице (item(0)) коллекции страниц (pages) нашего документа (myDocuments).

geometricBounds — массив значений координат фрейма в формате [y1, x1, y2, x2], где y1, x1 — координаты левого верхнего угла фрейма, y2 и x2 — координаты правого нижнего. Таким образом, в третьей строке мы задаем размеры фрейма и его расположение на странице.
В данном примере в качестве координат использовались строки. Но координаты также можно задавать и числовыми значениями, например:
myTextFrame.geometricBounds = [50, 50, 200, 150];

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

Единицы измерения

Единицы измерения

В четвертой строке текстовый фрейм наполняем содержимым.

Развитие скрипта «Hello, World!»

В этом примере мы изучим следующее:
1. Получение ссылки на текущий активный документ.
2. Использование функции.
3. Получение размеров страницы и размеров отступов (page margins) активного документа.
4. Изменение размеров текстового фрейма.
5. Изменение форматирования текста во фрейме.

//Вместо шрифта "Arial" можете поставить любой из тех, что есть в вашей системе
// переменная myFont указывает на шрифт из коллекции шрифтов Индизайна.
// Переменная myDocument будет ссылаться на текущий активный элемент
try{
myFont = app.fonts.item("Arial");
}
catch (myError){};
var myDocument = app.documents.item(0);
with(myDocument){
var myPage = pages.item(0);
 
// запускаем на выполнение функцию myGetBounds и результат ее работы
//присваиваем переменной myBounds
var myBounds = myGetBounds(myPage, myDocument);
 
with(myDocument.pages.item(0)){
//Получаем ссылку на текстовый фрейм
var myTextFrame = textFrames.item(0);
 
//Изменение размеров текстового фрейма в соответствии
//с возвращенными значениями функции myGetBounds()
myTextFrame.geometricBounds = myBounds;
 
// Объектная переменная будет указывать на первый абзац текста
var myParagraph = myTextFrame.paragraphs.item(0);
// В первом параграфе меняем параметры текста
myParagraph.appliedFont = myFont; //  - изменяем шрифт
myParagraph.justification = Justification.centerAlign; // - изменяем выравнивание текста
myParagraph.pointSize = 48; // - изменяем размер текста
}
}
 
// Функция myGetBounds вычисляет зеркало набора на странице
function myGetBounds(myPage, myDocument){
var myWidth = myDocument.documentPreferences.pageWidth;
var myHeight = myDocument.documentPreferences.pageHeight;
var myX1 = myPage.marginPreferences.left;
var myY1 = myPage.marginPreferences.top;
var myX2 = myWidth - myPage.marginPreferences.right;
var myY2 = myHeight - myPage.marginPreferences.bottom;
return [myY1, myX1, myY2, myX2];
}

Конечно, наш скрипт «Hello, World!» не подходит для для нормальной работы. Далее мы научимся делать скрипты, которые могли бы начинать работу в любом месте рабочего процесса: создавать документ, отступы в нем, мастер-страницы, и многое-многое другое.

2 комментария »

  • dozer:

    в InDesign CS3 скрипт выдает ошибку
    Error Number: 55.
    Error String: Object does not support thr property or method ‹documentPreferences›
    Source: var myWidth = myDocument.documentPreferences.pageWidth;
    Interpreter: CS2 (4.0)

  • dozer:

    уф. пришлось думать:

    >>> //присваиваем переменной myBounds
    >>> var myBounds = myGetBounds(myPage, myDocument);

    а тут

    >>> // Функция myGetBounds вычисляет зеркало набора на странице
    >>> function myGetBounds(myDocument, myPage){
    >>> var myWidth = myDocument.documentPreferences.pageWidth;

    когда поменял местами — все заработало
    исправьте пожалуйста, все же совсем начинающие это изучают

Оставить комментарий!

Вы должны быть в системе чтобы оставить комментарий.