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を使う場合はビットマップデータを扱うテーブル、EBDTEBLCttfpackでの統合の際に含め「ない」ようにします。

まとめ

PRS-500で使えるTTFフォントを作るには:

  1. ファイル名を初期フォントと一致させる
  2. フォント名を初期フォントと一致させる
  3. ビットマップデータは削除する

※またこの条件に加えて、フォント自体をPRS-500で認識させやすくするには、上書フォントのテーブル順序を初期フォントに極力近づけた方が良いでしょう。もっとも、これは必ずしも必須ではありませんので、おまじないみたいなものです。ttftinker以外のテーブル順を指定できないフォント処理ソフトでもPRS-500で認識可能なフォントを生成することはできます。

ではここからはIPAフォントを対象フォントとして、Windows環境での操作例を混じえながら実地に解説していくことにします。

用意する材料

初期フォントについては、eBook Libraryがインストールしてあれば、デフォルトでC:\Program Files\Sony\Reader\Data\fonts以下にあります。このフォントは本体で使われているフォントとまったく同一のものです。

※他の入手方法としてSonyの配布しているPRS-500公式ファームウェア・アップデーターを展開した中にあるcramfs.Fsk.imgのさらに中にもありますし、ebook.pyを使って本体から吸い出すこともできます。

作業例

  1. Perlをインストールします。
  2. ttftinker-2.90.tar.bz2を展開して設置し、そのディレクトリを環境変数PATHとPERLLIBに設定します。

    set path=%path%;C:\ttftinker
    set perllib=C:\ttftinker

    ここからはこのディレクトリを作業ディレクトリとすることにします。

    cd C:\ttftinker

  3. WindowsではPerlスクリプトをバッチファイルとして扱えた方が便利です。pl2batで変換しましょう。

    pl2bat ttfunpack
    pl2bat ttfpack

    これでttfunpack.batとttfpack.batというファイルができたはずです。

  4. 初期フォントと対象フォントを作業ディレクトリに用意しましょう。

    unzip IPAfont00101.zip
    copy "C:\Program Files\Sony\Reader\Data\fonts\*"

    これで準備は整いました。いよいよ料理に入ります。

  5. 初期フォントと対象フォントを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ファイルのテーブルがファイルとして同名のディレクトリに出力されました。

  6. 初期フォントのnameテーブルファイルを対象フォントのに移植します。

    copy /y tt0003m_\name ipag
    copy /y tt0011m_\name ipam
    copy /y tt0419m_\name ipagui

  7. 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 ..

  8. ここまでの作業が上手くいっていれば、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_.ttf

    eBook Libraryを起動してUTF-8のプレーンテキストや日本語を含むLRFファイルなどが正常に表示されれば成功です。 おつかれさまでした。

Sony Reader PRS-500への日本語フォント導入方法

2007.12.03

自分なりにSony Reader PRS-500への日本語フォント導入方法をまとめてみました。まだまだ改善の余地が残る手法かとは思いますが、国内の数少ないPRS-500ユーザーの方はぜひ参考にされてみてください。

※先ごろ発売された新機種PRS-505については、この手法に必須であるファームウェア上書きツール「Universal Flasher」がPRS-505に対応していません。Universal Flasherの作者であるIgorsk氏は対応に意欲的で、その開発も始められていましたが、開発中に氏所有の開発機が起動不能に陥いり、現在は頓挫しています。
しかし2008年初頭に噂されるPRS-500初の公式ファームウェア・アップデートがあれば、これも解消されるとの予測が立っていますので、そう遠くない将来にはPRS-505でも日本語化が可能になることと思われます。(PRS-500とPRS-505ではFskという同一のシェルを使ってますので、PRS-500と同じくフォント入れ替えだけで日本語表示が可能になる可能性は高いです。)

めんせきじょうこう

これから説明する方法を実際に試される方は必ず自己の責任において行ってください。
救済方法こそありますが、本質的にファームウェアの上書きは危険な行為です。本体機器が起動しなくなる可能性は常にあります。特にSony Readerは北米でしか販売されていないため、もし上書きに失敗し起動不能に陥ってしまったら、最悪の場合だと修理のため北米に送らなければならなくなるかもしれません。

※Igorsk氏のような、多分外部の人間としては世界一Sony Readerの内部構造に詳しいハッカーでさえ、この状態に陥いってます。

すべて自助努力の世界です。
その「覚悟」のある方だけ、この先へと読み進めてください。
Read the rest of this entry »

このサイトについて

2007.12.02

mobileread-jp.comは、LIBRIe、SonyReader、iLiad、kindle、Σブック、ワーズギアといった電子書籍専用端末に関する情報をまとめたブログです。

不特定多数のユーザーが投稿できるWordPressを利用していますので、上記に関する情報をお持ちの方は、お気軽にユーザー登録よりアカウントを作成、情報の共有をしていただければと思います。