Поиск textFrame в InDesign на основе его геометрических границ

Моя следующая проблема — идентифицировать конкретный текстовый фрейм в InDesign CS6, ссылаясь на его положение на странице. Я знаю, что могу использовать textFrame.geometricBounds для получения позиции, но у меня возникли проблемы с тем, чтобы оператор if работал, хотя должен.

var textFramesArray = document.layers.item("Product Name").textFrames.everyItem().getElements();

for (var i = 0; i < textFramesArray.length; i++) {
    var corners = textFramesArray[i].geometricBounds;
    $.writeln(textFramesArray[i].geometricBounds);
    if (4.0 < corners[0] < 5.0 && -2.0 < corners[1] < -1.0) {
        $.writeln("Found textFrame " + textFramesArray[i]);
        $.writeln("Its contents are " + textFramesArray[i].contents);
        var productFrame = textFramesArray[i];
    }
}

Первый оператор $.writelin возвращает три набора массивов, третий из которых определенно попадает в пределы, указанные в операторе if. У меня есть подозрение, что это как-то связано с форматированием чисел (целое, вещественное, двойное и т. д.), но я не знаю подробностей.


person Sturm    schedule 04.06.2013    source источник


Ответы (1)


Снова ответил на мой собственный вопрос с дополнительным исследованием. Я обнаружил, что оператор if не может понять двусторонний тест, такой как 0 < x < 1. Таким образом, мне пришлось разбить его на четыре теста, как таковые:

var textFramesArray = document.layers.item("Product Name").textFrames.everyItem().getElements();
var corners;       
for (var i = 0; i < textFramesArray.length; i++) {
    corners = textFramesArray[i].geometricBounds;
    if (7 < corners[0] && corners[0] < 8 && 0 < corners[1] && corners[1] < 1) {
        var productFrame = textFramesArray[i];
    }
}

Наконец-то это работает, поэтому, если кто-то еще не знал об этом ограничении, теперь вы знаете, как его обойти.

person Sturm    schedule 04.06.2013