PRS-500日本語フォント導入法:フォント作成編
2007.12.03説明
まず、前述した3個のフォントは、それぞれ次のようなフォント名でもってOS側から呼び出されています:
| ファイル名 | フォント名(Full font name) |
|---|---|
| tt0003m_.ttf | Swis721 BT Roman |
| tt0011m_.ttf | Dutch801 Rm BT Roman |
| tt0419m_.ttf | Courier10 BT Roman |
これらの名前はOSの起動時にも使用されるため、変えてしまうとPRS-500は起動不能に陥いります。 ファイル名はリネームするだけですみますが、フォント名を初期フォントと一致させるにはフォントを処理できるツールが必要となります。
※この説明ではこれにttftinkerというツールを使います。 ttftinkerはモナーフォントプロジェクトで配布されているツールで、Perlスクリプト群で構成されています。 このツールの特徴は、TrueTypeフォントをその構成要素である「テーブル」というデータ単位にファイル分割し、ファイル操作をすることでフォントを作成する、コマンドライン型のアプリケーションであるということです。これによってTrueTypeフォント認識にあたっての重要な要素である「テーブルの順序」を限り無く初期フォントに近づけることができますし、フォント生成の自動化も可能になります。また「テーブル=ファイル」というのは人によっては非常に直感的でしょう。既存のフォントデータには手を付けず、機器に合わせて構成しなおすという今回のような用途には最適です。
前段で説明したように上書フォントのフォント名を初期フォントと(※)一致させるには、フォント名のメタデータが含まれるテーブル「name」を初期フォントと同一のものとしなくてはなりません。これをttftinkerでするには、まず初期フォント・対象フォントの両方をテーブル単位に分割し、分割されて出来た初期フォントのnameファイルを対象フォントのそれに上書きするという形になります。
※手間を省くため、これからの説明では次のように用語を定義します。
- 初期フォント
- Sony Readerの内蔵する3個のフォント。英字グリフしか含まない。
- 上書フォント
- 初期フォントを上書きして日本語を表示させるためのフォント。
- 対象フォント
- Sony Readerで認識可能な上書フォントを作るベースとなるフォント。縦書きを綺麗に表示させるには等幅フォントの方が望ましい。
次に、Windowsなどで使われる多くのTrueTypeフォントにはビットマップデータが含まれています。PRS-500のフォント表示にはアウトラインデータしか使われていないため、これらのテーブルは必要ありません。むしろビットマップデータが埋め込まれたままのフォントを扱おうとすると表示が崩れるので、最低でもビットマップデータはフォントから削除する必要があります。
※ttftinkerを使う場合はビットマップデータを扱うテーブル、
EBDTとEBLCをttfpackでの統合の際に含め「ない」ようにします。
まとめ
PRS-500で使えるTTFフォントを作るには:
- ファイル名を初期フォントと一致させる
- フォント名を初期フォントと一致させる
- ビットマップデータは削除する
※またこの条件に加えて、フォント自体をPRS-500で認識させやすくするには、上書フォントのテーブル順序を初期フォントに極力近づけた方が良いでしょう。もっとも、これは必ずしも必須ではありませんので、おまじないみたいなものです。ttftinker以外のテーブル順を指定できないフォント処理ソフトでもPRS-500で認識可能なフォントを生成することはできます。
ではここからはIPAフォントを対象フォントとして、Windows環境での操作例を混じえながら実地に解説していくことにします。
用意する材料
- Perl
- ttftinker
- IPAフォント(
ipag.ttf ipagui.ttf ipam.ttf) - 3個の初期フォント(
tt0003m_.ttf tt0011m_.ttf tt0419m_.ttf)
初期フォントについては、eBook Libraryがインストールしてあれば、デフォルトでC:\Program Files\Sony\Reader\Data\fonts以下にあります。このフォントは本体で使われているフォントとまったく同一のものです。
※他の入手方法としてSonyの配布しているPRS-500公式ファームウェア・アップデーターを展開した中にある
cramfs.Fsk.imgのさらに中にもありますし、ebook.pyを使って本体から吸い出すこともできます。
作業例
- Perlをインストールします。
- ttftinker-2.90.tar.bz2を展開して設置し、そのディレクトリを環境変数PATHとPERLLIBに設定します。
set path=%path%;C:\ttftinker
set perllib=C:\ttftinkerここからはこのディレクトリを作業ディレクトリとすることにします。
cd C:\ttftinker - WindowsではPerlスクリプトをバッチファイルとして扱えた方が便利です。
pl2batで変換しましょう。
pl2bat ttfunpack
pl2bat ttfpackこれでttfunpack.batとttfpack.batというファイルができたはずです。
- 初期フォントと対象フォントを作業ディレクトリに用意しましょう。
unzip IPAfont00101.zip
copy "C:\Program Files\Sony\Reader\Data\fonts\*"これで準備は整いました。いよいよ料理に入ります。
- 初期フォントと対象フォントをttfunpackでテーブル単位に分割します。
ttfunpack ipag.ttf ipag
ttfunpack ipagui.ttf ipagui
ttfunpack ipam.ttf ipam
ttfunpack tt0003m_.ttf tt0003m_
ttfunpack tt0011m_.ttf tt0011m_
ttfunpack tt0419m_.ttf tt0419m_これでTTFファイルのテーブルがファイルとして同名のディレクトリに出力されました。
- 初期フォントのnameテーブルファイルを対象フォントのに移植します。
copy /y tt0003m_\name ipag
copy /y tt0011m_\name ipam
copy /y tt0419m_\name ipagui ttfdirというファイルにはフォントのテーブル順序とttftypeが収められています。
初期フォントのttfdirを参考に、できるだけその内容に近づけるようにttfpackの引数を調整し、対象フォントのテーブル群から上書フォントを生成しましょう。この時初期フォントには存在しない、縦書き関連のテーブルである「mort vmtx vhea」の三つを末尾に付け加えるようにします。cd ipag
ttfpack 0x00010000 name prep glyf cmap hmtx post loca maxp head hhea OS_s2 mort vmtx vhea > tt0003m_.ttf
cd ..\ipam
ttfpack 0x00010000 name prep glyf cmap hmtx post loca maxp head hhea OS_s2 mort vmtx vhea > tt0011m_.ttf
cd ..\ipagui
ttfpack 0x00010000 name prep glyf cmap hmtx post loca maxp head hhea OS_s2 mort vmtx vhea > tt0419m_.ttf
cd ..- ここまでの作業が上手くいっていれば、
ipag.ttfを元にtt0003m_.ttfが、ipam.ttfを元にtt0011m_.ttfが、ipagui.ttfを元にtt0419m_.ttfが、それぞれのディレクトリにできているはずです。表示確認のため、eBook Libraryのコンテンツ表示用フォントをバックアップしてから、新しく生成したフォントをそこにコピーしてみましょう。
cd "C:\Program Files\Sony\Reader\Data\fonts"
ren * *.org
copy C:\ttftinker\ipag\tt0003m_.ttf
copy C:\ttftinker\ipam\tt0011m_.ttf
copy C:\ttftinker\ipagui\tt0419m_.ttfeBook Libraryを起動してUTF-8のプレーンテキストや日本語を含むLRFファイルなどが正常に表示されれば成功です。 おつかれさまでした。