¿Cómo coloco un objeto de InDesign usando Javascript?

Estoy trabajando en un calendario en InDesign y tengo un objeto circular (óvalo) que quiero colocar sobre el día del mes:

ingrese la descripción de la imagen aquí

Estoy bastante seguro de que debería ser posible escribir un script que establezca las propiedades de posición x, y del objeto ovalado en cada página en los valores adecuados. Ya tengo los siete valores x y los 6 valores y que componen la cuadrícula mensual, pero soy muy nuevo en JavaScript, así que no sé cómo empezar. Los scripts de muestra que vi estaban muy complicados y creo que lo que quiero hacer es mucho más simple, aunque con algunas iteraciones, etc.

Si alguien puede ayudarme a escribir los conceptos básicos para comenzar, se lo agradecería mucho.

Respuestas (2)

Sí, es posible colocar un objeto de InDesign mediante secuencias de comandos. Primero necesitas dirigir de alguna manera el óvalo, para que luego puedas moverlo. Si es el único óvalo en la extensión, puede usar

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

para guardar el óvalo en la variable myOval.

Luego solo puedes usar

myOval.move([x, y]);

para mover el óvalo a su posición. ¿Es esta información suficiente para empezar?

Aquí hay una propuesta:

    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 por el trabajo. Para completar, al no haber probado esto, parece que será GREP para un número de 24 puntos, por lo que será necesario adaptarlo si el estilo cambia o si hay otros números en la página. Creo que es posible GREP para un nombre de estilo.
Tienes toda la razón. Debería haber dicho que uno tiene que modificarlo según sus propias necesidades. Gracias por señalar esto.