0

我通过 basil.js 成功地将 JSON 文件加载到 InDesign 中。

var jsonString = b.loadString("data.json");
var jsonData;

function setup() {

  jsonData = b.JSON.decode(jsonString);

  for (var i = 0; i < jsonData.length; i++) {
    var myText = jsonData[i].text;
    b.text(myText, 100, 10 * i, 100, 20);
  };
}

b.go();

结果看起来如预期:

结果看起来如预期: 我想要实现的是

  1. 文本框架自动将它们的高度适应内容,smth。喜欢fit(FitOptions.FRAME_TO_CONTENT);
  2. 文本框一直持续到页面边界,然后添加新页面。

任何提示都受到热烈赞赏。干杯!

4

1 回答 1

0

对于你的第一个问题

文本框架自动将它们的高度适应内容,smth。喜欢适合(FitOptions.FRAME_TO_CONTENT);

你可以使用myText.fit(FitOptions.FRAME_TO_CONTENT);. 如果那里没有实现某些东西,你不必坚持使用 Basil。

文本框一直持续到页面边界,然后添加新页面。

这有点棘手。如果您扩展文本框,它们的大小将会改变。您将需要循环之外的另一个变量来跟踪geometricBounds最后一帧的 并在它们的开头添加下一帧。当您的最后一个界限超过 pageHeight 时,您将需要添加一个新页面。

这是让你开始的东西。这是未经测试的代码。

/**
 * InDesign Objects have a property called 
 * geometricBounds
 * these are the bounds in page coordinates sorted like this
 * [y1, x1, y2, x2]
 * or in words
 * [
 *   y of upper left corner, 
 *   x of upper left corner,
 *   y of lower right corner, 
 *   x of lower right corner
 * ]
 */
var prevGeometricBounds = [100, 10, 100, 10]; 
for (var i = 0; i < jsonData.length; i++) {
  var myText = jsonData[i].text;
  var x = prevGeometricBounds[1];
  var y = prevGeometricBounds[0];
  var w = prevGeometricBounds[3] - prevGeometricBounds[1];
  var h = prevGeometricBounds[2] - prevGeometricBounds[1];
  var textFrame = text(myText, x, y, w, h);
  textFrame.fit(FitOptions.FRAME_TO_CONTENT);
  prevGeometricBounds = myText.geometricBounds;
  if(prevGeometricBounds[2] > height){
    addPage();
  }
}

另一个提示。正如你所看到的,我省略了b.Basil 的演变,但我们还没有发布第 2 版。你可以从GitHub 上的开发分支获取最新版本。相关文档位于此处


编辑 1

在 Basil 2 中,您应该能够使用JSON.parseloadString加载 JSON ,然后对其进行解码

Basil 文本函数返回一个textFrame. 所以该fit功能应该可以工作。如果您遇到错误,我们很乐意在github上接受错误报告。


编辑 2

是在您从 JSON 加载的fit字符串上调用的,而不是在text()函数的结果上调用的。

于 2020-04-08T05:13:02.737 回答