Как разместить объект InDesign с помощью Javascript?

Я работаю над календарем в InDesign, и у меня есть круглый объект (овал), который я хочу расположить над днем ​​месяца:

введите описание изображения здесь

Я почти уверен, что должна быть возможность написать сценарий, который устанавливает свойства положения x, y овального объекта на каждой странице в правильные значения. У меня уже есть семь значений x и 6 значений y, составляющих месячную сетку, но я новичок в JavaScript, поэтому не знаю, с чего начать. Примеры сценариев, которые я видел, были очень сложными, и я думаю, что то, что я хочу сделать, намного проще, хотя и с некоторыми итерациями и т. д.

Если кто-нибудь может помочь мне написать основы, чтобы я начал, я был бы очень признателен.

Ответы (2)

Да, объект InDesign можно позиционировать с помощью скрипта. Сначала нужно как-то адресовать овал, чтобы потом можно было его передвинуть. Если это единственный овал на развороте, который вы можете использовать

var myOval = app.activeWindow.activeSpread.ovals.firstItem();

чтобы сохранить овал в переменной myOval.

После этого вы можете просто использовать

myOval.move([x, y]);

чтобы переместить овал на его место. Достаточно ли этой информации для начала?

Вот предложение:

    var main = function() {
    var doc = app.properties.activeDocument,
    today = (new Date()).getDate(),
    found, x1, x2, y1, y2;


    if ( !doc ) return;

    app.findGrepPreferences = null;
    app.findGrepPreferences.properties = {
        findWhat : "^"+today+"$",
        pointSize:24
    };

    found = doc.findGrep();

    if ( !found.length ) {
        alert("Nothing found");
        return;
    }

    found = found[0];

    if ( !found.parentTextFrames.length )  {
        alert( "The text may be overriding. Script can't continue" );
        return;
    }

    x1 = found.horizontalOffset;
    x2 = found.endHorizontalOffset;
    y1 = found.baseline;
    y2 = y1-found.ascent;
    pz = found.pointSize;
    xc = (x1+x2)/2;
    yc = (y1+y2)/2;

    var p = found.parentTextFrames[0].parentPage;

    var dateLayer = doc.layers.item ( "dateLayer");
    dateLayer.isValid && dateLayer.remove ();
    dateLayer = doc.layers.add ( {name:"dateLayer"} );
    dateLayer.move ( LocationOptions.AT_BEGINNING );

    var o = p.ovals.add (  {
        geometricBounds:[yc-pz/3, xc-pz/3,yc+pz/3, xc+pz/3],
        strokeColor:"Black",
        strokeWeight:2,
        itemLayer:dateLayer
    });

  }

  var u;
  app.doScript ( "main();",u,u,UndoModes.ENTIRE_SCRIPT, "Mark date" );
+1 за работу. Для полноты, не проверяя это, похоже, что это будет GREP для числа в 24pt, поэтому это потребует некоторой адаптации, если стиль изменится или на странице появятся другие числа. Я думаю , что можно использовать GREP для имени стиля .
Вы совершенно правы. Я должен был сказать, что нужно подстраивать под свои нужды. Спасибо за указание на это.