2009-07-04 9 views
2

私は現在、InDesign ServerでいくつかのJavascriptスクリプトを作成しています。書式を変更したり、XMLを配置したりして、TextFramesのオーバーフローを確実に検出しようとすると、問題が発生します。JavaScriptスクリプティングを使用して、InDesign ServerのTextFramesのテキストオーバーフローを確実に検出しますか?

たとえば、テキストがフレームをオーバーフローするまで、4列のTextFrameの高さを縮小する関数があります。その後、オーバーフローしなくなるまで高さを上げます。これにより、列の高さができるだけ近くなるようにする必要があります。 InDesignのデスクトップで

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のサーバーでは、これは縮小期にオーバーシュートしているようだし、その後一度だけ展開します。

同様の問題は、XMLをTextFrameに配置し、そのテキストがオーバーフローを引き起こしたかどうかを検出した後にも同様の問題が発生します。 placeXML()の直後にオーバーフローをチェックすると、常にfalseが返されますが、スクリプトの後の部分でオーバーフローをチェックすると、オーバーフローが正しく検出されます。

テキストがオーバーフローするかどうかを計算するのに遅延がありますが、オーバーフロープロパティがTextFrameで更新されるまで、スクリプトを介して処理が遅れるようです。

オーバーフロープロパティが更新されるまでスクリプトを強制的に待機させる方法はありますか?または、スクリプトのモードをリフレッシュを待つように設定しますか?それとも間違っているのですか?

答えて

0

これは、私のXMLがどのように構造化されているかの副作用が原因であることが判明しました。 TextFrameに適用していたXMLには、多くの<p>タグが含まれていたため、オーバーフローを評価する際にレイアウトエンジンを混乱させるようでした。 XMLをスクリプトで実行して、タグを&#x2029;(段落区切り文字)に置き換えたところ、今は問題なく動作します。

1

見つけたとおり、合成は遅延タスクです。有効なコンポジションを必要とするほとんどのスクリプティングアクティビティでは自動的に強制されますが、recompose()メソッドを使用する必要があることがあります。

myDocument.recompose() 
関連する問題