PDFを表示するときに,困ったことはありませんか.
PDFを表示する場合,その文字表示に関しては,
それを表示するアプリケーション及びアプリケーションが稼働している環境に依存します.
(フォント埋込の場合を除く)
このため,同じフォントをインストールしても,Windows環境で表示・印刷した場合と,
Linux環境で表示・印刷した場合で,見た目が異なるといった事態が,たまに起こります.
この場合,PDFの表示に使われるフォントを,両方の環境にインストールすれば解決するはずなのですが,
Linux環境に於いて,オープンソース・プロダクトなどを使用しているような場合は,
PDFで使用しようとしているフォントがインストールされているにもかかわらず,
別のフォントでレンダリングされてしまうといった事象が発生します.
これは,Linuxで使用されているフォント管理システムである,FontConfig
が,
PDF内で指定されているフォント名とフォントファイルの関係を,正しく認識できていないからです.
このような場合には,FontConfigの設定ファイルでの設定を調整して対応します.
今回は,以下のような筆者の環境における,FontConfigの設定例を紹介します.
- Red Hat 4.1.2-50
- FontConfig 2.4.1
以前,紹介した SWFTools の pdf2swf を使用した場合を例にして説明します.
設定前の状態で,以下のように実行すると,
- 《 FontConfig設定の調整前 》
-
> pwd; ls ./bin /home/hoge/swftools as3compile gif2swf pdf2swf swfbbox swfcombine swfextract swfstrings font2swf jpeg2swf png2swf swfc swfdump swfrender wav2swf > export FC_DEBUG=1039 > ./bin/pdf2swf -vvvv -s languagedir=./share/xpdf/japanese -F ./fonts \ -T 4 -s flashversion=4 ./Test-HelveticaNeueLTStdMdCnO.pdf \ -o ./Test-HelveticaNeueLTStdMdCnO.swf ........ FcConfigSubstitute Pattern has 20 elts (size 32) family: "HelveticaNeueLT Std Med Cn"(s) familylang: "en"(s) style: "Italic"(s) stylelang: "en"(s) fullname: "HelveticaNeueLTStd-MdCnO"(s) "HelveticaNeueLT Std Med Cn Ob"(s) fullnamelang: "en"(s) "en"(s) slant: 100(i)(s) weight: 100(i)(s) width: 75(i)(s) foundry: "adobe"(s) file: "/home/hoge/swftools/fonts/HelveticaNeueLTStd-MdCnO.ttf"(s) ........ DEBUG Font HelveticaNeueLT Std-LtIt (/home/hoge/swftools/fonts/HelveticaNeueLTStd-LtIt.ttf) \ is a match for HelveticaNeueLTStd-MdCnO DEBUG fontconfig: returning filename /home/hoge/swftools/fonts/HelveticaNeueLTStd-LtIt.ttf VERBOSE Font HelveticaNeueLTStd-MdCnO maps to \ /home/hoge/swftools/fonts/HelveticaNeueLTStd-LtIt.ttf ........
- 環境変数 FC_DEBUG は,FontConfig のデバッグ情報出力設定のためのものです.
詳細は,FontConfigのマニュアルを参照して下さい. - pwd2swf コマンドの "-vvvv" オプションは,ログ出力レベルをTRACEにするものです.
最後の,フォント名とフォントファイルをマッピングしている部分を見て分かる通り,
FontConfigのフォント認識状態に問題があって,
pdf2swf コマンドが,PDF内で指定されているフォント名に対応するフォントファイルを,
正しく認識できていないことがわかります.
そこで,上記の FontConfigのフォント認識を,pdf2swf が正しく使用できるように修正するために,
~/.fonts.conf に以下の記述を追加し,設定します.
- 《 .fonts.conf 》
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- for fontconfig ver.2.4.1 --> <match target="scan"> <test name="family" qual="any"> <string>HelveticaNeueLT Std Med Cn</string> </test> <edit name="family" mode="assign_replace"> <string>HelveticaNeueLT Std</string> </edit> <test name="style" qual="any"> <string>Italic</string> </test> <edit name="style" mode="assign_replace"> <string>MdCnO</string> </edit> </match> </fontconfig>
すると,設定後の,コマンド実行の結果は...
- 《 FontConfig設定の調整後 》
-
> pwd; ls ./bin /home/hoge/swftools as3compile gif2swf pdf2swf swfbbox swfcombine swfextract swfstrings font2swf jpeg2swf png2swf swfc swfdump swfrender wav2swf > export FC_DEBUG=1039 > ./bin/pdf2swf -vvvv -s languagedir=./share/xpdf/japanese -F ./fonts \ -T 4 -s flashversion=4 ./Test-HelveticaNeueLTStdMdCnO.pdf \ -o ./Test-HelveticaNeueLTStdMdCnO.swf ........ DEBUG Font HelveticaNeueLT Std-MdCnO (/home/hoge/swftools/fonts/HelveticaNeueLTStd-MdCnO_mk.ttf) \ is a match for HelveticaNeueLTStd-MdCnO DEBUG fontconfig: returning filename /home/hoge/swftools/fonts/HelveticaNeueLTStd-MdCnO.ttf VERBOSE Font HelveticaNeueLTStd-MdCnO maps to \ /home/hoge/swftools/fonts/HelveticaNeueLTStd-MdCnO.ttf ........
となり,pdf2swf が,PDF内で指定されているフォント名に対して, フォントファイルを正しくマッピングするようになりました.
どうも,FontConfigは,フォントファイルを読み込んで解析する処理の部分が,まだこなれていないようで,
今回使用した FontConfig 2.4.1 以降も,頻繁にバグフィックスを重ねています.
このことにより,《 FontConfig設定の調整前 》 にある,
FontConfigのフォント認識状態の出力が,バージョン毎に変化しています.
ですから,~/.fonts.conf ファイルを設定するときには,
稼働環境のFontConfigのバージョン毎に,確認しながら設定する必要があります.
ご注意下さい.