はじめに
複数の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の結合や分割ができます。業務フローの中に取り込めば、帳票処理や報告資料の自動化が実現でき、作業効率が大きく向上します。