JavaでPDFのブックマークを追加、読み込み、変更、削除する方法

しおりは、テキストや画像、場所に印をつけることで、PDFドキュメント内の特定の場所に素早くジャンプできるようにするものです。ページ数の多いPDFドキュメントを処理する際、目的の場所に簡単にジャンプできるように、プログラム上で**ブックマークを追加、読み込み、修正、削除する**必要がある場合があります。この記事では、以下の5つのパートから、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して**PDFのブックマークを処理する方法**を紹介します。

- **[PDFドキュメントにブックマークを追加する](#pdfドキュメントにブックマークを追加する)**
- **[PDFドキュメントのブックマークを読み取る](#pdfドキュメントのブックマークを読み取る)**
- **[PDFドキュメントのブックマークのタイトルと色を変更する](#pdfドキュメントのブックマークのタイトルと色を変更する)**
- **[PDFドキュメントの特定のブックマークを削除する](#pdfドキュメントの特定のブックマークを削除する)**
- **[PDFドキュメント内のすべてのブックマークを削除する](#pdfドキュメント内のすべてのブックマークを削除する)**

## 【依存関係の追加】

この方法は、無料のFree Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。

### 1. Maven

Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

```XML
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>
```

### 2. 公式サイトよりJarファイルをダウンロード

まず、[Free Spire.PDF for Java](https://jp.e-iceblue.com/download/free-spire-pdf-for-java.html) の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。

## PDFドキュメントにブックマークを追加する

Spire.PDF for javaは、PDFファイルにしおりを追加する**PdfDocument.getBookmarks().add()** メソッドを提供しています。

> **以下は、その詳細な手順です。**

- **PdfDocument**クラスのインスタンスを作成し、**PdfDocument.loadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
- PDF内のページをループし、**PdfPageBase.getPages().get(i)** メソッドを使用してページ集を取得します。
- **PdfDocument.getBookmarks().add()** メソッドを使用してPDFにブックマークを追加します。
- ブックマークの対象ページと位置を設定します。
- ブックマークの色とテキストスタイルを設定します。
- **PdfDocument.saveToFile()** メソッドを使用して、ドキュメントを別のPDFファイルに保存します。

**Java**

```Java
import com.spire.pdf.*;
import com.spire.pdf.actions.PdfGoToAction;
import com.spire.pdf.bookmarks.PdfBookmark;
import com.spire.pdf.bookmarks.PdfTextStyle;
import com.spire.pdf.general.PdfDestination;
import com.spire.pdf.graphics.PdfRGBColor;

import java.awt.*;
import java.awt.geom.Point2D;

public class addBookmarks {

    public static void main(String[] args) throws Exception {


        //PdfDocumentクラスのインスタンスを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFファイルを読み込む
        pdf.loadFromFile("C:/Sample.pdf");

        //PDFファイル内のページをループする
        for (int i = 0; i < pdf.getPages().getCount(); i++) {
            PdfPageBase page = pdf.getPages().get(i);

            //ブックマークを追加する
            PdfBookmark bookmark = pdf.getBookmarks().add(String.format("ブックマーク-%s", i + 1));

            //目的ページと場所を設定する
            PdfDestination destination = new PdfDestination(page, new Point2D.Float(0, 0));
            bookmark.setAction(new PdfGoToAction(destination));

            //文字色を設定する
            bookmark.setColor(new PdfRGBColor(new Color(139, 69, 19)));

            //テキストのスタイルを設定する
            bookmark.setDisplayStyle(PdfTextStyle.Bold);


            //結果ファイルを保存する
            pdf.saveToFile("ブックマークの追加.pdf");
        }
    }
}
```

### 【出力されるPDFドキュメント】

![PDFドキュメントにブックマークを追加する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/4ebb2a69-3871-dcd5-3ef3-2b1b418747f2.png)

## PDFドキュメントのブックマークを読み取る

Spire.PDF for Javaを使用すると、PDFドキュメント内のブックマークのタイトルや書式などの情報を取得することができます。

> **具体的な手順は次のとおりです。**

- **PdfDocument**クラスのインスタンスを生成し、**PdfDocument.loadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
- **PdfDocument.getBookmarks()** メソッドを使用してPDFドキュメントのブックマーク集を取得します。
- カスタムメソッド **GetBookmarks()** を使ってブックマークの内容を取得し、TXTファイルに保存します。

**Java**

```Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.bookmarks.PdfBookmark;
import com.spire.pdf.bookmarks.PdfBookmarkCollection;

import java.io.FileWriter;
import java.io.IOException;

public class getBookmarks {

    public static void main(String[] args) throws Exception {

        //PdfDocumentクラスのインスタンスを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFファイルを読み込む
        pdf.loadFromFile("ブックマークの追加.pdf");

        //ブックマークコレクションを取得する
        PdfBookmarkCollection bookmarks = pdf.getBookmarks();

        String result = "ブックマークの取得.txt";

        GetBookmarks(bookmarks, result);
    }
    private static void GetBookmarks(PdfBookmarkCollection bookmarks, String result) throws IOException {

        //StringBuilderクラスのインスタンスを宣言する
        StringBuilder content = new StringBuilder();

        //PDFブックマーク情報を取得する
        if (bookmarks.getCount() > 0) {
            content.append("Pdf bookmarks:");
            for (int i = 0; i < bookmarks.getCount(); i++) {
                PdfBookmark parentBookmark = bookmarks.get(i);
                content.append(parentBookmark.getTitle() + "\r\n");

                //テキストのスタイルを取得する
                String textStyle = parentBookmark.getDisplayStyle().toString();
                content.append(textStyle + "\r\n");
            }
        }
        writeStringToTxt(content.toString(),result);
    }

    public static void writeStringToTxt(String content, String txtFileName) throws IOException {
        FileWriter fWriter = new FileWriter(txtFileName, true);
        try {
            fWriter.write(content);
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                fWriter.flush();
                fWriter.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}
```

### 【出力されるTXTファイル】

![PDFドキュメントのブックマークを読み取る](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/3241acb3-3528-e476-5b7d-2e85c133ebab.png)

## PDFドキュメントのブックマークのタイトルと色を変更する

PDFファイル内の既存のブックマークを編集することができます。例えば、ブックマークのタイトル、フォントの色、テキストの表示スタイルなどを変更します。

> **以下は、その詳細な手順です。**

- **PdfDocument**クラスのインスタンスを生成し、**PdfDocument.loadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
- **PdfDocument.getBookmarks().get(0)** メソッドを使用してPDFドキュメントの最初のブックマークを取得します。
- **bookmark.setTitle()** メソッドを使用して、ブックマークのタイトルを設定します。
- ブックマークの色と表示スタイルを設定します。
- **PdfDocument.saveToFile()** メソッドを使用して、ドキュメントを別のPDFファイルに保存します。

**Java**

```Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.bookmarks.PdfBookmark;
import com.spire.pdf.bookmarks.PdfTextStyle;
import com.spire.pdf.graphics.PdfRGBColor;

import java.awt.*;


public class editBookmark {

    public static void main(String[] args) throws Exception {

        //PdfDocumentクラスのインスタンスを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFファイルを読み込む
        pdf.loadFromFile("ブックマークの追加.pdf");

        //最初のブックマークを取得する
        PdfBookmark bookmark = pdf.getBookmarks().get(0);

        //ブックマークのタイトルを変更する
        bookmark.setTitle("新しいタイトル");

        //ブックマークの文字色を変更する
        bookmark.setColor(new PdfRGBColor(new Color(255,0,0)));

        //ブックマークのテキストスタイルを変更する
        bookmark.setDisplayStyle(PdfTextStyle.Italic);

        //結果ファイルを保存する
        pdf.saveToFile("ブックマークの編集.pdf");
    }
}
```

### 【出力されるPDFドキュメント】

![PDFドキュメントのブックマークのタイトルと色を変更する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/fbefa12d-8857-ab56-3b85-538ec9475380.png)

## PDFドキュメントの特定のブックマークを削除する

Spire.PDF for javaは、PDFドキュメントから特定のブックマークを削除することをサポートしています。

> **詳細な手順は以下の通りです。**

- **PdfDocument**クラスのインスタンスを作成し、**PdfDocument.loadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
- **PdfDocument.getBookmarks().removeAt()** メソッドを使用してPDFドキュメントの特定のブックマークを削除します。
- **PdfDocument.saveToFile()** メソッドを使用して、ドキュメントを別のPDFファイルに保存します。

**Java**

```Java
import com.spire.pdf.PdfDocument;

public class deleteBookmarks {

    public static void main(String[] args) throws Exception {

        //PdfDocumentクラスのインスタンスを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFファイルを読み込む
        pdf.loadFromFile("ブックマークの追加.pdf");

        //2つめのブックマークを削除する
        pdf.getBookmarks().removeAt(1);

        //結果ファイルを保存する
        pdf.saveToFile("ブックマークの削除.pdf");
    }
}
```

### 【出力されるPDFドキュメント】

![PDFドキュメントの特定のブックマークを削除する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/7c081f36-1b45-f91b-7153-4074a73c2523.png)

## PDFドキュメント内のすべてのブックマークを削除する

Spire.PDF for javaは、PDFファイルからすべてのブックマークを削除する **PdfDocument.getBookmarks().clear()** メソッドを提供しています。

> **ここでは、その詳細な手順を説明します。**

- **PdfDocument**クラスのインスタンスを生成し、**PdfDocument.loadFromFile()** メソッドを使用してPDFドキュメントを読み込みます。
- **PdfDocument.getBookmarks().clear()** メソッドを使用して、PDFドキュメントのすべてのブックマークを削除します。
- **PdfDocument.saveToFile()** メソッドを使用して、ドキュメントを別のPDFファイルに保存します。

**Java**

```Java
import com.spire.pdf.PdfDocument;

public class deleteBookmarks {

    public static void main(String[] args) throws Exception {

        //PdfDocumentクラスのインスタンスを作成する
        PdfDocument pdf = new PdfDocument();

        //PDFファイルを読み込む
        pdf.loadFromFile("ブックマークの追加.pdf");

        //2つめのブックマークを削除する
        pdf.getBookmarks().removeAt(1);

        //結果ファイルを保存する
        pdf.saveToFile("ブックマークの削除.pdf");
    }
}
```

### 【出力されるPDFドキュメント】

![PDFドキュメント内のすべてのブックマークを削除する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/24d41281-24b1-7f1e-4480-124553506663.png)

> **この記事では、PDFのブックマークの追加、読み込み、変更、削除の手順を紹介します。PDFドキュメントの処理についての詳細は、[Spire.PDF Forum](https://www.e-iceblue.com/forum/spire-pdf-f7.html)をご覧ください。**