現在、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 では縮小フェーズ中にオーバーシュートし、その後 1 回だけ拡張するようです。
同様の問題は、XML を TextFrame に配置し、そのテキストがオーバーフローを引き起こしたかどうかを検出した後にも発生します。placeXML() の直後にオーバーフローをチェックすると、常に false が返されますが、スクリプトの後半でオーバーフローをチェックすると、正しく検出されます。
テキストがオーバーフローするかどうかの計算に遅延があるようですが、TextFrame のオーバーフロー プロパティが更新されるまで、スクリプトは実行されます。
オーバーフロー プロパティが更新されるまでスクリプトを強制的に待機させる方法はありますか? または、更新を待機するようにスクリプトのモードを設定しますか? それとも、私はそれを間違っていますか?