Не так давно в PitStop запилили функцию Reorder Pages. Вещь нужная, но реализована не очень — порой, чтобы что-то сделать приходится делать кучу подготовительной работы руками. Например, составить последовательность для раскладываения на листе продукции с последовательной нумерацией, чтобы после резки номера в стопках шли по порядку. Вначале делал такие последовательности в экселе, затем правил их в блокноте. От этого накапливалось раздражение, которое вылилось в небольшой скрипт. Поскольку в последнее время ковыяю скриптинг в основном в Иллюстраторе, то писал для него, но скрипт работает также в Фотошопе и Индизайне. В Акробате не работает, по крайней мере в моём XI-м.
Программист из меня не очень, поправляйте, если что.
Программист из меня не очень, поправляйте, если что.
Код:
var inp = new Window ("dialog", "Sequence",undefined, {closeButton: true});
var radioGroup = inp.add ("group");
var r40 = radioGroup.add ("radiobutton", undefined, "4+0");
var r44 = radioGroup.add ("radiobutton", undefined, "4+4");
r40.value = true;
var pgsGroup = inp.add ("group");
var inpgsn = pgsGroup.add ("statictext", undefined, "К-во полос:");
var inpgs = pgsGroup.add ("edittext", [0, 0, 50, 20], "50", {multiline: false,borderless: true});
var pcsGroup = inp.add ("group");
var inpcsn = pcsGroup.add ("statictext", undefined, "Шт. на листе:");
var inpcs = pcsGroup.add ("edittext", [0, 0, 50, 20], "3", {multiline: false,borderless: true});
var outw = inp.add ("edittext", [0, 0, 300, 200], "...", {multiline: true,borderless: false});
var okbtn = inp.add ("button",undefined, "calc");
okbtn.onClick = function () {
if ( parseInt(inpgs.text) && parseInt(inpcs.text) ) {
var lst;
if (r40.value) {
lst = Math.ceil(inpgs.text/inpcs.text)
outw.text = lst + " печатных листов(а). \n\n" + get40seq(inpgs.text,inpcs.text);
} else {
lst = Math.ceil(inpgs.text/inpcs.text/2)
outw.text = lst + " печатных листов(а). \n\n" + get44seq(inpgs.text,inpcs.text);
}
} else { alert ( "Требуются целые числа" ); }
}
inp.show ();
function get44seq(pgs,pcs) {
var marr = []; // массив для записи последовательности
var lst = Math.ceil(pgs / pcs) // к-во печатных полос = к-во полос макета / 2 с округлением в большую сторону.
if (lst % 2) {lst++} // если к-во печатных полос нечетное, добавляем еще одну
for (var i=1; i<lst; i++) { // для первого места
marr.push(i);
marr.push(i+1);
for (var j=1; j<pcs; j++) { // для остальных
marr.push(i+lst*j);
marr.push(i+1+lst*j);
}
i++;
}
return marr;
}
function get40seq(pgs,pcs) {
var marr = []; // массив для записи последовательности
var lst = Math.ceil(pgs / pcs) // к-во печатных полос = к-во полос макета / 2 с округлением в большую сторону.
for (var i=1; i<=lst; i++) { // для первого места
marr.push(i);
for (var j=1; j<pcs; j++) { // для остальных
marr.push(i+lst*j);
}
}
return marr;
}