КомпьюАрт

3 - 2002

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

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

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

Подпрограммы и процедуры

Тестирование и отладка скриптов

Обработка ошибок

Просмотр доступных для скриптингакоманд, объектов, свойств и классов

Просмотр библиотеки типов (type library)InDesign в среде VisualBasic

Просмотр словаря (dictionary)InDesign в среде AppleScript

От теории к практике

Script 2-1. Пополосный вывод ps-файлов

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

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

В предыдущей части серии при обзоре базовых конструкций и понятий VB и AppleScript в приложении к ID-скриптингу мы рассмотрели свойства координатной сетки. Любая операция, связанная с запросом о геометрических свойствах объекта или с изменением таковых, использует его координаты. Координата объекта — величина размерная, и размерность ее может фигурировать как в виде простого числового значения (12,78), так и виде строки, в которой явным образом указывается единица измерения («2p3,2», «23,5 mm»). При получении числового значения InDesign считает, что речь идет о единицах измерения, установленных по умолчанию в текущей публикации. В противном случае используется та единица измерения, которая была указана явно.

При запросе о геометрических свойствах объектов, InDesign возвращает значения в текущих единицах измерения, установленных в публикации. Иногда формат возвращаемых значений отличается от того, к которому мы привыкли в палитре Transform. Вследствие того что ID при выполнении скриптов не может производить арифметические операции над строковыми представлениями величин вида «0p3,5» и «13p4», возвращаться будут величины в представлении «0,2916» и «13,333» соответственно.

В случае предполагаемого использования в создаваемом скрипте каких-либо арифметических операций с единицами измерения (сложение, вычитание, умножение, деление) настоятельно рекомендуем в блоке инициализации указывать приложению необходимое нам одно из доступных значений константы idMeasurementUnits (idMSCentimeters, idMSCiceros, idMSInches, idMSInchesDecimal, idMSMillimeters, idMSPicas, idMSPoints). В финальной части скрипта можно вернуться к единице измерения, принятой в публикации до выполнения скрипта. Исполнение следующего кода эквивалентно установке значений «millimetres» для вертикальной и горизонтальной линейки во вкладке Units & Increments палитры Preferences:

Dim myInDesign As InDesign.Application
Dim myPub As InDesign.Document
Dim myViewPrefs As InDesign.ViewPreference
Set myInDesign = CreateObject(“InDesign.Application.2.0”)
Set myPub = myInDesign.ActiveDocument
Set myViewPrefs = myPub.ViewPreferences
myViewPrefs.HorzMeasurementUnits = idMSMillimeters
myViewPrefs.VertMeasurementUnits = idMSMillimeters

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

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

Подпрограммы и процедуры

Подпрограммы (subroutines в VB) и процедуры (handlers в AplleScript) являются отдельными исполняемыми модулями, к которым мы можем обращаться из основного кода скрипта. В большинстве случаев подпрограммам (процедурам) передается одно или несколько значений, и после исполнения над ними каких-либо действий внутри подпрограммы обратно принимаются значения-результаты. Используя подпрограммы, очень удобно, например, преобразовывать единицы измерения из одного типа в другой или вычислять координаты геометрического центра объекта, зная его угловые координаты (GeometricBounds). Семантические конструкции подпрограмм ничем не отличаются от конструкций, доступных для использования в обычном коде. Подпрограммы облегчают код, позволяя один раз описать и отладить часто используемую операцию, чтобы в дальнейшем неоднократно к ней обращаться из тела скрипта. Если при создании скрипта появляются повторяющиеся несколько раз сочетания однотипных строк, то стоит всерьез задуматься о вынесении их в подпрограмму. Как раз такая ситуация проиллюстрирована нами в предлагаемом скрипте пополосной печати публикации (стр. 60), где вывод каждой сепарации в отдельный файл реализован в основном коде, хотя его можно было осуществить, использовав подпрограмму.

Обращение к подпрограмме происходит через команду «GoSub mySubroutineName», после выполнения которой переменные, возвращаемые подпрограммой, доступны для использования в теле скрипта. Код подпрограммы должен находиться вне текста скрипта (после команды End Sub), начинаться со строки «mySubroutineName:» и заканчиваться командой «End Sub». Следующий скрипт вычисляет координаты геометрического центра предварительно выбранного объекта:

Private Sub Command1_Click()
Dim myInDesign As InDesign.Application
Dim mySelection As Object
Dim myBounds As Variant
Set myInDesign = CreateObject(“InDesign.Application.2.0”)
Set mySelection = myInDesign.Selection.Item(1)
myBounds = mySelection.GeometricBounds
GoSub CalculateGeometricCenter
‘ С этого момента переменная “myCenter”
‘ доступна для последующих операторов
Exit Sub
‘ Следующая строка — указатель начала тела подпрограммы
CalculateGeometricCenter:
myX1 = myBounds(1)
myY1 = myBounds(0)
myX2 = myBounds(3)
myY2 = myBounds(2)
myXCenter = myX1 + ((myX2 - myX1)/2)
myYCenter = myY1 + ((myY2 - myY1)/2)
myCenter = Array(myXCenter, myYCenter)
Return
End Sub
В начало В начало

Тестирование и отладка скриптов

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

Наблюдение за значениями переменных в VB осуществляется посредством окна Watches (Debug>Quick Watch). Установив курсор на отслеживаемой переменной (в нашем случае — myCenter), вызываем Watch и в появившемся окне Quick Watches нажимаем кнопку Add. Чтобы увидеть значение переменной в момент исполнения определенной строки, на ней необходимо установить стоп-точку (Debug>Toggle Breakpoint). В процессе исполнения скрипта VB остановится на указанной стоп-точке и в окне Watch (если оно скрыто — View>Watch Window) мы увидим значение перменной в текущий момент (рис. 1). Команда Debug>Step Into (клавиша F8) выполнит следующую за стоп-точкой команду, а Run>Start (F5) запустит исполнение скрипта в штатном режиме.

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

Обработка ошибок

Предположим, что мы создали скрипт, который занимается форматированием текста. Естественно, что объектом действия этого скрипта должен быть выделенный текст или текстовый фрейм. Но что произойдет, если в данный момент выделенным объектом является любой другой объект, отличный от текстового? Для разрешения подобных коллизий в VB предусмотрен механизм обработки ошибок (error handling) — группа операторов, добавляемых к коду, позволяющих выяснить причину возникновения ошибки, указать пользователю на эту причину и подсказать ему «правильное поведение».

Оператор on error предусматривает три варианта развития событий:

On Error GoTo line — переход к подпрограмме вывода сообщений об ошибке и/или выполнения действий, эту ошибку устраняющих;

On Error Resume Next — игнорирование ошибки и переход к следующей строке кода;

On Error GoTo 0 — отключение всех ранее активированных обработчиков ошибок.

Объект err содержит информацию о возникающих ошибках и иногда, в целях отладки, используется для имитации ошибочных ситуаций. Подробно на свойствах этого объекта мы останавливаться не будем, отметим лишь такие важные его свойства, как number и description. Использование при отладке скрипта свойства err.number позволяет точно диагностировать возникшую проблему, а err.description — указать пользователю на суть и причину возникновения ошибки. Так, при исполнении приведенного ниже скрипта попытка поместить на полосу несуществующий файл приводит к возникновению ошибки №432 «File name or class name not found during Automation operation»:

Private Sub Command1_Click()
Dim myInDesign As InDesign.Application
Dim myDocument As InDesign.Document
Dim myPage As InDesign.Page
Set myInDesign = CreateObject(“InDesign.Application.2.0”)
Set myDocument = myInDesign.ActiveDocument
Set myPage = myDocument.Pages.Item(1)
On Error GoTo myDisplayError
Err.Description = “Файл не найден!”
Set myImage = myPage.Place(“c:\primer.tif”)
Exit Sub
myDisplayError:
MsgBox Err.Description
End Sub
В начало В начало

Просмотр доступных для скриптингакоманд, объектов, свойств и классов

Большим подспорьем для самостоятельного изучения скриптинга в InDesign является наличие описаний команд, объектов, свойств и доступных методов непосредственно в средах разработки (VB и AppleScript). Без планомерного изучения этих своебразных руководств добиться значимых результатов в освоении скриптинга вряд ли удастся. Доступ к этим «кладезям знаний» осуществляется в VB и Apple Script по-разному.

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

Просмотр библиотеки типов (type library)InDesign в среде VisualBasic

  • В любом открытом VB-проекте выбираем пункт меню Project > References.
  • Находим1 и активируем пункт «Adobe InDesign 1.5 Type Library» или «Adobe InDesign 2.0 Type Library» (рис. 2).
  • View > Object Browser. Visual Basic открывает диалоговое окно Проводника Объектов (Object Browser, рис. 3).
  • В раскрывающемся списке доступных библиотек выбираем InDesign. В средней части диалогового окна отображаются списки классов объектов, членов этих классов, а также методов, доступных для операций над каждым классом.
  • При выборе любого объекта или метода в нижней части Object Browser появляются информация об иерархической принадлежности объекта и краткие сведения о синтаксисе доступных операций с ним.
В начало В начало

Просмотр словаря (dictionary)InDesign в среде AppleScript

  • Запускаем InDesign и AppleScript Editor. Редактор сриптов присутствует в любой Mac OS, если же это не так, то его инсталляция присутствует на установочном CD с Mac OS.
  • В окне Script Editor выбираем File > Dictionary.
  • При запущенном InDesign выбираем его в списке приложений. В правой части окна находятся свойства, доступные для каждого объекта, а слева — сами классы объектов (рис. 4).
В начало В начало

От теории к практике

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

Все настройки цветоделения устанавливаются в стилях публикации. Стиль выбирается в ниспадающем списке предлагаемой формы (рис. 5). Отметив флажок «По краскам», мы получим отдельные ps-файлы для каждой полосы и каждой краски (с соответствующим индексом).

zlotnikov@compress.ru

michnykin@mail.ru

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

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

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

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

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

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

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

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

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

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