1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PDFBoxのデフォルトフォントがver.3.0.0で無くなってた案件

Last updated at Posted at 2023-09-19

import文省くから適宜import文は付け加えてね!

発生した問題

使用言語:Java(+Kotlin)
環境:InteliJ IDEA

PDFBoxの2.x.x系統の頃ってPDType1Fontクラスにpublic static finalなフィールドでいくつかデフォルトのフォントスタイルが定義されてて

PDFont font = PDType1Font.COURIER;

みたいな感じで気軽にフォントを用意できたんですよねぇ
んで何も考えずに最新版の3.0.0のjarを導入して同じようなことをやろうとしたら
image.png
なんか怒られちゃいました
なんでだろう~

結論

なんかアプデに伴いこのフィールド消されたらしいです
3.0.0ではこう書くことで同じ意味になるらしいですよ

PDFont font = new PDType1Font(Standard14Fonts.FontName.COURIER);

やったね!
これStackOverFlowにほぼ同じこと書いてあるんですが(後述)Qiitaはおろか日本語のページ全体にすら見当たらなかったのでQiitaの記事にさせていただきました
コーディング中の方はもうこれで結論なんでコピペ後Ctrl+WでOKですよ~

経緯(すごく長いです)

今回は問題解決に公式JavaDocを読んだことがが大きく寄与していて、公式ドキュメントをイカして問題解決をするというのはなかなかいい経験だなぁと思ったのでので今回は解決までの経緯も書いちゃおうかなと思います。

ホントは地味に調べるの頑張ったんでその頑張りを知ってほしいというだけなんだけどね!

私ですね、いつのまにか大学のサークル(全然プログラミング関係ない)でパソコンできる枠として一部の方々に認識していただけて
そのサークルでよく使う定型のある資料を、「従来どおりExcelで作ると地味にめんどくさいし書式も揃わないから、楽なGUIでpdfまで持っていけるプログラムを作ってくれ(意訳)」ってお願いされたんですよ

んでpdf扱うんでPDFBox導入して試しに文字を出してみようとしてみたらさっきの
image.png
これですよ(執筆時の再現でめんどくさいので使おうとしてるフォントが違うのは許して...)
ググってみても特に情報は見つからないんですね
大半の情報は2.x.x系のものなんで
でもあくまでこいつらは外部ライブラリなんで落ち着いてPDType1FontクラスのJavaDocを検索して見比べたら
Ver2.0.6
image.png
Ver3.0.0
image.png

消 え と る が な
そのあとしばらく名前が関連してそうなクラスのJavaDocをさまよってたらStandard14Fontsなるクラスを見つけます
「キタッ!」っと思い開いたらこれです
image.png
もはや"Field"の文字すらありません...絶望...
...うん......?
image.png

NestedClass??..なんだこれ...
FontName......Enumか......
FontName!?!?!?!?

image.png

そこには例のデフォルトフォントたちの名前が!!!キタコレ!!

あまりの衝撃に頭の中で最近ようやく見た推しの子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が頭の中に流れ始めます
じゃぁ...こういうこと...?ググってコピペ系エンジニアの私は頭をフル回転させてコードを書いてみました。結果は...?

image.png

キタァァァァ!!

そんなこんなで溢れ出る喜びの中私は今この記事を書いているわけです

先程のStackOverFlowにもあったのですが、2.x.x系にあったフィールドは案の定廃止されたようですねぇ~

めでたしめでたし

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?