如何通过编写InDesign脚本将随机字体应用于文本框?

时间:2013-10-03 12:55:38

标签: fonts adobe-indesign basil.js

我想从我安装的字体中选择一个随机字体并将其应用到文本框中。我正在使用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 个答案:

答案 0 :(得分:0)

你的basil.js和ID的原生Extendscript一起玩得好吗?如果是这样,你可以使用它:

var allFonts = app.fonts.everyItem().getElements();
b.textFont( allFonts[Math.floor(Math.random()*allFonts.length)] );

第一行访问InDesign中的 live app.fonts对象,由于速度慢,我更喜欢使用everyItem().getElements()技巧将其“转换”为静态数组。通常,您只需在脚本开头附近执行此操作一次。

答案 1 :(得分:0)

除了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();