Рис. 8.1. Ячейка и ее параметры
Согласно объектной модели InDesign, таблица, любая строка или столбец, в сущности, представляют собой объект типа ячейки, в котором расположены другие ячейки. Соответственно, таблица есть не что иное, как набор ячеек, к которым исключительно для удобства можно обращаться как к строкам или столбцам.
При этом строкой будут считаться все ячейки, имеющие один и тот же индекс row index, а столбцом- column index. Если провести аналогию с текстом, то строки и колонки - такие же условности, как и, например, абзацы в тексте.
При создании таблицы можно сразу же задать количество строк и столбцов, при этом высота шапки (количество строк повторяющегося на других страницах заголовка) не учитывается и задается отдельно (headerRowCount).
InDesign поддерживает вложенные таблицы, т. е. таблицы, содержимым ячеек которых могут быть другие таблицы. Таким образом, сложность подобных конструкций может быть практически неограниченной.
Рассмотрим основные методы работы с таблицами.
8.1. Создание таблицы
Начнем с базовых операций - определения типа области выделения, способов обращения к ячейкам, задания параметров как отдельных ячеек, так и целой таблицы.
Предположим, стоит задача создать таблицу из двух колонок, ширина которой соответствует полосе набора текущего текстового фрейма. Строки должны иметь высоту 50 мм, по оформлению: первая строка- шапка, толщина окантовки - 0.5 пт, расстояние между текстом и окантовкой- I мм. Скрипт представлен в листинге 8.1.
Листинг 8.1. Создание таблицы
myDocument = app.activeDocument; mySelection = myDocument.selection[0] curr_para = mySelection.paragraphs[0]; myParagraphStyles = myDocument.paragraphStyles; pars = mySelection.paragraphs; parStylesTempArray = [];
for (i=2; i<myParagraphStyles.length; i++){ switch(myParagraphStyles[i].name){ case 'Normal':
parStylesTempArray['Normal'] = i; break;
if(mySelection.constructor.name - "InsertionPoint" || ^ mySelection.constructor.name == "Paragraph"){ curr_para. tables. add((columnCount: 2, bodyRowCount: 1, height:
"50 mm", width: mySelection. textFrames [0] .
geometricBounds[3]-mySelection.textFrames[0].geometricBounds[1]))
myTable = curr_para.tables[0] for(i=0; i< myTable.cells.length; i++){ with(myTable.cells[i]){ toplnset = "1 mm" bottomln'set = "1 mm" rightlnset = "1 mm" leftlnset = "1 mm"
leftEdgeStrokeWeight = "0.5 pt" topEdgeStrokeWeight = "0.5 pt" bottomEdgeStrokeWeight = "0.5 pt" rightEdgeStrokeWeight = "0.5 pt"
}
}
}
myTable.headerRowCount = 1
curr_para.appIyStyle(myParagraphStyles[parStylesTempArray ['Normal']], true); Сначала определяем ссылки на используемые объекты. Поскольку таблица вставляется туда, где стоит курсор, используем mySelection:
myDocument = арр.activeDocument;
myParagraphStyles = myDocument.paragraphStyles;
mySelection = myDocument.selection[0]
Соответственно для абзаца:
curr_para = mySelection.paragraphs[0]; pars = mySelection.paragraphs
Проверяем корректность типа выделенной области и, если все нормально, создаем таблицу. В нашем случае достаточно проверить, чтобы курсор находился в тексте либо абзац был выделен целиком: