Estoy trabajando en un calendario en InDesign y tengo un objeto circular (óvalo) que quiero colocar sobre el día del mes:
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.
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" );
Yorik
Loico