36)表内のあふれた文字に長体

| コメント(6) | トラックバック(0)

表内の文字のオーバーフローに長体をかけます。オーバーフローのチェックには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

トラックバック(0)

トラックバックURL: http://www.adg7.com/mt/mt-tb.cgi/117

Comments are nofollow setting

コメント(6)

試してみたのですが、すべて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から行いました。
その分、遅くなりましたが。

コメントする

エントリー一覧

OpenID対応しています OpenIDについて
Powered by Movable Type 7.902.0
漢字イラストロジック-脳トレ京
FREE ONLINE SUDOKU