我在做一些JavaScript脚本与目前的InDesign服务器。遇到麻烦试图可靠地检测TextFrames溢出,改变格式化或放置XML放进去以后。

例如,我已经得到了收缩的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服务器,这似乎在收缩阶段过头,然后只扩大一次。

一个类似的问题也将XML成TextFrame,然后检测该文本是否已引起溢出之后发生。如果我检查placeXML()后直接溢流,它总是返回false,但如果我在脚本的后面部分检查溢出,它正确地检测到它。

这有点像有在计算文本是否溢出的延迟,但它无论通过脚本进行直到溢出属性是基于TextFrame更新。

有没有迫使脚本等到overflow属性已更新的一种方式?或设置脚本的方式等待刷新?还是我做错了?

有帮助吗?

解决方案 2

所以,事实证明,这是由我的XML是如何构成的副作用引起的。我申请到TextFrame的XML包含了许多<p>标签这似乎混淆布局引擎评估溢出时。我跑我的XML通过脚本来替换&#x2029;(段落分隔符)的标签,现在工作得很好。

其他提示

如你发现,组合物为延迟任务。需要有效的组合物最脚本活动将自动强制,但有时要使用recompose()方法,e.g。

myDocument.recompose()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top