No Bugs, No Life

アクセスカウンタ

zoom RSS graphviz で日本語フォントを表示する @Windows

<<   作成日時 : 2007/11/28 00:55   >>

トラックバック 0 / コメント 0

いろいろと試行錯誤していたのですが、graphviz version 2.16 での日本語フォントの表示方法がようやく判りました。
環境
  • Graphviz version 2.16
  • Windows XP Home

表示方法
  1. dotファイルはutf-8で保存する。
  2. 日本語を表示するオブジェクトの属性として fontname="MS GOTHIC"等を設定する。"msgothic.ttc" とか "MS ゴシック"とかはダメ。

以上、2点。
1点目は言わずもがなかも知れないけど、2点目については補足。
graphvizの2.12ぐらいまでは、フォント処理がgraphviz内に内包(?)されていたようだが、2.16辺りではなにやらgtk2アプリっぽい感じになっていて、fontconfigやpango辺りを使用してフォントの処理を行っているようです。
なので、そこら辺のfont-family として認識されない文字列がfontnameに設定されていると、PANGOが文句を垂れます。
E:\Home\system-diagram>dot -Tsvg ja.dot > ja.warn.svg

(dot.exe:1920): Pango-WARNING **: couldn't load font "msgothic.ttc Not-Rotated 14", falling back to "Sans Not-Rotated 14", expect ugly output.

自分もfontconfig周りはよう判らんのですが、多分おなじgtkアプリのInkscapeで [ テキスト > テキスト/フォント ] とかで指定できる文字列を使えば?と試したところビンゴでした。

ちなみに、環境変数:DOTFONTPATHの設定や、C:\WINDOWS\FontsをPATHに追加するといった対応は不要です。
(以下、Graphviz 公式サイトの Documentation > Node, Edge and Graph Attributes のfontname属性についての解説より引用。いい加減な対訳/意訳はkzの責です。)


fontname
Font used for text. This very much depends on the output format and, for non-bitmap output such as PostScript or SVG, the availability of the font when the graph is displayed or printed. As such, it is best to rely on font faces that are generally available, such as Times-Roman, Helvetica or Courier.

フォントはテキストに使用されます。フォントの処理は出力フォーマットに強く依存します。特にPostScriptやSVGといった非ビットマップ出力に関しては、グラフが画面表示されるときや印刷されるときにそのフォントが利用可能か否かに依存します。したがって、一般的に利用可能なTimes-Romanや、Helvetica、Courierといったフォントフェイスに頼るのがもっとも望ましい方法です。

If Graphviz was built using the fontconfig library, the latter library will be used to search for the font. However, if the fontname string contains a slash character "/", it is treated as a pathname for the font file, though font lookup will append the usual font suffixes.
もしGraphvizがfontconfigライブラリとともにビルドされている場合には、fontconfigが指定されたフォントを探すのに用いられます。もしfontnameに指定された文字列がスラッシュ文字("/")を含む場合には、フォントファイルへのパスとして扱われます。その際には、通常のフォントファイルのサフィックスを付与した上でフォントの探索が行われます。

If Graphviz does not use fontconfig, fontname will be considered the name of a Type 1 or True Type font file. If you specify fontname=schlbk, the tool will look for a file named schlbk.ttf or schlbk.pfa or schlbk.pfb in one of the directories specified by the fontpath attribute. The lookup does support various aliases for the common fonts.
Graphvizがfontconfigを使用していない場合には、fontnameはType1フォントまたはTrueTypeフォントのファイル名として扱います。なので、もしあなたが fontname=schlbk と指定したなら、Graphvizはschlbk.ttfや、schlbk.pfa、schlbk.pfbといったファイルを、fontpath属性で指定されたディレクトリ内で探索します。フォントの探索は、一般的なフォントについて多数の別名をサポートしています。


で、fontpath属性の説明をみてみるとこんな記述が。

fontpath
Directory list used by libgd to search for bitmap fonts if Graphviz was not built with the fontconfig library. If fontpath is not set, the environment variable DOTFONTPATH is checked. If that is not set, GDFONTPATH is checked. If not set, libgd uses its compiled-in font path. Note that fontpath is an attribute of the root graph.

Graphvizがfontconfigライブラリを用いてビルドされていない場合に、libgdがビットマップフォントを探索するディレクトリのリストです。
もしfontpath属性が設定されていない場合には、環境変数 DOTFONTPATHがチェックされます。もしDOTFONTPATHも設定されていなければ、GDFONTPATHをチェックします。それでもやはり設定されていない場合には、libgdはコンパイル時に決定されたフォントパスを使用します。fontpath属性はrootグラフの属性であることを留意してください。


ということで、ようやっと日本語フォントの表示が出来そうな感じです。(これはgraphviz でSVGを作成し、そのsvgをInkscapeでpngにエクスポートしたものです。)
画像

ちなみに、graphの属性としてfontnameを指定していたんんだけど、nodeの属性としてfontnameを指定していなかったが故に、「何でfontnameを指定しているのに、日本語が正しく表示されないんだろう」と悩んだのは内緒です。

テーマ

関連テーマ 一覧


月別リンク

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
graphviz で日本語フォントを表示する @Windows No Bugs, No Life/BIGLOBEウェブリブログ
文字サイズ:       閉じる