import文省くから適宜import文は付け加えてね!
発生した問題
使用言語:Java(+Kotlin)
環境:InteliJ IDEA
PDFBoxの2.x.x系統の頃ってPDType1Font
クラスにpublic static final
なフィールドでいくつかデフォルトのフォントスタイルが定義されてて
PDFont font = PDType1Font.COURIER;
みたいな感じで気軽にフォントを用意できたんですよねぇ
んで何も考えずに最新版の3.0.0のjarを導入して同じようなことをやろうとしたら
なんか怒られちゃいました
なんでだろう~
結論
なんかアプデに伴いこのフィールド消されたらしいです
3.0.0ではこう書くことで同じ意味になるらしいですよ
PDFont font = new PDType1Font(Standard14Fonts.FontName.COURIER);
やったね!
これStackOverFlowにほぼ同じこと書いてあるんですが(後述)Qiitaはおろか日本語のページ全体にすら見当たらなかったのでQiitaの記事にさせていただきました
コーディング中の方はもうこれで結論なんでコピペ後Ctrl+WでOKですよ~
経緯(すごく長いです)
今回は問題解決に公式JavaDocを読んだことがが大きく寄与していて、公式ドキュメントをイカして問題解決をするというのはなかなかいい経験だなぁと思ったのでので今回は解決までの経緯も書いちゃおうかなと思います。
ホントは地味に調べるの頑張ったんでその頑張りを知ってほしいというだけなんだけどね!
私ですね、いつのまにか大学のサークル(全然プログラミング関係ない)でパソコンできる枠として一部の方々に認識していただけて
そのサークルでよく使う定型のある資料を、「従来どおりExcelで作ると地味にめんどくさいし書式も揃わないから、楽なGUIでpdfまで持っていけるプログラムを作ってくれ(意訳)」ってお願いされたんですよ
んでpdf扱うんでPDFBox導入して試しに文字を出してみようとしてみたらさっきの
これですよ(執筆時の再現でめんどくさいので使おうとしてるフォントが違うのは許して...)
ググってみても特に情報は見つからないんですね
大半の情報は2.x.x系のものなんで
でもあくまでこいつらは外部ライブラリなんで落ち着いてPDType1Font
クラスのJavaDocを検索して見比べたら
↓Ver2.0.6
↓Ver3.0.0
消 え と る が な
そのあとしばらく名前が関連してそうなクラスのJavaDocをさまよってたらStandard14Fonts
なるクラスを見つけます
「キタッ!」っと思い開いたらこれです
もはや"Field"の文字すらありません...絶望...
...うん......?
NestedClass??..なんだこれ...
FontName......Enumか......
FontName!?!?!?!?
そこには例のデフォルトフォントたちの名前が!!!キタコレ!!
あまりの衝撃に頭の中で最近ようやく見た推しの子EDが流れ始めましたね
このEnumの名前をもとに改めてググるとこのStackOverFlowがヒット
なになに...?
PTDType1Font Doesn't find the fonts
contentStream.setFont(PDType1Font.COURIER, 15);
After that i added the . it shoud come up with many options of fonts, i also imported >the library for the function setFont();
ふむふむ...似た状況だな...
回答は...?
Use this line of code instead.
contentStream.setFont(new PDType1Font(Standard14Fonts.FontName.COURIER), 15);
!?!?!?!?ここからジョジョ第5部の処刑用bgmが頭の中に流れ始めます
じゃぁ...こういうこと...?ググってコピペ系エンジニアの私は頭をフル回転させてコードを書いてみました。結果は...?
キタァァァァ!!
そんなこんなで溢れ出る喜びの中私は今この記事を書いているわけです
先程のStackOverFlowにもあったのですが、2.x.x系にあったフィールドは案の定廃止されたようですねぇ~
めでたしめでたし