Мой первый скрипт «Hello, World!»
- Сейчас мы будем создавать первый скрипт для Индизайна на языке 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!» не подходит для для нормальной работы. Далее мы научимся делать скрипты, которые могли бы начинать работу в любом месте рабочего процесса: создавать документ, отступы в нем, мастер-страницы, и многое-многое другое.
в 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)
уф. пришлось думать:
>>> //присваиваем переменной myBounds
>>> var myBounds = myGetBounds(myPage, myDocument);
а тут
>>> // Функция myGetBounds вычисляет зеркало набора на странице
>>> function myGetBounds(myDocument, myPage){
>>> var myWidth = myDocument.documentPreferences.pageWidth;
когда поменял местами — все заработало
исправьте пожалуйста, все же совсем начинающие это изучают