合成フォントがアウトライン化出来ない

[6168]合成フォントがアウトライン化出来ない | 投稿者:kuw | 投稿日:2011/10/05(Wed) 10:13:43
合成フォントを作成する。
合成フォント作成時、特例文字を作成。
合成フォントで特例文字の拡大率を104%に設定。

テキストボックスを作り、
22Q、作成した合成フォント書体で、
文字を入力。

テキストボックス内に、一文字でも特例文字があると
文字のアウトラインを取ろうとした瞬間クラッシュする。

IntelMac上でCS3、CS4で再現します。

G5Mac上だと問題ないみたいです。

Adobeに不具合報告を出したけど、CS4で修正されるかどうか...
CS5、CS5.5だと直っているみたいです。


困っている人はいないのかと、
インターネット上で情報を集めたが、どうもあつまらない...
気になったのは以下の情報くらい...

合成フォントをアウトライン化しようとするとInDesignが強制終了する
*http://forums.adobe.com/thread/606269

Intel プロセッサ搭載の Macintosh で
合成フォントのアウトラインを作成すると強制終了する(Illustrator CS3/CS4)
*http://kb2.adobe.com/jp/cps/234/234927.html
» 1
[6169]Re: 合成フォントがアウトライン化出来ない | 投稿者:五月 貴 | 投稿日:2011/10/05(Wed) 17:27:03
取引先とのどのようなご事情があるにせよ、InDesignは「文字をアウトライン化するほうが困るアプリケーション」と捉えてお使いいただいたほうがいいでしょう。

困っている情報が見つからないのは、先のような運用をされておらず、困っていないからだと思います。
» 2
[6170]Re: 合成フォントがアウトライン化出来ない | 投稿者:ななし | 投稿日:2011/10/05(Wed) 19:08:42
基本的に文字中に画像を入れたり、紋入れたりする
場合くらいですね、InDesignでのテキストアウトライン化は。
そういう使い方のユーザーが大部分なのでしょう。
私もそうですけど。
» 3
[6174]Re: 合成フォントがアウトライン化出来ない | 投稿者:kuw | 投稿日:2011/10/06(Thu) 14:46:33
五月 貴さん ななしさん
ありがとうございます。

いきなりスクリプトの話になるので、
少し話しが飛躍するようで申し訳ないのですが、

テキストオブジェクト内のに存在する文字列の
リアルなテキスト一塊の実体VisibleBounds座標を取得したいのです。

G5Macまでは、
テキストオブジェクトのアウトラインを取り、
そのオブジェクトのVisibleBounds座標を取得する事により
処理を実現していました。

同じ処理をIntelMacで行うと、
やはりスクリプト上でも、
アウトライン処理の際にInDesignが強制終了します。

実体VisibleBounds座標を取得する為には
一度アウトライン処理を行って取得するしかなく、
ほとほと困っているしだいです。
» 4
[6176]Re: 合成フォントがアウトライン化出来ない | 投稿者:流星光輝 | 投稿日:2011/10/06(Thu) 15:12:16
>テキストオブジェクト内のに存在する文字列の
>リアルなテキスト一塊の実体VisibleBounds座標を取得したいのです。

Scriptの話題なので、ちょいと試してみました。

環境は、WindowsXP SP2 InDesignCS4(6.0.6.622)

A-OTFリュウミンL-KLで合成フォントを作り、
0を特例文字に追加し、拡大率?=垂直比率・水平比率に
104%を設定

仰るとおり22Qで「特例文字」を含むようにTextFrameに入力。

CreateOutlines(False)を手動で行ったところ、
クラッシュどころか平然とアウトライン化できました。

ちなみに合成フォント編集のサイズに200%とか入れると、
アウトライン化されますが、期待した結果にならず、
アウトライン化された文字がかなり小さくなりました。

何かのお役に立てば幸いです。
» 5
[6179]Re: 合成フォントがアウトライン化出来ない | 投稿者:kuw | 投稿日:2011/10/06(Thu) 17:20:53
流星光輝さん
検証ありがとうございます。

どうやらWindows上だと強制終了は起きないようですね?
拡大しすぎると文字が小さくなる?という問題が別で起きるようですが^^;

InDesignのクラッシュは
IntelMacのCS3、CS4上でのみ起きる問題のようです。

IntelMacでRosettaを入れて、CS2でも検証してみましたが、
問題は起きませんでした。


せめて、CS4だけでもうまくスクリプトが動いてくれるとありがたいのですが...
» 6
[6182]Re: 合成フォントがアウトライン化出来ない | 投稿者:PICTRIX | 投稿日:2011/10/06(Thu) 21:38:42
>テキストオブジェクト内のに存在する文字列の
>リアルなテキスト一塊の実体VisibleBounds座標を取得したいのです。

チャチャじゃございません。
対象のテキスト文字列が「一」乃場合は?

いや、何を行いたいのか不明のままの質問でございます。
» 7
[6183]文字列の座標値 | 投稿者:五月 貴 | 投稿日:2011/10/06(Thu) 22:03:46
ご事情が何となく分かりました(勘違いしていたら申し訳ありません)。

以前,私が文字列に相対サイズの罫を巻きたいと書き込んだ質問があります。
*http://www2.rocketbbs.com/11/bbs.cgi?id=thats&mode=pickup&no=6039
こちらにてお~まちさんの「文字の座標を調べるスクリプト」をご紹介頂きました。

選択した文字列が紙面上のどこにあるか調べるということですよね。
選択テキストのx座標,y座標を得るための方法が別にあればよいのですが,当方のスキルでは思いつきませんでした。
» 8
[6184]Re: 合成フォントがアウトライン化出来ない | 投稿者:(z-) | 投稿日:2011/10/07(Fri) 11:12:32
>kuwさん
一度確立した作業フローにできた問題を解決したいという趣旨だけはわかりました。
ただ、現状アウトライン作成ができない(避けて解決しなければいけない)以上、別のアプローチが必要かと思います。
それに際し、得たvisibleBoundsを元にどのような作業をするのか、の情報が待たれている状態です。
よろしければそこまで開示して頂ければ、こぞって悪知恵なり正攻法なり出てくるかと思うんですが、いかがでしょう。
» 9
[6187]Re: 合成フォントがアウトライン化出来ない | 投稿者:kuw | 投稿日:2011/10/07(Fri) 11:35:01
PICTRIX さん

ありがとうございます。
具体的な事まで書くことができなくて御免なさい。
「一」のみの場合...
「リアルなテキスト一塊の実体VisibleBounds座標」ですので
仮想ボディではなく、細い横長の実体VisibleBounds座標となります。
文字が「。」のみ場合等も、アウトラインですから、
文字丸その物の座標となります。


五月 貴 さん

情報ありがとうございます。
最悪どうしようも無い場合。
文字の仮想ボディの座標でも良いのですが、

一行目にルビや圏点がある場合の、
ルビや圏点の大きさ判別処理。
親文字自体に長平体が掛かっている時や、
複数行処理、縦中横等、

ちょと考えるだけでも、うへぇ...って感じになってしまいます。
でもそっちの方向で妥協点を探るしかないような気がしてきました。


追記:
CS3から実装されている、
テキストフレームの角をShift+ダブルクリックすると
行方向、文字の流れる方向が同時にフィットする処理ですが、
あれをスクリプト上から実行する方法はありますでしょうか?
どうもTextFrameObjectにメソッドが見つからないのです。
» 10
[6189]Re: 合成フォントがアウトライン化出来ない | 投稿者:kuw | 投稿日:2011/10/07(Fri) 14:56:39
(z-)さん

ありがとうございます。
>得たvisibleBoundsを元にどのような作業をするのか、の情報が待たれている状態です。悪知恵、正攻法、共に私も大好きです。
あんまり具体的な事まで開示できなくて申し訳ないのですが。
あえて書くなら、

大量のテキストフレーム内の文字から、
一定距離はなれた場所を四角い罫で巻くような処理を行いたい。
また、
一度罫が巻かれたテキストデータに
文字の増減があった際、罫を巻きなおす事も多々あり、
現状動いているフローと共通したデータを使用する事も多々あるので、
この場合アウトライン処理と結果が異なってくると問題になります。

現状G5MacのCS2、3、4で作業は行われており
IntelMacのCS3、4、5、5.5へ作業を移行したい。
移行期間中の事を考慮しても、
IntelMac、G5Macの両方を平行利用する期間が数年はある為、
両ハードで、動くCS4を暫くはメインに使用しなければならない。

文章わかりにくくてすいません。
難しい案件であるのは自分でも理解しておりますです。
» 11
[6191]Re: 合成フォントがアウトライン化出来ない | 投稿者:(z-) | 投稿日:2011/10/07(Fri) 18:22:11
了解です。なんともご本人のもどかしさが伝わる文言で...

テキストフレームの角カチカチ(Shiftキーは不要でしょうか?)の件、
textFrame.fit(FitOptions.FRAME_TO_CONTENT); かと思ったんですが違いましたね。
カチカチした対極の点を基準にフィットします。コーナーに限らず辺の中央(TOP_CENTER等)でも有効で、
テキストフレームの場合、角をカチカチすると縦横比保持のままオーバーフロー解消まで拡大(またはギリギリまで縮小)し、
グラフィックフレームの場合はfit(FitOptions.FRAME_TO_CONTENT)と同等、でも辺をさわった場合は結構トンチキな動きのようで。。触らない軸のフレームサイズを維持したままリンクの左上に揃ってしまう。
字送り方向のフィッティングは連結マークが邪魔で触れない事が多いので、スクリプトでやれるならウチも是非という所存ですが、やっぱり見つかりません。

マウス操作でのみ挙動、操作するポイントにより基準点が変化、といった手合いの機能はJavaScriptのDOMに実装されていない事が多いように思います。
» 12
[6192]Re: 合成フォントがアウトライン化出来ない | 投稿者:PICTRIX | 投稿日:2011/10/07(Fri) 22:26:09
問題は、一行目の辺座標ですかね。。。
仰る様にルビやら圏点やら変形やらシフトやら。。。
行末は各行のエンドホリゾンタルオフセットの最大値?
文末はエンドベースラインで分かるとしても。。。
» 13
[6195]Re: 合成フォントがアウトライン化出来ない | 投稿者:(z-) | 投稿日:2011/10/08(Sat) 01:19:53
と、今さらですが、ようやく自宅にて IntelMac+CS3で検証に至りました。
たちまち落ちまちた。。あ、回文です(どうでもいい)

手元の簡便なテストのみですが、CS3を情報ウィンドウ上で「Rosettaを使って開く」にチェックを入れで起動したところ、落ちることなく無事アウトライン化できました。が、たまたまかも知れません。
そちらの実際の作業データ上ではどうでしょうか?

実測値との誤差の許容範囲によりますが、必要な文字列をすべて合成じゃないフォントにばらしてしまうという手も。特例文字にはW104%、H104%拡大。文字揃えの設定によっては浮き沈みしますけど、ベースラインシフト、ルビ、圏点ていどなら0.96%のオフセット値補正でどうにか?

>P師匠
行末の最大値=
ひとかたまり.insertionPoints.everyItem().horizontalOffset.sort().reverse()[0];
みたいなのですかね ^
» 14
[6196]Re: 合成フォントがアウトライン化出来ない | 投稿者:kuw | 投稿日:2011/10/08(Sat) 15:13:00
PICTRIXさん (z-)さん

ありがとうございます。

>テキストフレームの角カチカチ(Shiftキーは不要でしょうか?)の件、
テキストフレームの角ダブルクリックはShiftいりませんでした。
今まで無意識にShift押してました^^;

>問題は、一行目の辺座標ですかね。。。
1行目の全ての文字内を調べて座標を出すしかなさそうです。
がんばります。

>行末は各行のエンドホリゾンタルオフセットの最大値?
>文末はエンドベースラインで分かるとしても。。。
たしかにCS3以降限定なのでbaselineで無くendBaselineが使えそうですね。
両改行以外文字位置をNumberでList化して...最大値を出す...みたいな感じで行きます。

>手元の簡便なテストのみですが、CS3を情報ウィンドウ上で「Rosettaを使って開く」にチェックを入れで起動したところ、落ちることなく無事アウトライン化できました。が、たまたまかも知れません。
rosettaで起動しようとしたらSuitcaseFusion3さんプラグインのお怒りを買ったようで、
起動時に強制終了します^^;
さすがに処理も遅くなりそうですし、この線は険しそうです。

>必要な文字列をすべて合成じゃないフォントにばらしてしまうという手も。
現状のワークフローや、作業者の使い勝手の事を考えると、
残念ながらこの方法は選択できませんです。

色々考えてくださり、ありがとうございます。
>なんともご本人のもどかしさが伝わる文言で...
Adobeにはイラッとさせられたりガクッと打ちのめされたりする事の多い事多い事。
スクリプトでいじれる事自体はすばらしいのですけどね。
ギリギリ妥協出来るような物を何とかスクリプトで組んでみようと思います。
» 15
[6197]Re: 合成フォントがアウトライン化出来ない | 投稿者:お~まち | 投稿日:2011/10/08(Sat) 16:28:42
ちょっと思いついただけなのですが、合成フォントを使用する代わりに先頭文字スタイル、正規表現スタイルを使用して同様の組版を実現できないでしょうか。
使用している合成フォントがどのような内容なのか分からないのですが、置き換えることができれば、スクリプトを変更せず回避できるかもしれません。
» 16
[6198]Re: 合成フォントがアウトライン化出来ない | 投稿者:kuw | 投稿日:2011/10/11(Tue) 10:49:15
お~まちさん

ありがとうございます、
>合成フォントを使用する代わりに先頭文字スタイル、正規表現スタイルを使用して同様の組版を実現できないでしょうか。
なるほど。「正規表現スタイル」は気づきませんでした。
ただ、残念ながら、現状のワークフロー内での使用は難しそうです。
気付かなかったアイディアをありがとうございます。
» 17
[6199]Re: 合成フォントがアウトライン化出来ない | 投稿者:kuw | 投稿日:2011/10/14(Fri) 13:52:07
試行錯誤の末、実行スピード、内容共になんとか実用に耐えられそうなスクリプトの元だねができました。

一行目の辺端座標は、
行フィットを行った一行目の辺端座標と1文字目のbaseline、horizontalOffsetの差異を記憶し、行フィット前の物に適応させて親文字の辺端座標を確定させ、
この数値に1行目内に存在する文字の、ルビ縮小率、ルビ移動量とtextFrameの縮小値、textFrameの回転、縦組み横組みを加味させて
一行目の辺端座標を算出する事ができました。

後は、このスクリプトを使用しながら様子を見てみようと思います。
ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)