2

現在、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 のオーバーフロー プロパティが更新されるまで、スクリプトは実行されます。

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

4

2 に答える 2

2

ご覧のとおり、構成は延期されたタスクです。有効なコンポジションを必要とするほとんどのスクリプト アクティビティでは、自動的に強制されますが、場合によっては recompose() メソッドを使用する必要があります。

myDocument.recompose()
于 2013-02-09T23:50:52.980 に答える
1

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

于 2009-07-05T15:06:02.440 に答える