【Java】PDFBoxで日本語を含むPDFが作成できない

お仕事でJavaを触る機会がある。ちょっと勉強しましょう。

背景

Javaを触り始めてはや数日。PDFを生成する機能を実装しなければいけない。

どうやら、PDFBoxを使うらしい。

PDFBoxのチュートリアル的なサイトを見つけて、空のPDFを生成するところからスタート。

課題

日本語を含むPDFを生成しようと、フォントファイルを読み込む処理を追加して生成しようとしたところ、実行すると下記のエラー発生。

java.io.IOException: loca is mandatory
	at pdfbox.app@2.0.20/org.apache.fontbox.ttf.TTFParser.parseTables(TTFParser.java:209)
	at pdfbox.app@2.0.20/org.apache.fontbox.ttf.TTFParser.parse(TTFParser.java:150)
	at pdfbox.app@2.0.20/org.apache.fontbox.ttf.TTFParser.parse(TTFParser.java:87)
	at pdfbox.app@2.0.20/org.apache.pdfbox.pdmodel.font.PDType0Font.load(PDType0Font.java:67)
	at jp.javadrive.Sample01.main(Sample01.java:30)

原因

PDFBoxでは、otfファイルはサポート外のようです。 確かに、先のエラーはotfファイルを参照していた。

PDFont font = PDType0Font.load(document, new File("/Library/Fonts/AdobeFangsongStd-Regular.otf"));

対策

適当にフリーフォント(ttfファイル)をダウンロードして、差し替えてみたらちゃんとPDFが作れた。

PDFont font = PDType0Font.load(document, new File("/Path/to/font/GenShinGothic-Bold.ttf"));

参考サイト