КомпьюАрт

2 - 2002

Скриптинг в InDesign. Часть 1

Дмитрий Злотников, Михаил Хныкин

Кому и зачем?

Среда разработки

Базовые понятия

Объектные ссылки

Классы объектов

Наследование свойств

Переменные

Операторы

Команды и методы

Условные выражения

Структуры управления

Координатная сетка

Переходим к практике

Отступление для читателей, не знакомых с программированием

Идея создания настоящего материала возникла летом, во время подготовки обзорной статьи «Лед тронулся, или Приключения InDesign в России» (КомпьюАрт №7’2001). Тогда авторам было мало что сказать по существу вопроса. Сейчас же ситуация изменилась. Полгода мы проработали в InDesign и добились, на наш взгляд, выдающегося результата — ВЕСЬ «КомпьюАрт» верстается в этом замечательном издательском пакете. Номер, который у вас сейчас в руках, уже третий, полностью подготовленный в среде InDesign1. Нам очень интересно и комфортно работать в нем — во многом благодаря постоянному ощущению свободы и всесильности, возникающему на всех стадиях издательского процесса. Важной составляющей этой свободы является возможность гибкого программирования собственных задач и высвобождения собственного Времени для достойных дел. Ребята из Adobe Systems проделали отличную работу и хорошо постарались ради существования этой возможности.

Кому и зачем?

Дефинируем предмет рассмотрения. Скрипт — серия команд, указывающая InDesign, какие действия ему следует выполнять в определенный момент времени при соблюдении или несоблюдении соответствующих условий. Эти действия могут быть как одиночными и влиять исключительно на один, выбранный в данный момент объект, так и входить в состав чрезвычайно сложной структуры, влияющей на многие объекты и публикации. Таким образом, скриптинг2 — увлекательный и творческий процесс, позволяющий решать посредством несложного программирования абсолютно любую задачу, выполнимую в InDesign штатными средствами (работа с инструментами, меню, палитрами, диалогами).

Входящие в состав скрипта процедуры и операторы могут касаться как InDesign непосредственно, так и затрагивать внешние приложения: текстовые редакторы, электронные таблицы, СУБД, ГИС- и CAD-системы. Более того, скриптинг в среде InDesign может служить не только целям автоматизации часто повторяющихся операций, но и являться продвинутым дизайнерским инструментом. Например, задачи случайного выбора гарнитуры и цвета символа в строке текста, равномерного изменения кегля от начала до конца строки в каждом символе, в конце концов просто свободного распределения литер на полосе (распространенный дизайнерский прием) — все это без применения скриптинга кажется тяжеловесным и трудновыполнимым.

Скриптинг доступен не только профессиональным разработчикам программного обеспечения. Более того, он для них не предназначен. Верстальщику — «версталово», а программисту — «программерово». Для профессиональных разработчиков существует SDK — Software Development Kit for InDesign, который Adobe Systems предоставляет в свободном доступе. Скриптинг же доступен каждому пользователю InDesign.

Широкое распространение InDesign и появление достаточного количества пользователей, способных программировать свои задачи и добиваться максимальной эффективности своей работы, способны взорвать и кардинально изменить сложившееся за 10 лет эпохи Десктопа представление о профессии верстальщика. К глубокому сожалению авторов, авторитет зубров-метранпажей3 и их традиционно высокое в негласной иерархии типографских работников место остались в прошлом. Ныне в основном превалирует отношение к верстальщику, как к низкоквалифицированной рабочей силе, что-то вроде «посадимдевочкузалитьтекстнаполосы». Надо отметить, что некоторые горе-«верстальщики» сильно способствуют этому. Но речь не о них. Владение скриптингом может и должно стать основным аргументом верстальщика при трудоустройстве. Ведь экономия времени, необходимого для выполнения рутинных задач, в разы — серьезное повышение эффективности допечатного процесса, суть — прямое конкурентное преимущество предприятия. А какое наслаждение запустить скрипт собственного изготовления и наблюдать за тем, как публикация верстается «сама»! Скриптинг — как процесс, безусловно, творческий — способен одухотворить деятельность верстальщика, придать ей шарм и избавить от ощущения «одного и того же». Наконец, полномасштабное владение скриптингом и знание общей типографской культуры могут служить серьезным источником дополнительного дохода. Ни один программист (если он никогда не занимался версткой) не в состоянии элементарно сформулировать задачу по автоматизации издательского процесса, не говоря уже о ее реализации и отладке. Разумеется, речь здесь идет не о глобальных плагинах и дополнениях, над которыми работают целые коллективы специалистов, а о маленьких скриптиках, учитывающих особенности и потребности конкретного издательского процесса, но дающих в итоге огромную экономию временных ресурсов.

Надеемся, что необходимость и полезность освоения скриптинга в InDesign очевидна всем. Итак, приступим!

В начало В начало

Среда разработки

До единого аппаратно-платформенного стандарта в DTP-индустрии очень далеко, и с программной средой разработки, отлаживания и исполнения скриптов для InDesign ситуация обстоит так же, как и во всей отрасли. Для PC пишем на Visual Basic, для InDesign под Mac OS — на AppleScript. К сожалению, конструкции скриптов для InDesign под этими программными средами отличаются семантикой, но логика работы одна и та же. Авторы не имеют возможности тестировать и отлаживать скрипты под Macintosh, поэтому, не желая отбирать хлеб у наших коллег, приверженцев платформы Apple, мы лишь кратко остановимся на сути скриптинга под Mac OS, а в дальнейшем будем рассматривать в качестве программной среды Visual Basic (VB). К тому же предварительный анализ семантических конструкций обеих программных сред позволяет надеяться на появление в недалеком будущем скрипт-конверторов VB « AppleScript.

Итак, для успешного скриптинга в InDesign на платформе Apple нам необходимо наличие в системе интерпретатора AppleScript, который входит в стандартную поставку любой из Mac OS, и одного из доступных редакторов (AppleScript editor, Scripter, Script Debugger, etc.)

Для скриптинга в InDesign на платформе Windows необходимо установить Microsoft Visual Basic либо использовать любое приложение, содержащее Visual Basic for Applications (VBA). Такие пакеты, как MS Office, AutoCAD, Corel, Visio и др., содержат в составе поставки VBA. InDesign, к сожалению, пока не комплектуется VBA, но вполне успешно его поддерживает. На сайте Adobe Systems, в форуме, посвященном скриптингу в InDesign, появлялась неофициальная информация о том, что InDesign 2.0 будет снабжен необходимыми компонентами VBA для работы со скриптами непосредственно в пакете4, но эти ожидания пока не оправдались.

В начало В начало

Базовые понятия

В этой части материала, которую имеющие минимальный опыт программирования на VB читатели вполне могут пропустить, дадим начальные сведения о конструкциях Visual Basic и принципах скриптинга в InDesign.

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

При исполнении скрипта происходит то же самое, с той лишь разницей, что активной стороной, влияющей на процесс, являемся не мы, как субъект взаимодействия с пакетом, а скрипт, серия команд. С точки зрения InDesign не происходит ничего незаурядного. Пакету отдается команда совершить действие А над объектом X. Если это действие допустимо, оно выполняется.

Суть скриптинга заключается в объектной модели — описании всех доступных InDesign’у объектов: публикаций, разворотов, полос и фреймов. При этом каждому типу присущи свои специфические свойства, и каждый объект может быть однозначно идентифицирован.

Таким образом, скриптинг в InDesign является типичным случаем объектно-ориентированного программирования. Схожие по тому или иному признаку объекты объединяются в классы (classes), обладают свойствами (properties), манипуляции над объектами осуществляются посредством методов (methods) в Windows или команд (commands) на Macintosh.

В начало В начало

Объектные ссылки

Объекты в InDesign расположены иерархически, то есть фреймы принадлежат полосам, полосы принадлежат публикации, которая, в свою очередь, принадлежит InDesign. Для того чтобы подать команду какому-либо объекту, необходимо ее направить по иерархической цепочке — указать «точный адрес» объекта. Адресация объектов в VB идет от старшего объекта к младшему, в AppleScript — наоборот, но четкая последовательность обращений к каждой иерархической ступени обязательна:

«Documents.Item(1).Spreads.Item(1). TextFrames.Item(1)» — Visual Basic;
«the first text frame of the first spread of the first document» — AppleScript.

Вышеприведенные конструкции являются объектными ссылками (object reference) и позволяют реализовывать принцип однозначности идентификации объекта. Таким образом у каждого объекта существует уникальная объектная ссылка.

В начало В начало

Классы объектов

Объекты со схожими свойствами объединяются в классы. Так, все типы фреймов — прямоугольники, полигоны, овалы и фреймы свободной формы — принадлежат классу объектов PageItems и обладают свойствами, общими для всех других типов объектов этого класса. Например, свойство Geometric location является общим для всех объектов класса PageItems.

В начало В начало

Наследование свойств

Типы объектов класса наследуют ряд свойств этого класса. Прямоугольник наследует свойство fill от класса PageItems, как и все прочие типы фреймов. Вместе с тем, объекты могут обладать свойствами, которыми не обладают объекты другого типа данного класса. У текстового фрейма есть свойство TextContents, которым фреймы другого типа не обладают.

Типы данных

Поддерживаются данные пяти типов:

  • Boolean (логический тип данных true or false);
  • Integer (целое);
  • Double (вещественные числа);
  • String (строка символов, заключается в двойные кавычки);
  • Array (массив данных любого типа).

Отдельно стоит описание данных как Variant, но об этом позднее.

В начало В начало

Переменные

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

В AppleScript присвоение значений осуществляется с помощью оператора set:

set myNumber to 10
set myString to “Hello, World!”
В Visual Basic при помощи оператора равенства (=):
myNumber = 10
myString = “Hello, World!”
В начало В начало

Операторы

Используются для выполнения вычислений над переменными и данными. Оператор возвращает какое-либо значение, которое зависит от типа данных, над которыми производятся вычисления. Это может быть как числовая величина (MyWidth/2), так и логическое значение (в случае использования оператора сравнения MyWidth > MyHeight).

В начало В начало

Команды и методы

Команды в AppleScript и методы в VB по сути являются «глаголами», сообщающими системе, что именно необходимо сделать с тем или иным объектом.

Так, в VB для создания нового объекта используется метод Add, для привязки переменной к объекту — метод Set и оператор равенства (=) для изменения свойств объекта.

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

В начало В начало

Условные выражения

Условные выражения дают возможность скрипту в процессе исполнения анализировать ситуацию и принимать то или иное решение в зависимости от выполнения условия. Данные выражения всегда начинаются с оператора if. Следующий скрипт создает новую публикацию, запрашивает InDesign о количестве текстовых материалов в ней и, не обнаружив таковых, выводит сообщение5.

Private Sub Form_Load()
Dim myInDesign As InDesign.Application
Dim myPub As InDesign.Document
Dim myStories As InDesign.Stories
Set myInDesign = CreateObject (“InDesign. _
Application”)
myNumberOfStories = myStories.Count
If myNumberOfStories = 0 then
MsgBox “В данном документе _
не содержится текстовых блоков”
End If
End Sub
В начало В начало

Структуры управления

Предположим, что нам необходимо выполнить какое-либо действие несколько раз подряд. Записать последовательно несколько строк, описывающих это действие? А если существует необходимость в выполнении ста итераций? Для этих целей и существуют структуры управления.

Следущие конструкции исполняют последовательности операторов скрипта (тело цикла) заданное количество раз.

AppleScript:
repeat with counter from 1 to 20
-- тело цикла
end repeat
Visual Basic:
For counter = 1 to 20
rem тело цикла
Next counter

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

AppleScript
repeat while myToDoCondition = true
-- тело цикла
end repeat
Visual Basic
Do While myToDoCondition = true
rem тело цикла
loop
В начало В начало

Координатная сетка

Как и все современные пакеты верстки, InDesign использует стандартную 2D геометрию для точного позиционирования объекта на полосе. Горизонтальный компонент координатной пары (точки) обозначается как x, вертикальный — y. Эти координаты отображаются в палитре Transform, при выборе объекта инструментом «указатель». Геометрический ноль полосы в InDesign находится в левом верхнем углу полосы. Таким образом, положительное направление по оси X — слева направо, а по оси Y — сверху вниз. Важно помнить про последовательность записи координат объектов: сначала x, затем y! InDesign ждет от нас именно такую запись. Следующий скрипт создает новую публикацию, в ней новый объект, а затем перемещает его на 10 мм вправо и на 40 мм вниз.

AppleScript
tell application “InDesign 1.5”
set mySelection to selection
move mySelection to {“10mm”, “40mm”}
end tell
Visual Basic
Dim myInDesign as InDesign.Application
Dim myPub as InDesign.Document
Set myInDesign = CreateObject(“InDesign._ Application”)
Set myPub = myInDesign.ActiveDocument
myPub.Selection.Move Array(“10mm”,”40mm”) 

Однако обратите внимание: при различных запросах InDesign выдает разные значения координат. Координаты геометрической границы объекта и его видимой границы есть различные массивы данных, включающие в себя по четыре значения: для верха (y), левого края(x), низа (y) и правого края (x).

В начало В начало

Переходим к практике

Специфика журнальной публикации не позволяет в полной мере развернуть все особенности конструкций скриптинга и снабдить их подробными примерами, как это могло бы быть в отдельном издании-учебнике. Но мы и не ставили перед собой подобную задачу. В дальнейшем мы продолжим конспективное изложение основ скриптинга и его диалектов на VB и AppleScript, главный же смысл серии публикаций, посвященных скриптингу, мы видим в решении с его помощью конкретных издательских задач.

Подробное руководство по скриптингу доступно для свободного скачивания с сайта Adobe Systems: http://www.adobe.com/products/indesign/pdfs/idsnscripting.pdf

Мы осваивали тонкости скриптинга в InDesign именно по этому руководству, в котором подробно и с примерами описывается каждая семантическая конструкция диалектов VB и AppleScript. Результатом наших экспериментов является появление и внедрение в производственный процесс издательства «КомпьютерПресс» нескольких очень полезных, на наш взгляд, облегчающих жизнь и экономящих время и верстальщикам и корректорам издательства. Один из этих скриптов, текст которого приведен на следующей полосе, мы предлагаем сегодня вашему вниманию. Наберите, протестируйте, отладьте, скомпилируйте из него исполняемый файл и распространите его среди своих коллег. Их благодарность не будет знать границ!

Верстка любого материала начинается с размещения текста на полосе и с его предобработки, которая, как правило, происходит при помощи операций поиска и замены. Утомительное занятие! Настоящий скрипт как раз и занимается предобработкой помещенного текста: расставляет символы неразрывного пробела после каждого односимвольного слова, удаляет двойные пробелы, заменяет там, где необходимо, дефис на тире и меняет западные типографские кавычки (“лапки”) на принятые в отечественной типографике («елочки»).

Логика скрипта основана на анализе текущего символа и двух предыдущих. Для визуализации процесса скрипт снабжен прогресс-индикатором, который вам необходимо нарисовать в любом редакторе форм и включить в проект в виде файла zam.frm.

Скрипт, безусловно, можно оттачивать, модифицировать и усложнять. Можно добавить процедуру предварительного выбора вариантов при помощи CheckBox: что включать в список замен, а что нет. Можно добавить замену иксов между цифрами на знак умножения (2x2 ® 2×2). Можно многое и не только с этим скриптом. Надеемся, что настоящая публикация подвигнет вас к экспериментам, уважаемый коллега. Обязуемся публиковать любой присланный нам законченный и работающий скрипт.

zlotnikov@compress.ru; michnykin@mail.ru

КомпьюАрт 2'2002

Популярные статьи

Удаление эффекта красных глаз в Adobe Photoshop

При недостаточном освещении в момент съемки очень часто приходится использовать вспышку. Если объектами съемки являются люди или животные, то в темноте их зрачки расширяются и отражают вспышку фотоаппарата. Появившееся отражение называется эффектом красных глаз

Мировая реклама: правила хорошего тона. Вокруг цвета

В первой статье цикла «Мировая реклама: правила хорошего тона» речь шла об основных принципах композиционного построения рекламного сообщения. На сей раз хотелось бы затронуть не менее важный вопрос: использование цвета в рекламном производстве

CorelDRAW: размещение текста вдоль кривой

В этой статье приведены примеры размещения фигурного текста вдоль разомкнутой и замкнутой траектории. Рассмотрены возможные настройки его положения относительно кривой, а также рассказано, как отделить текст от траектории

Нормативные требования к этикеткам

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