はじめに
JavaでPDFを表示できるビューアアプリを自作したいと考えたことはありませんか?
本記事では、Apache PDFBoxを活用して、JavaでPDFを読み込み・表示するGUIアプリを作成する方法を解説します。
必要なライブラリ
Apache PDFBox のMaven依存関係
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.30</version>
</dependency>
基本構成:Swing × PDFBox
- GUIフレーム:
JFrame
- PDF描画:
PDDocument
+PDFRenderer
- キーボード or ボタンでページ送り対応
サンプルコード:シンプルなPDFビューア
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
public class PdfViewer extends JFrame {
private JLabel imageLabel;
private PDDocument document;
private PDFRenderer renderer;
private int page = 0;
public PdfViewer(String path) throws Exception {
document = PDDocument.load(new File(path));
renderer = new PDFRenderer(document);
imageLabel = new JLabel();
JScrollPane scrollPane = new JScrollPane(imageLabel);
add(scrollPane, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
JButton prevButton = new JButton("前のページ");
JButton nextButton = new JButton("次のページ");
buttonPanel.add(prevButton);
buttonPanel.add(nextButton);
add(buttonPanel, BorderLayout.SOUTH);
prevButton.addActionListener(e -> showPage(page - 1));
nextButton.addActionListener(e -> showPage(page + 1));
showPage(0);
setTitle("Java PDFビューア");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
private void showPage(int newPage) {
try {
if (newPage < 0 || newPage >= document.getNumberOfPages()) return;
page = newPage;
BufferedImage img = renderer.renderImageWithDPI(page, 150);
imageLabel.setIcon(new ImageIcon(img));
setTitle("Java PDFビューア - ページ " + (page + 1));
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
try {
new PdfViewer("sample.pdf"); // 任意のPDFファイル名に変更
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
拡張機能アイデア
- 検索機能:PDFテキスト抽出とキーワード一致
- ズーム機能:DPIを動的に変更
- ページ番号入力によるジャンプ
- PDFファイルをドラッグ&ドロップで読み込み
よくあるエラー対処
現象 | 原因 | 対策 |
---|---|---|
IOException | ファイルが存在しない | パスを見直す |
OutOfMemoryError | 高解像度PDFの描画 | DPIを下げる、ヒープメモリ増加 |
ページが真っ白 | PDFが画像のみで構成されている | PDFレンダリングの精度確認 |
まとめ
PDFBoxとSwingを組み合わせることで、Javaだけで完結するPDFビューアを手軽に作成できます。
実務では、帳票の確認ツールや内製ビューアの開発にも応用できるため、ぜひ本記事を参考にカスタマイズしてみてください。