Javaでフォルダ内のPDFを一括結合・分割する方法【PDFBox活用】

はじめに

複数のPDFファイルをまとめたり、特定ページごとに分割したりする作業は、日常的な業務や帳票処理でよくあります。Javaを使えば、こうしたPDF処理を自動化することができます。

この記事では、Apache PDFBoxライブラリを用いて、以下のような処理をJavaで実現する方法を解説します。

  • フォルダ内のすべてのPDFファイルを一括で結合
  • 1つのPDFファイルをページ単位で分割

使用ライブラリ

  • Apache PDFBox(Apache License 2.0)

Maven依存関係の追加

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <version>2.0.30</version>
</dependency>

フォルダ内のPDFを一括結合する方法

コード例

import org.apache.pdfbox.multipdf.PDFMergerUtility;
import java.io.File;

public class MergePDFs {
  public static void main(String[] args) throws Exception {
    File folder = new File("input_pdfs");
    File[] files = folder.listFiles((dir, name) -> name.toLowerCase().endsWith(".pdf"));

    PDFMergerUtility merger = new PDFMergerUtility();
    for (File file : files) {
      merger.addSource(file);
    }

    merger.setDestinationFileName("merged_output.pdf");
    merger.mergeDocuments(null);

    System.out.println("PDFを結合しました。");
  }
}

実行前に準備すること

  • input_pdfs フォルダにPDFをまとめて入れておく
  • 出力ファイルは merged_output.pdf として作成されます

PDFをページ単位で分割する方法

コード例

import org.apache.pdfbox.pdmodel.PDDocument;

import java.io.File;
import java.io.IOException;

public class SplitPDF {
  public static void main(String[] args) throws IOException {
    File inputFile = new File("sample.pdf");
    PDDocument document = PDDocument.load(inputFile);

    for (int i = 0; i < document.getNumberOfPages(); i++) {
      PDDocument newDoc = new PDDocument();
      newDoc.addPage(document.getPage(i));
      newDoc.save("split_page_" + (i + 1) + ".pdf");
      newDoc.close();
    }

    document.close();
    System.out.println("PDFをページごとに分割しました。");
  }
}

注意点と補足

  • PDFの結合順はFile[]の順序に依存します。必要ならArrays.sort()で明示的に並べましょう。
  • PDFのページ数が多いと、メモリ使用量も増えるため、必要に応じて分割処理を追加することも可能です。
  • PDFファイルによってはフォントや画像埋め込みに注意が必要です。

まとめ

Apache PDFBoxを使えば、Javaで簡単にPDFの結合や分割ができます。業務フローの中に取り込めば、帳票処理や報告資料の自動化が実現でき、作業効率が大きく向上します。

タイトルとURLをコピーしました