今どきのJavaのPDFライブラリ まとめ (2014年版)

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

本稿は2014年版の記事です。 新しい2017年版の記事がありますのでそちらをご覧ください。

本稿では Java で PDF を作成/操作するライブラリについて調査した結果をご紹介します。 2014年06月現在、Googleで「Java PDF」などのキーワードで検索をすると古い記事ばかりがヒットするので、今どきのライブラリはどれなのかを調査しました。 まずは OSS のものを調査した後に製品プロダクトについても調査しました。

Apache PDFBox

eyecatch-pdfbox

最初に紹介するのは Apache PDFBox です。 比較的新しいライブラリで、Version 1.0.0 は2010年にリリースされ、現時点で最新の 1.8.6 は2014年06月にリリースされたばかりです。 プロジェクトが停止していないのは心強いですね。名前の通り、The Apache Software Foundation のもとで開発が行われており、ライセンスは Apache License, Version 2.0 です。

PDF の作成、PDF からテキストを抽出、暗号化/復号化, イメージのPDF変換、イメージの抽出 などの機能が実装されています。 ただ、日本語フォントの対応がイマイチで、上手く日本語を出力できません。 (突き詰めてハックすればできる?)

当サイトでは「Java ライブラリ Apache PDFBox で PDF を操作しよう」の連載で、概要と使い方を解説していますので参考にしてみてください。

iText

eyecatch-iText

次は、歴史が長い iText です。 「Java PDF」などのキーワードでググると多くの記事が出てきます。 しかし近年は iText のライセンス形態に変化がありました。 iText 4 まで LGPL のライセンスを選択できましたが、iText 5 からは COMMERCIAL LICENSING (商用ライセンス) と THE AFFERO GENERAL PUBLIC LICENSE (AGPL) の2つのライセンス形態で提供されています。

iText 5 を個人や社内で利用するのであれば無償ですが、商用で利用するのであれば商用ライセンスを購入した方が良さそうで、サーバーライセンスであれば1サーバー当たり $2200 の料金がかかります。

JasperReports Library

Jasperreports

次は、これも歴史が長い JasperReports Library です。 帳票出力のためのオープンソース・ソフトウェアですが、PDFを出力することができます。 ライセンスは GNU LGPL です。

JasperReports では、拡張子が jrxml の XML で出力レイアウト(テンプレート)を用意しておき、出力時にデータを結合させて PDF を出力させます。 帳票のレイアウト設計には、オープンソースの「iReport」というデザインツールを使います。

JasperReports については、@IT の「JasperReportsとiReportで帳票の常識を理解しよう」という記事が詳しいです。

シェアウェア製品

もう少し OSS のものが見つかるかと思っていたのですが、あまり活発なものを見つけることができませんでした。 今度はシェアウェアの製品を列挙したいと思います。

その他

その他にもいくつかのライブラリを調査しましたが、プロジェクトが停止してしまっている等の理由により深堀りしなかったライブラリも名前だけ挙げておきます。

  • gunjpdf : Ver 1.7 が2007年にリリースされて以降、リリースが行われていない。
  • PDFjet

おわりに

本稿では Java で利用できる今どきの PDF ライブラリについて調査結果をご紹介しました。 所感としては、実現したい機能に対して JasperReports での実現可否を判断し、PDFBox では実現できない場合は他のプロダクトの選定を行うのが良いのかと思いました。 Apache PDFBox は英語圏以外のフォントに対応して貰えないと使えないかと思いました。

Java環境構築へ戻る

更新履歴

  • 2014.06.28 – 初稿を書きました。
  • 2014.07.21 – JasperReports Library を追加し、所感を訂正しました。

Javaのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca