可靠地检测使用javascript脚本在InDesign服务器TextFrames文本溢出?
-
23-08-2019 - |
题
我在做一些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通过脚本来替换

(段落分隔符)的标签,现在工作得很好。
其他提示
如你发现,组合物为延迟任务。需要有效的组合物最脚本活动将自动强制,但有时要使用recompose()方法,e.g。
myDocument.recompose()
不隶属于 StackOverflow