Android

AndroidでPDFに文字を出力しようとしたら「No glyph for 〇〇 in font ~」が出た。

mistake

JavaでPDFを生成する有名なライブラリとしてApache PdfBoxがあります。
そのライブラリを拡張したものとしてPdfBox-Androidというものがあり、これはAndroidでPDFの生成や編集ができる優れものです。
ライセンスも「Apache 2.0 License」なので、無料で使うことができます。

このライブラリを使って日本語を出力しようとしていたのですが、以下のエラーが出てしまいました。

No glyph for U+65E5 in font ~

これは指定した文字に対応するフォントがないというエラーになります。
今回はこちらについて少しご紹介しますね。

「No glyph for 〇〇 in font ~」とは?

このエラーは、「〇〇に対応するフォントがないので出力することができません」というものです。
例えば、U+65E5であれば「日」となり、この文字に対応するフォントがないです、という意味になります。

英語の文字は1バイトで表現することができますが、日本語などの特殊な文字に関しては1文字につき2バイト以上が必要です。
そのため、マルチバイトの文字表現に対応したフォントでなければ表示できないわけです。
このあたりはこちらのサイト様が詳しいので、詳しく知りたいという方はどうぞ。

「No glyph for 〇〇 in font ~」の対応方法は?

これは〇〇に入るものが文字がそれ以外かで変わってきます。

〇〇が文字の場合は、対応するフォントを導入してください。
日本語の場合は以下のサイト様がよくまとまっています。
2019年用、日本語のフリーフォント368種類のまとめ -商用サイトだけでなく紙や同人誌などの利用も明記
使う際はライセンスや利用条件を守ることを忘れないでくださいね。

ちなみに、Windows10を使用していて、ローカルでちょっと試してみたいだけであれば、以下のフォルダにフォントが配置されています。

C:\Windows\Fonts

一方、〇〇が文字以外(改行コードなど)の場合は、ライブラリに搭載されている別のメソッドを使うことで対応できる場合があります。
例えば、改行する場合は以下のページが参考になると思います。
How to solve “No glyph for U+000A in font Helvetica-Bold” in pdfbox (android port)

終わりに

今回はフォントのお話でした。
表題のエラーが出た場合は、まずフォントが対応しているのかを確認しましょう。
以上です。それでは。