Как применить произвольный шрифт к текстовому полю, написав сценарий InDesign?
Я хочу выбрать случайный шрифт из установленных шрифтов и применить его к текстовому полю. Я использую basil.js для облегчения кодирования.
Я не хочу сам писать список всех доступных шрифтов, например так:
var font = [];
font[0] = "Times New Roman";
font[1] = "Myriad Pro";
font[2] = "Impact";
b.textFont( font[Math.floor(Math.random()*font.length)] );
(эта идея от: http://forums.adobe.com/thread/325180)
Большое спасибо!
2 ответа
Хорошо ли играет ваш basil.js вместе с нативным Extendscript от ID? Если это так, вы можете использовать это:
var allFonts = app.fonts.everyItem().getElements();
b.textFont( allFonts[Math.floor(Math.random()*allFonts.length)] );
Первая строка обращается к живому объекту app.fonts в InDesign, и, поскольку это медленно, я предпочитаю использовать everyItem().getElements()
хитрость, чтобы сначала "преобразовать" его в статический массив. Обычно вы делаете это только один раз, в начале вашего скрипта.
В дополнение к ответу Jongware... теперь есть также пример, который делает именно это: https://github.com/basiljs/basil.js/blob/master/examples/typography/RandomFonts.jsx
#includepath "~/Documents/;%USERPROFILE%Documents";
#include "basiljs/bundle/basil.js";
function draw() {
var textFramesCount = 20;
var fonts = app.fonts;
for (var i=0; i < textFramesCount; i++) {
var posX = b.random(0,600);
var posY = b.random(0,850);
var randomFontSize = b.round(b.random(2,20));
var randomIndex = b.floor( b.random(app.fonts.length) );
var fontName = fonts[randomIndex].fullName;
b.println(fontName);
b.textSize( randomFontSize );
b.textFont( fonts[randomIndex] );
var textFrame = b.text(fontName+" "+randomFontSize, posX,posY, 300,20);
};
}
b.go();