表内の文字のオーバーフローに長体をかけます。オーバーフローのチェックにはoverflowsというプロパティを調べます。これはtext frameでも同じです。
tell application "Adobe InDesign CS2_J" activate set mySele to class of selection --選択されたアイテムが if mySele is cell or mySele is table then --もしセルかテーブルなら set selecount to count cells of selection --セルの数を数える repeat with C from 1 to selecount --セルの数分くりかえす if overflows of cell C of selection then --セルのテキストがあふれていたら repeat with myPer from 100 to 30 by -2 --100%から30%まで2%刻みで set horizontal scale of every paragraph of cell C of ¬ selection to myPer --長体をかけていく recompose cell C of selection if not overflows of cell C of selection then --セルのテキストが収まったら exit repeat --くりかえしを抜ける end if end repeat end if end repeat else display dialog "表を選択してください" end if end tell
※09/04/17
長体が30%になるということでInDesignがアクティブになっていないとだめなのでactivateを入れました。でもまだ誤差が出るようです。overflowのチェックに時差が出ているようです。なので、ちょっと変更してみました。下記は段落1と行1を比べて同じかどうかチェックします。こっちのほうが確実ですが、複数行だと失敗しますのでご注意下さい。
tell application "Adobe InDesign CS2_J" activate set mySele to class of selection --選択されたアイテムが if mySele is cell or mySele is table then --もしセルかテーブルなら set selecount to count cells of selection --セルの数を数える repeat with C from 1 to selecount --セルの数分くりかえす if overflows of cell C of selection then --セルのテキストがあふれていたら set mypara to paragraph 1 of cell C of selection repeat with myPer from 100 to 30 by -2 --100%から30%まで2%刻みで set horizontal scale of every paragraph of cell C of ¬ selection to myPer --長体をかけていく --if not overflows of cell C of selection then set myline to line 1 of cell C of selection if not my getoverflow(mypara, myline) then --セルのテキストが収まったら exit repeat --くりかえしを抜ける end if end repeat end if end repeat else display dialog "表を選択してください" end if end tell on getoverflow(mypara, myline) if mypara = myline then return false else return true end if end getoverflow
試してみたのですが、すべて30%の長体がかかってしまいます。
書き直しを試みましたが、うまくいきません。
修正していただいてもよろしいでしょうか?
30まではいかないものの誤差が出る事を確認しました。
overflowsは現在の画面から調べているみたいで、スクリプトに描画が追いつかないとこうなるのかもしれません。昔のマシンは遅かったから正確に動いていたのでしょうね。逆におすぎさんのマシンは高速なんでしょうね。
プログラムにInDesignをアクティブにするコマンドを入れました。
recompose cell C of selectionもポイントでした。
http://d.hatena.ne.jp/seuzo/20080923/1222106561
それともうひとつ下にプログラムを書きました。こういうやりかたもあります。ただセル内が複数行だとだめです。
オーバーフローの処理は鬼門ですよ。
私も大量のセルを処理した時に、オーバーフローしていないにも関わらず、どうしても InDesignのoverflowsが虚偽の報告をしてしまい、限りなく長体をかけ続けてしまうときがあります。
同じプログラム。同じデータ。同じドキュメントで試しても再現性がありません。
また、そのエラーしたドキュメントだけ、もしくは該当するページだけ、またはその表のオブジェクトだけといろいろパターンを変えてデバッグするのですが正常に長体を書けてしまい、どうにも打つ手がありません。わざと delayいれたりして・・・
私の表組の場合は、たいていセル内は単行ものが多いので、折り返しが発生していないかもチェックしているのですが、それでもだめなんです。(paragraph 1の line が2だったらオーバーフローだと判断する)あ、今気がついた。on getoverflow(mypara, myline)がそれに相当するんですね。
ほんと、困っているんですよ。
QuarkXPressなんかでも画面に表示されていないとダメとかありましたね。
せうぞーさんのブログの
recompose
が、再評価決定版になりそうな気もするのですが。
recomposeも試したのですが、それでも、たまに限界設定値まで変形させてしまう場合がありました。発生する時は例外なく一つの table object 内だけです。あちこちの表組の中に散乱することはないんです。
この現象を解消して欲しいと、現場からは切実な要望がくるのですが・・・。デバッグしようにも、私の環境だと、たいてい 100, 200ページ程度連続組版しないと表れないんです。1ドキュメントのテスト程度では異常が発生しません。どうもリズムに乗れない作業で気が重いです。
100, 200ページにひとつですか。。。
それはきついですね。
以前Illustratorでも文字がときどき流れないような事がありました。
それは、一度流した後、保存毎に流れたかどうか
値を取り出して検証するという作業をScriptから行いました。
その分、遅くなりましたが。