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

 本稿では Java で PDF を作成/操作するライブラリについて調査した結果をご紹介します。 3年前の2014年に「今どきのJavaのPDFライブラリ まとめ (2014年版)」という記事を書きましたが、3年間でだいぶ状況が変わりましたので、あらためて2017年現在で Java で PDF を操作するにはどんなライブラリがあるのかを再調査しました。 今回も OSS がメインです。

Apache PDFBox

eyecatch-pdfbox

 最初に紹介するのは Apache PDFBox です。 比較的新しいライブラリで、Version 1.0.0 は2010年にリリースされ、現時点で最新の 2.0.4 は2016年12月にリリースされたばかりです。 2016年に新しいメジャーバージョン 2.0 がリリースされ、待望のマルチバイト文字対応が行われました。 それまでは日本語が利用できなかったため、日本でのシステム開発で脚光を浴びませんでしたが、バージョン 2.0 で欠点が解決されたと言って良いでしょう。 名前の通り、The Apache Software Foundation のもとで開発が行われており、ライセンスは Apache License, Version 2.0 です。
 PDF の作成、PDF からのテキスト抽出、暗号化/復号化, イメージのPDF変換、イメージの抽出 などの機能が実装されています。 当サイトでは「Java ライブラリ Apache PDFBox で PDF を操作しよう」の連載で、Apache PDFBox の概要と使い方を解説していますので参考にしてみてください。

iText

eyecatch-iText

 次は、歴史が長い iText です。 2017年01月現在、「iText 7」が最新のバージョンです。 米国国防総省、Google、NASAなどのPDFエンジンとしても採用されており実績はお墨付き、「Java PDF」などのキーワードでググると多くの記事が出てきますが、iText 5 からはライセンス形態に変更があり、iText 4 まで LGPL のライセンスを選択できましたが、iText 5 からは COMMERCIAL LICENSING (商用ライセンス) と THE AFFERO GENERAL PUBLIC LICENSE (AGPL) の2つのライセンス形態で提供されています。
 iText 7 を個人や社内で利用するのであれば無償ですが、商用で利用するのであれば商用ライセンスを購入した方が良さそうで、さらに「Unit-based licenses」「Volume-based licenses」「OEM licenses」などの複雑なライセンス形態を理解する必要がありそうです。

JasperReports Library

Jasperreports

 次は、これも歴史が長い JasperReports Library です。 帳票出力のためのオープンソース・ソフトウェアですが、PDFを出力することができます。 2017年01月現在「JasperReports Library v6.3.1」が最新で、ライセンスは GNU LGPL です。
 JasperReports では、拡張子が jrxml の XML で出力レイアウト(テンプレート)を用意しておき、出力時にデータを結合させて PDF を出力させます。 帳票のレイアウト設計には、オープンソースの「iReport」というデザインツールを使います。
 JasperReports については、@IT の「JasperReportsとiReportで帳票の常識を理解しよう」という記事が詳しいです。

Apache FOP

 PDF を作ることを真の目的としたライブラリではありませんが、Apache FOP を利用して Java から PDF を生成するプロジェクトをいくつか知っているので、これもご紹介しておきます。
 Apache FOP は、XMLに準拠したマークアップ言語であるXSL-FOの処理系の実装で、XSL-FO文書を様々な書式で出力することができるのですが、 PDF 形式でも出力することができます。 ここまで呼んで「何のことだ?」と思われた読者の方もいると思われるように、そもそも「XSL-FO文章って何だっけ?」という知識が必要です。 XSL-FO 文章を理解すれば、あとは自分で好きなレイアウトの文章を作成して、それを Apache FOP で PDF 出力できます。 前述の通り、レイアウトは XML で記述します。
 名前の通り Apache プロジェクトで作成されているライブラリで、ライセンスは Apache License, Version 2.0 です。

シェアウェア製品

 シェアウェアの製品も、製品名とリンクだけ列挙したいと思います。 必要であればリンク先をご覧ください。

その他

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

おわりに

 本稿では Java で利用できる今どきの PDF ライブラリについて調査結果をご紹介しました。 所感としては、PDFBox が 2.0 になって日本語が利用できるようになったため優先度を高めで検討したいところですが、まだ 2.0 系の歴史が浅いのは少し気になります。 次点として JasperReports Library が良いのかと思いました。

Java環境構築へ戻る

更新履歴

  • 2017.01.16 – 本稿を執筆しました。

著者 : OSCA

OSCA

 初級WEBエンジニアです。最近は Android, iOS, WEBアプリの作成に力を入れています。 個人として何か一つでも世の中の多くの人に使ってもらえるアプリを作ろうと日々奮闘中です。