使用javascript脚本可靠地检测InDesign Server中TextFrames中的文本溢出?

时间:2009-07-04 23:49:30

标签: javascript adobe adobe-indesign indesign-server

我正在使用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,但是如果我在脚本的后面部分检查溢出,它会正确检测到它。

有点像计算文本是否溢出时会有延迟,但无论文本框架上的溢出属性是否更新,它都会通过脚本继续运行。

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

2 个答案:

答案 0 :(得分:1)

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

myDocument.recompose()

答案 1 :(得分:0)

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