2009-07-04 68 views
2

我正在用InDesign Server做一些Javascript腳本。在更改格式或將XML放入它們之後,我無法可靠地檢測到TextFrame中的溢出。使用JavaScript腳本可靠地檢測InDesign Server中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服務器,這似乎在收縮階段過頭,然後只擴大一次。

在將XML放入TextFrame中之後也會發生類似的問題,然後檢測該文本是否導致溢出。如果我在placeXML()之後直接檢查溢出,它總是返回false,但如果我在腳本的後面部分檢查溢出,它會正確檢測到溢出。

這有點像計算文本溢出是否有延遲,但是直到溢出屬性在TextFrame上更新,它才通過腳本繼續執行。

是否有強制腳本等待overflow屬性更新的方法?或者設置腳本的模式等待刷新?或者我只是做錯了?

回答

0

所以,事實證明,這是由於我的XML是如何構造的副作用造成的。我應用於TextFrame的XML包含許多<p>標籤,這些標籤在評估溢出時似乎會混淆佈局引擎。我通過腳本運行我的XML,用&#x2029;(段落分隔符)替換標記,現在它工作正常。

1

正如您發現的,構圖是一個延期任務。大多數需要有效合成的腳本活動會自動強制它,但有時您必須使用recompose()方法,例如,

myDocument.recompose() 
相關問題