2

我目前正在使用 InDesign Server 编写一些 Javascript 脚本。在更改格式或将 XML 放入其中后,我无法可靠地检测 TextFrame 中的溢出。

例如,我有一个函数可以缩小 4 列 TextFrame 的高度,直到文本溢出框架。然后它增加高度,直到它不再溢出。这应该导致尽可能接近相等的列高。

while(!bodyTextFrame.overflows) {
  var bounds = bodyTextFrame.geometricBounds;
  bodyTextFrame.geometricBounds = [bounds[0], bounds[1], bounds[2] - 1, bounds[3]];
  //app.consoleout("shrinking");
}

while(bodyTextFrame.overflows) {
  var bounds = bodyTextFrame.geometricBounds;
  bodyTextFrame.geometricBounds = [bounds[0], bounds[1], bounds[2] + 1, bounds[3]];
  //app.consoleout("expanding");
}

在 InDesign 桌面中,这可以正常工作(进行一些修改以使其使用当前选定的对象),但在 InDesign Server 中,这似乎在收缩阶段过冲,然后仅扩展一次。

将 XML 放入 TextFrame 然后检测该文本是否导致溢出后,也会出现类似的问题。如果我在 placeXML() 之后直接检查溢出,它总是返回 false,但如果我在脚本的后面部分检查溢出,它会正确检测到它。

这有点像计算文本是否溢出时存在延迟,但它会通过脚本继续进行,直到在 TextFrame 上更新溢出属性。

有没有办法强制脚本等到溢出属性更新?还是设置脚本的模式等待刷新?还是我只是做错了?

4

2 回答 2

2

如您所见,组合是一项延迟任务。大多数需要有效组合的脚本活动会自动强制它,但有时您必须使用 recompose() 方法,例如

myDocument.recompose()
于 2013-02-09T23:50:52.980 回答
1

因此,事实证明这是由我的 XML 结构的副作用引起的。我应用于 TextFrame 的 XML 包含许多<p>标签,这些标签在评估溢出时似乎会混淆布局引擎。我通过脚本运行我的 XML 以用&#x2029;(段落分隔符)替换标签,现在它工作正常。

于 2009-07-05T15:06:02.440 回答