[ID CC-CC2022] Выравнивание текста по центру фрейма

  • Автор темы Автор темы Hollot
  • Дата начала Дата начала

Hollot

Участник
Топикстартер
Сообщения
3
Реакции
0
Имеется книга коротких стихов. Строки имеют разную длину. Каким образом можно выровнять текст по центру фрейма по горизонтали, но чтобы выключка влево сохранилась. Поэт настаивает именно на таком варианте. На картинке (в красной рамке) это сделано с помощью отступов. Но книга очень объемная, и настраивать отступы под каждое стихотворение довольно трудоёмкая задача.
 

Вложения

  • Untitled-1.jpg
    Untitled-1.jpg
    160.1 КБ · Просм.: 471
Тот же скрипт, но средневзвешенный…
Код:
/*
Данный скрипт устанавливает левый отступ для выделенных строк
текста так, чтобы самая длинная строчка блока оказалась по центру
фрейма.
Практическое применение - верстка стихов, которые надо оставлять с
выключкой в левый край, но ставить по центру полосы.

(c) Евгений Трефилов, 2007 | e-mail: evgenyt@nwgsm.ru

Особая благодарность Максиму Стринжа за помощь и консультации :pray:
*/

if ((app.selection.length == 0) || (app.selection[0].constructor.name != "Text"))
{
alert ("Please select some text with Text tool");
}

else

{
myLines=app.selection[0].lines;

var maxLength;
maxLength=0;
sumLength=0;
//finding longest line among selected
    for (myCounter = 0; myCounter < myLines.length; myCounter++) {

    currentLength=calculateLineLength(myLines.item(myCounter));
    sumLength+=currentLength;
//    if (currentLength > maxLength)
//{
//maxLength=currentLength;
//}
}
maxLength=sumLength/myLines.length;
    
//getting width of frame

myFrame = app.selection[0].parentTextFrames[0];

myFrameWidth = myFrame.geometricBounds[3]-myFrame.geometricBounds[1];
if (myFrame.textFramePreferences.textColumnCount) {
    myFrameWidth=(myFrameWidth / myFrame.textFramePreferences.textColumnCount) - myFrame.textFramePreferences.textColumnGutter;
    }

//calculating indent

myLeftIndent = (myFrameWidth - maxLength)/2;

//applying

    for (myCounter = 0; myCounter < myLines.length; myCounter++) {
    myLines.item(myCounter).leftIndent=myLeftIndent;
    }
}

function calculateLineLength (myLine)
{
myLength = myLine.characters.item(myLine.characters.count()-3).horizontalOffset - myLine.characters.firstItem().horizontalOffset;
return (myLength);
}
 
  • Спасибо
Реакции: Bebs
Спасибо всем. Отлично всё работает