Скрипт уменьшения шрифта

Статус
Закрыто для дальнейших ответов.

Ильнур

Участник
Топикстартер
Сообщения
42
Реакции
0
Нашел сценарий уменьшающий размер кернинга, для текста вышедшего за края таблицы (помечен красным овалом).
Помогите его переработать.
Нужно уменьшать шрифт.
Код:
// Глобальные переменные
var limitPercent; // Допустимая ширина
var ColorRed;     // Цвет

//
// Проверки
//
if (app.documents.length == 0) {
  alert("Нет открытого документа");
  exit();
} else if (app.activeDocument.selection.length == 0) {
  alert("Ничего не выделено");
  exit();
} else {
  var selObj = app.activeDocument.selection[0];
  // alert(selObj.constructor.name);
  if ((selObj.constructor.name == "Table") || (selObj.constructor.name == "Cell")) {
    adjustCellTextScale(selObj.cells);    // Вызов основной ф-ции
  } else {
    alert("Выбранный объект не относится к таблицам");
    exit();
  }
}
// Основная рабочая функция
function adjustCellTextScale(cells) {
  defineVariables();  // Задание переменных пользователем
  var parentTableObj = cells[0].parent;
  for (var i_cell = 0; i_cell < cells.length; i_cell++) {
    var cellObj = cells[i_cell];
    while (cellObj.overflows == true) {
      if (cellObj.writingDirection==HorizontalOrVertical.HORIZONTAL) {
        // Если текст в ячейке горизонтальный
        cellObj.texts[0].horizontalScale--;    // уменьшение длины текста
        parentTableObj.recompose();            // изменить таблицу
        if (cellObj.texts[0].horizontalScale < limitPercent) {
          // Цель не достигнута в рамках заданных условий по предельной длине текста - красим проблемные ячейки
          for (var i_char=0; i_char < cellObj.characters.length; i_char++) {
            cellObj.characters[i_char].fillColor = ColorRed;
          }
          break;
        }
      } else if (cellObj.writingDirection == HorizontalOrVertical.VERTICAL) {
        // Если вертикальный текст в ячейке
        cellObj.texts[0].verticalScale--;      // уменьшаем высоту
        parentTableObj.recompose();            // изменяем таблицу
        if (cellObj.texts[0].verticalScale < limitPercent) {
          // Цель не достигнута в рамках заданных условий по предельной высоте - красим проблемные ячейки
          for (var i_char=0; i_char < cellObj.characters.length; i_char++) {
            cellObj.characters[i_char].fillColor = ColorRed;
          }
          break;
        }
      } else {
        alert("Невозможно определить направление текста в ячейках");
        return;
      }
    }
  }
}

//
// Определение цвета и предельной длины текста
//
function defineVariables() {
  limitPercent = parseInt(prompt("Задайте предел сжатия текста (%)", 60));

  // Задание цвета
  ColorRed = app.activeDocument.colors.item("C=15 M=100 Y=100 K=0");
  if (ColorRed == null) {
    var C = 15;    // ???
    var M = 100;   // ????
    var Y = 100;   // ????
    var K = 0;     // ????
    var colorOption = {colorValue:[C,M,Y,K],model:ColorModel.process,space:ColorSpace.cmyk,name:"C=15 M=100 Y=100 K=0"}
    ColorRed = app.activeDocument.colors.add(colorOption);
  }
}
 
он не кернинг меняет, а шрифт сжимает по горизонтали
 
  • Спасибо
Реакции: Ильнур
Можете переписать код ?
 
Вместо
cellObj.texts[0].verticalScale и cellObj.texts[0].horizontalScale
cellObj.texts[0].pointSize, примерно так
 
  • Спасибо
Реакции: Ильнур
Протестирую, отпишу о результате)
 
Это грубо говоря.
На самом деле там как минимум не единицу отнимать надо, то есть будет не horizontalScale-- а, скажем, pointSize-=0.1 или подберете оптимальное значение приращения кегля.
 
  • Спасибо
Реакции: Ильнур
Подскажите пожалуйста литературу, хочу изучить тему.
 
Статус
Закрыто для дальнейших ответов.