Я работаю над календарем в InDesign, и у меня есть круглый объект (овал), который я хочу расположить над днем месяца:
Я почти уверен, что должна быть возможность написать сценарий, который устанавливает свойства положения x, y овального объекта на каждой странице в правильные значения. У меня уже есть семь значений x и 6 значений y, составляющих месячную сетку, но я новичок в JavaScript, поэтому не знаю, с чего начать. Примеры сценариев, которые я видел, были очень сложными, и я думаю, что то, что я хочу сделать, намного проще, хотя и с некоторыми итерациями и т. д.
Если кто-нибудь может помочь мне написать основы, чтобы я начал, я был бы очень признателен.
Да, объект 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" );
Йорик
Лоик