JavaでPDFビューアを作成する方法【実用GUIアプリ開発】

はじめに

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ビューアを手軽に作成できます。
実務では、帳票の確認ツールや内製ビューアの開発にも応用できるため、ぜひ本記事を参考にカスタマイズしてみてください。

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