RACCOON TECH BLOG

株式会社ラクーンホールディングスのエンジニア/デザイナーから技術情報をはじめ、世の中のためになることや社内のことなどを発信してます。

PDFに埋め込むフォントの選び方

こんにちは、技術戦略部の渡部です。

ここ最近は、あるデータベースの文字エンコードをUTF8に変更するプロジェクトに参加しています。
そのプロジェクトの中でPDFファイルに埋め込むフォントの調査を行いました。
EUC-JPの範囲では問題なく使えていたフォントでしたが、テーブルがUTF8になると生成されるPDFで一部の文字が正常に表示できなくなるという問題が見つかりました。

調査の結果、PDFファイルに埋め込んでいたフォントに該当文字のグリフが収録されていないことが原因でした。
そこで今回はPDFに含まれる文字の対応範囲を検討して、その範囲内の文字を正しく表示するためにはどんなフォントを選べば良いか調査した結果を共有します。

フォントに収録される文字に気を付ける理由とは

PDFにはフォントを埋め込むことができます。フォントを埋め込むと、PDFで使われているフォントをユーザが持っていなくても埋め込んだフォントによって表示が行われます。
これによって、開発者が想定した字形やレイアウトでユーザがPDFファイルを閲覧することを担保できます。

しかし、埋め込んだフォントにグリフが収録されていない文字についてはそうではありません。

アプリケーションが文字を描写する際にフォントフォールバックという処理が走ることがあります。
フォントフォールバックとは描写に利用しているフォントにとある文字が収録されていない場合、その文字が収録されているフォントを部分的に利用し描写を行う処理のことです。

一般的なPDF閲覧ソフトにはフォントフォールバック機能は搭載されています。そのため、埋め込んだフォントにグリフが収録されていない文字がPDFファイルにあっても、代替フォントによって表示が行われます。
このとき、PDF配布者が想定していないフォントによって表示がされるため、レイアウト崩れや文字が正常に表示できないといった問題が起こりえます。

このような問題を回避するために、PDFファイルで使われる可能性がある文字のグリフは埋め込むことができます。
そのため、フォントにどの文字のグリフが収録されているかを意識する必要があります。

収録する文字の基準はどうするか?

ではどの文字を収録しているフォントなら適切であると言えるでしょう?
フォントに収録できるグリフは65536個までとなっているため、全ての文字を一つのフォントに収録することは不可能です。

そこで私は、PDFが利用される国で現在使われている文字を収録していれば良いのではないかと考えました。
つまり日本国内で使われるPDFであれば、日本で現在使われている文字を収録したフォントであればいいということです。

現在日本で使われている文字の範囲の一つとして、JIS漢字コードという規格があります。

JIS漢字コードとは?

JIS漢字コードとは日本産業規格(JIS)が制定した文字コードです。
漢字コードという名前ですが、ひらがな・カタカナ・記号なども含んでいます。

JIS漢字コードは何度か改定され、その度に文字の修正や追加が行われています。
フォントの基準として採用されているJIS漢字コードは主にJIS X 0208とJIS X 0213の二つです。

JIS漢字コードでもバージョンによって収録内容が異なります。
上記の中で最も収録文字が多いのがJIS X 0213:2004です。
現在日本で使われている文字をカバーするという観点から見ると、JIS X 0213:2004に準拠したフォントを使うのが良いと考えられます。

テストに使うサロゲートペアはどの文字を使えばいいか?

冒頭でお話したように、今回の調査はテスト中にPDFで正常に表示されない文字を見つけたことがきっかけでした。
この時、正常に表示されなかった文字は俗に言うサロゲートペアでした。

サロゲートペアとはUTF16においてUnicodeのコードポイントを2byteコード2つに対応付けた文字たちのことです。
文字エンコードをUnicode用の符号化方式(UTF8やUTF16)に変更した際のテストでよく用いられると思います。

Unicode用の符号化方式に切り替えるとこれらの文字を取り扱うことができるようになりますが、フォントにグリフがなければ当然表示はできません。
そのため、テストの際に「文字エンコードには問題ないはずなのにPDFで正常に表示されない」という現象が起こる可能性があります。
この現象が起きた時に、「この文字は使われないからフォントにグリフがなくても大丈夫」なのか「この文字は使われる可能性があるがフォントにグリフがないから問題あり」なのかを判断する必要があります。

テストに使うサロゲートペアの選び方

サロゲートペアが正常に表示されるかテストする場合、実際に利用される可能性を鑑みて漢字を使うことが多いと思います。
しかしサロゲートペアの文字一覧を見ると、日本では使われない漢字も存在するためどの文字でテストを行えば良いか判断が難しいです。
そんな時に判断の目安となるのが「JIS漢字コードに収録されているか」です。

JIS X 0213が制定された時に、常用漢字ではない特殊な漢字を第3水準漢字・第4水準漢字として新たに制定しました。
この時にいくつかの漢字がUTF16ではサロゲートペアとして対応しているコードポイントに登録されました。
JIS漢字コードの制定によってサロゲートペアとして表現される文字領域に日本で使われる文字が追加されたということです。

つまり、日本で使われる可能性があるサロゲートペアはJIS漢字コードに収録されているということです。
JIS X 0213に準拠したフォントを使用すれば、日本で使われるサロゲートペアのグリフは収録されているということですね。
なので、サロゲートペアが正常に表示できるかテストを行う際は、JIS漢字コードに収録されている文字から選びましょう。

日本で使われている(かもしれない)がJIS漢字コードに収録されていない文字たち

ただし、残念ながら例外も存在します。
サロゲートペアのテストとしてよく使われている「?(通称:つちよし)」はJIS漢字コードには収録されていません。
某有名牛丼チェーン店さんが正式にはこちらの表記であることから有名な漢字ですが、JISとしては日本で使われている文字には含まなかったようです。
?はJIS漢字コードには収録されていませんが、Unicodeには他の国で使われている漢字として登録されています。
つまりUnicode用の符号化方式で取り扱えますが、JIS漢字コード基準では表示が担保されない文字です。

このような文字がいくつ存在するかはわかりませんが、JIS漢字コードに定義されていないから表示は保障できないとするのか、使われる可能性があるからフォントに含まれているか確認するかは開発者の判断によるところだと思います。

(じゃあJIS漢字コードに準拠する必要もないじゃないかと言われるかもしれませんが、サービスとしてどの文字に対応しているか公表できるのは大きいと思います)

おわりに

今回の調査では、PDFファイルが使われる国の文字規格に準拠したフォントを選ぶのが適切であるとして調査を行いました。
調査の結果から、日本で現在使われている文字範囲としてはJIS漢字コードのJIS X 0213:2004という規格が最も適切であると判断しました。

そのため、日本で使われる文字を正常に表示するためには、JIS X 0213:2004に準拠したフォントを埋め込むのが良いということがわかりました。

おまけ

日本で使われる文字の規格はJIS漢字コードの他にも存在します。(住基統一文字や戸籍統一文字など)
どの規格を採用するかは場合によりますが、規格に準拠したフォントを使用することでテストの際にどの文字が表示されないとおかしいかを確認することができます。
なので、PDFにフォントを埋め込む際には規格に準拠したフォントを選ぶのをオススメします。

一緒にラクーンのサービスを作りませんか? 採用情報を詳しく見る

関連記事

運営会社:株式会社ラクーンホールディングス(c)2000 RACCOON HOLDINGS, Inc