みなさん!無償で使えるPDF作成ライブラリとして有名なんですが PDFBox ってご存知でしょうか?
ただいざ使ってみるともやっとするポイントがちらほら...
まぁニッチなニーズなので仕方ない側面もあるんですけどね...ッ!!
私がPDFBoxを使ってみて困った事や嫌だった事とかを以下にまとめたので参考にしてくださいな!
複数行対応はしたが・・・・?
参考リンク:PDFBox 2.0.21は複数行テキストフィールドの自動フォントサイズに対応
上記の通りPDFBoxは複数行の出力にも自動フォントサイズにも対応をしています。
がしかし!!!
以下のコードの通り、デフォルトフォントサイズ12ptという所を変更する事は出来ません。
https://github.com/apache/pdfbox/blob/2.0.26/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java#L817
ちなみに、**下寄せも出来ません。**実装例としては以下とかがありますね。
https://issues.apache.org/jira/browse/PDFBOX-3812
日本語に対応したが・・・・?
参考リンク:https://qiita.com/ota-meshi/items/55a6c379544b33728b58
補足すると、TTFを見つける処理はFontFileFinderってものを使ったりするとインストール済みフォント見つけやすそうね。
参考リンク:https://github.com/apache/pdfbox/blob/2.0.26/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java#L129
がしかし!!!
"/Helv 0 Tf 0 g" の説明とかなさすぎる。
Helvの部分はCOSNameについて調べるといい感じ、
TrueTypeFont ttf = findTTF("ipag.ttf");
PDFont font = PDType0Font.load(new PDDocument(), ttf, true);
String name = new PDResources().add(font).getName();
String defaultAppearanceString = "/" + name + " 0 Tf 0 0 1 rg";
って感じです。
0 はfontSizeで12ptとか。0なら自動サイズです。
Tfは謎...
0 g は文字色で黒らしいけど、どこまで調整可能かは調べてません。小数点とかいけるのかな??例がない...
日本語に対応した例がない!!
これが結構きつい。例えば複数フォント対応をしたいと思ってサンプルを見つけたのが以下
https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedMultipleFonts.java?revision=1892302&view=markup
でも実際蓋を開けてみると、サロゲートペアとかの考慮がかけてたり、そもそも
if (isWinAnsiEncoding(s2.codePointAt(0)) && font != fonts.get(0))
の所なんかは &&
じゃなくて ||
じゃないかとか...
codePointAtとかoffsetByCodePointsとかを意識的に使った実装修正が必要。
雑にURLまとめた記事になりましたが、皆さんの参考になればと思います!