簡體   English   中英

使用JavaScript腳本可靠地檢測InDesign Server中TextFrames中的文本溢出?

[英]Reliably detecting text overflows in TextFrames in InDesign Server using javascript scripting?

目前,我正在使用InDesign Server做一些Javascript腳本。 在更改格式或將XML放入其中之后,我無法嘗試可靠地檢測TextFrames中的溢出。

例如,我有一個函數可以縮小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上的overflow屬性被更新之前,它都會在腳本中繼續進行。

有沒有一種方法可以強制腳本等待直到溢出屬性已更新? 還是設置腳本的模式以等待刷新? 還是我做錯了?

如您所見,合成是一項延遲的任務。 大多數需要有效編寫的腳本活動都會自動強制執行,但是有時您必須使用recompose()方法,例如

myDocument.recompose()

因此,事實證明這是由於XML結構的副作用引起的。 我應用於TextFrame的XML包含許多<p>標記,這些標記似乎在評估溢出時使布局引擎感到困惑。 我通過腳本運行XML,用&#x2029;替換標簽&#x2029; (段落分隔符),現在可以正常使用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM