[ID CC2022] Нумерация текстовых фреймов

ryzl

Участник
Топикстартер
Сообщения
16
Реакции
1
Приветствую!
Возникла необходимость вставить во все текстовые фреймы документа текст вида "Номер страницы-номер фрейма".
Написал скрипт:

#target indesign
var doc = app.activeDocument;
for (var j = 0; j < doc.textFrames.length; j++)
{
var currentTextFrame = doc.textFrames[j];
var currspread = doc.textFrames[j].parent
var currentPage = currentTextFrame.parentPage.name;
var txt = currentPage + "--" + j
doc.textFrames[j].contents = txt
}

Отрабатывает неплохо.
НО. Хотелось бы чтобы совсем хорошо! :)

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

Своего умишки к сожалению мне недостаточно, чтобы делать массивы фреймов на странице, сортировать фреймы по координатам левого верхнего угла.

Помогите пожалуйста!!
 

ryzl

Участник
Топикстартер
Сообщения
16
Реакции
1
З
Приветствую!
Возникла необходимость вставить во все текстовые фреймы документа текст вида "Номер страницы-номер фрейма".
Написал скрипт:

#target indesign
var doc = app.activeDocument;
for (var j = 0; j < doc.textFrames.length; j++)
{
var currentTextFrame = doc.textFrames[j];
var currspread = doc.textFrames[j].parent
var currentPage = currentTextFrame.parentPage.name;
var txt = currentPage + "--" + j
doc.textFrames[j].contents = txt
}

Отрабатывает неплохо.
НО. Хотелось бы чтобы совсем хорошо! :)

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

Своего умишки к сожалению мне недостаточно, чтобы делать массивы фреймов на странице, сортировать фреймы по координатам левого верхнего угла.

Помогите пожалуйста!!
За вознаграждение. Если результат будет приватный))
 

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
chat GPT вам в помощь)
JavaScript:
var doc = app.activeDocument;

for (var i = 0; i < doc.pages.length; i++) {
  var page = doc.pages[i];
  var textFrames = page.textFrames;

  // Создаем массив для хранения фреймов и их вертикальных позиций
  var framesWithPositions = [];

  for (var j = 0; j < textFrames.length; j++) {
    var frame = textFrames[j];
    var position = frame.geometricBounds[0];

    // Добавляем фрейм и его вертикальную позицию в массив
    framesWithPositions.push({ frame: frame, position: position });
  }

  // Сортируем массив фреймов по вертикальной позиции
  framesWithPositions.sort(function(a, b) {
    return a.position - b.position;
  });

  // Нумеруем фреймы по порядку от верхнего к нижнему
  for (var k = 0; k < framesWithPositions.length; k++) {
    var frameWithPosition = framesWithPositions[k];
    frameWithPosition.frame.contents = (k + 1).toString();
  }
}
 
  • Спасибо
Реакции: RIKITIKI и ryzl

ryzl

Участник
Топикстартер
Сообщения
16
Реакции
1
chat GPT вам в помощь)
JavaScript:
var doc = app.activeDocument;

for (var i = 0; i < doc.pages.length; i++) {
  var page = doc.pages[i];
  var textFrames = page.textFrames;

  // Создаем массив для хранения фреймов и их вертикальных позиций
  var framesWithPositions = [];

  for (var j = 0; j < textFrames.length; j++) {
    var frame = textFrames[j];
    var position = frame.geometricBounds[0];

    // Добавляем фрейм и его вертикальную позицию в массив
    framesWithPositions.push({ frame: frame, position: position });
  }

  // Сортируем массив фреймов по вертикальной позиции
  framesWithPositions.sort(function(a, b) {
    return a.position - b.position;
  });

  // Нумеруем фреймы по порядку от верхнего к нижнему
  for (var k = 0; k < framesWithPositions.length; k++) {
    var frameWithPosition = framesWithPositions[k];
    frameWithPosition.frame.contents = (k + 1).toString();
  }
}
Алексей, Спасибо!!
То что нужно!.
Работает как и планирова
 

Jeine

Да здравствует разум! Да сгинет маразм!
15 лет на форуме
Сообщения
7 312
Реакции
6 317
  • Спасибо
Реакции: densen и ryzl

ryzl

Участник
Топикстартер
Сообщения
16
Реакции
1
Скрипт очень полезен для подготовки на перевод нечитаемых (плохо распознаваемых) оригиналов для перевода с листа.
Например (рис 1). Размечаем текст, запускаем срипт и нумеруем все фреймы.
Выдаем на перевод IDMl и пдф файл (для переводчика).
Переводчик вместо цифр вставляет текст. И после перевода открываем IDML и имеем файл с текстом который нужен.
(особенно хорошо работает с китайскими документами, распозновать которые сплошная морока, особенно если иероглифы немного сжаты, на таких текстах Finereader просто полностью лажает)
 

Вложения

  • Untitled-1.png
    Untitled-1.png
    398.2 КБ · Просм.: 84