Apache PDFBox


PDFBoxはJavaでPDFを扱えるOSSです。
(コマンドラインからも使えるそうです)
2015年10月現在、最新バージョンは1.8.10。
ライセンスはApache License v2.0。

公式サイトのトップページによると、代表的な機能は以下の通り。

  • テキスト抽出
    PDFファイルからテキストを抽出

  • 分割&マージ
    1つのPDFファイルを複数ファイルに分割したり、複数のファイルをマージしたりできる

  • Form
    formsからデータを抽出したり、埋めたりできる。

  • Validation
    PDF/A-1b標準に準拠しているかチェックできる

  • 印刷
    Java標準の印刷APIを使ってのPDF印刷

  • 画像として保存
    PDFをPNGやJPEG形式で保存可能。

  • PDF生成
    formや画像を埋め込んでのPDF作成が可能

  • 署名
    電子署名を扱える

インストール

公式サイトからJarをダウンロードするか、Mavenで。

pom.xml
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>1.8.10</version>
</dependency>

Hello World

とりあえずHello Worldしてみます。

HelloWorld.java
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

import java.io.IOException;

public class HelloWorld {
    public static void main(String... args) {
        try {
            // PDDocumentオブジェクトを生成して、Pageも設定しておく
            PDDocument document = new PDDocument();
            PDPage page = new PDPage();
            document.addPage(page);

            // コンテンツを設定するStreamオブジェクトを生成する
            PDPageContentStream contentStream = new PDPageContentStream(document, page);

            // フォントとポジションを指定してコンテンツを書き込む
            contentStream.beginText();
            contentStream.setFont(PDType1Font.HELVETICA, 20);
            contentStream.moveTextPositionByAmount(100, 700);
            contentStream.drawString("Hello World");
            contentStream.endText();

            // Streamオブジェクトを閉じる
            contentStream.close();

            // ファイルを保存して閉じる
            document.save("helloWorld.pdf");
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (COSVisitorException e) {
            e.printStackTrace();
        }

    }
}