JavaでPDFのページにページ番号を付ける方法

PDFファイルにページ番号を付加することで、コテツの位置を特定することができます。また、ページ番号を付けることで、印刷されたページの配置を容易にすることができます。この記事では、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して、**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ファイルへのページ番号の挿入
SpirePDF for Javaでは、ページ番号を扱う動的フィールドとして、**PdfPageNumberField**、**PdfPageCountField**、**PdfCompositeField**の3つがあります。
**PdfPageNumberField** は、ページ番号を表示するために使用します。**PdfPageCountField** は、ドキュメントのページ数を表示するためのものです。**PdfCompositeField** は、PdfPageNumberFieldとPdfPageCountFieldを組み合わせたような複合ファイルを表示するために使用されます。
> **ページ番号には多くのスタイルがあります。あなただけのページ番号をデザインできます。以下は、「* / *」のページ番号を付ける例です。**

- **PdfDocument** のオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用してPDFファイルを読み込みます。
- ページ番号を表示するための **PdfPageNumberField** のオブジェクトを作成します。
- ページ数を表示するための **PdfPageCountField** のオブジェクトを作成します。
- カスタムページ番号を表示するために、**PdfCompositeField** のオブジェクトを作成します。
- **PdfCompositeField.setStringFormat()** メソッドを使用して、複合フィールドの文字書式を設定します。
- ドキュメント内のページをループして、ページ番号を追加します。
- **PdfCompositeField.draw()** メソッドを使用して、ページ上に複合フィールドを描画します。
- **PdfDocument.saveToFile()** メソッドを使用して、ドキュメントを保存します。

**Java**
```Java
import com.spire.pdf.*;
import com.spire.pdf.automaticfields.PdfCompositeField;
import com.spire.pdf.automaticfields.PdfPageCountField;
import com.spire.pdf.automaticfields.PdfPageNumberField;
import com.spire.pdf.graphics.*;

import java.awt.*;

public class addPageNumberToPDF {
    public static void main(String[] args) {

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

        //PDFドキュメントを読み込む
        pdf.loadFromFile("C:偶然は本当にあるのか？.pdf");

        //PdfTrueTypeFontインスタンスを作成する
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", Font.PLAIN, 10));

        //PdfPageNumberFieldのインスタンスを作成する
        PdfPageNumberField pageNumberField = new PdfPageNumberField(font, PdfBrushes.getBlack());

        //PdfPageCountFieldのインスタンスを作成する
        PdfPageCountField pageCountField = new PdfPageCountField(font, PdfBrushes.getBlack());

        //PdfCompositeFieldのインスタンスを作成し、ファイルされたページ番号とページ数のフィールドを複合フィールドに追加する
        PdfCompositeField compositeField = new PdfCompositeField(font, PdfBrushes.getBlack(), "{0} / {1}", pageNumberField, pageCountField);

        //複合フィールドの文字書式を設定する
        compositeField.setStringFormat(new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top));

        //ページをループする
        for(int i = 0; i < pdf.getPages().getCount();i ++)
        {
            PdfPageBase page = pdf.getPages().get(i);
            float x = (float) page.getSize().getWidth()/2 - 20;
            float y = (float)page.getSize().getHeight() - pdf.getPageSettings().getMargins().getBottom();
            //各ページに複合フィールドを描画する
            compositeField.draw(page.getCanvas(), x, y);
        }

        //ドキュメントを保存する
        pdf.saveToFile("ページ番号の追加.pdf");
    }
}
```
![PDFファイルへのページ番号の挿入](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/11472597-2f33-f2d7-6b58-f1ac3fa71980.png)

> **他のスタイルのページ番号の追加も同様の操作で、合成フィールドのテキストを希望のスタイルにフォーマットするだけです。 さらに、Free Spire.PDF for Javaは、あなたのニーズのほとんどを満たすために、他の多くのPDFドキュメント操作を実行することもできます。 [Spire.PDF for Java のチュートリアルページ](https://jp.e-iceblue.com/tutorials/java/spire-pdf-java/pdf-java-program-guide-content.html)で詳細を確認することができます。**