- Сообщения
- 39
- Реакции
- 0
Всем привет! Решил упростить себе жизнь, пишу скрипт для создания трех типов рамок под объявления. С первыми двумя простыми рамками я разобрался быстро, а вот с третьим типом я застопорился.
Рамка должна быть следующей: серая заливка со скругленными углами и сзади текста (!). Как я собрался это сделать?
1. Конвертировать текст в таблицу
2. В ней создать прямоугольник и растянуть по ширине длине таблицы
3. Заякорить прямоугольник
4. Скруглить углы
Проблема в том, что заякоренный объект (anchored object) не хочет оказываться позади текста Вопрос номер один: есть ли способ запихнить anchored object позади рамки?
Я решил извернуться и вставить текст, который был конвертирован в таблицу, в серую рамку. Но не понял как обратиться к ней. Вопрос номер два: как обратиться к рамке этой, чтобы вставить текст?
Так же не могу толком понять почему ругается функция app.cut(). С самого начала я задаю переменную var mySelection = myDoc.selection[0]; это выделение преобразую в таблицу и потом это выделение вырезаю для последующей вставке, но функция говорит: "Cannot cut due to invalid selection state". Может выделение слетело? Вопрос номер три: Как обратиться заново к преобразованному тексту в таблице?
Еще один момент связан со скруглениями рамки. Я работаю в цс5, и данная конструкция в нем не работает.
myBorder.cornerOption = CornerOptions.ROUNDED_CORNER;
Если запустить от версии cs4 (создал version 6.0 scripts), то все пучком работает. В чем причина неработоспособности? Вроде (F1) говорит, что ничего не поменялось в цс5 с этим.
вообщем вот мой код для полноты картины
Рамка должна быть следующей: серая заливка со скругленными углами и сзади текста (!). Как я собрался это сделать?
1. Конвертировать текст в таблицу
2. В ней создать прямоугольник и растянуть по ширине длине таблицы
3. Заякорить прямоугольник
4. Скруглить углы
Проблема в том, что заякоренный объект (anchored object) не хочет оказываться позади текста Вопрос номер один: есть ли способ запихнить anchored object позади рамки?
Я решил извернуться и вставить текст, который был конвертирован в таблицу, в серую рамку. Но не понял как обратиться к ней. Вопрос номер два: как обратиться к рамке этой, чтобы вставить текст?
Так же не могу толком понять почему ругается функция app.cut(). С самого начала я задаю переменную var mySelection = myDoc.selection[0]; это выделение преобразую в таблицу и потом это выделение вырезаю для последующей вставке, но функция говорит: "Cannot cut due to invalid selection state". Может выделение слетело? Вопрос номер три: Как обратиться заново к преобразованному тексту в таблице?
Еще один момент связан со скруглениями рамки. Я работаю в цс5, и данная конструкция в нем не работает.
myBorder.cornerOption = CornerOptions.ROUNDED_CORNER;
Если запустить от версии cs4 (создал version 6.0 scripts), то все пучком работает. В чем причина неработоспособности? Вроде (F1) говорит, что ничего не поменялось в цс5 с этим.
вообщем вот мой код для полноты картины
Код:
//Переменные документа
var myDoc = app.activeDocument;
var mySelection = myDoc.selection[0];
//Создаем таблицу и задаем параметры таблицы и ячейки
myTable = mySelection.convertToTable()
with (myTable) {
spaceBefore = "2.5 mm";
spaceAfter = "2.5 mm";
}
with(myTable.cells[0]) {
leftEdgeStrokeWeight = "0 pt"
rightEdgeStrokeWeight = "0 pt"
topEdgeStrokeWeight = "0 pt"
bottomEdgeStrokeWeight = "0 pt"
topInset = "1 mm";
bottomInset = "1 mm";
leftInset = "1 mm";
rightInset = "0 mm";
}
//Создаем серую рамку
myBorder = mySelection.insertionPoints[0].rectangles.add();
mySwatch = app.activeDocument.swatches.item("Grey");
myBorder.fillColor = mySwatch;
myBorder.sendToBack()
//Якорим
with(myBorder.anchoredObjectSettings)
{
anchoredPosition = AnchorPosition.anchored;
anchorPoint = AnchorPoint.TOP_LEFT_ANCHOR
horizontalReferencePoint = AnchoredRelativeTo.anchorLocation;
horizontalAlignment = HorizontalAlignment.leftAlign;
anchorXoffset = mySelection.firstLineIndent;
verticalReferencePoint = VerticallyRelativeTo.lineBaseline;
anchorYoffset = myTable.spaceBefore;
anchorSpaceAbove = 0;
}
//Скругляем
myBorder.cornerOption = CornerOptions.ROUNDED_CORNER;
myBorder.cornerRadius = "2 mm";
//Растягиваем на всю ширину
var myH = myTable.height;
var myW = myTable.width;
var myStretch = myBorder.geometricBounds;
myStretch[2] = myStretch[0] + myH;
myStretch[3] = myStretch[1] + myW;
myBorder.geometricBounds = myStretch
//Копируем текст и вставляем в рамку
mySelection.select();
app.cut();
myBorder.select();
app.paste();