【Java】PDFのページを回転させる方法

PDFは、文書の共有や印刷に広く使用されている形式です。大きなPDFファイルには、特にJPG、PNG、スキャンしたPDFなどの形式から変換されたページなど、回転角度が不適切なページが含まれていることがよくあります。この記事では、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/spire-pdf-for-java.html)を使用して**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/spire-pdf-for-java.html)の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。
## 指定のPDFページを回転させる
回転は90度刻みで行います。あなたは、0/90/180/270度によってPDFページを回転させることができます。**PdfPageRotateAngle Enum**を使用して、PDF ドキュメント内の特定の PDF ページを回転させることができます。詳細な手順は次のとおりです。
- **PdfDocument** クラスのインスタンスを生成します。
- **PdfDocument.loadFromFile()** メソッドを用いてPDFドキュメントを読み込みます。
- **PdfDocument.getPages().get(pageIndex)** メソッドを使用して、インデックス（0ベース）により目的のページを取得します。
- **PdfPageBase.getRotation().getValue()** メソッドを使用して、ページの元の回転角度を取得します。
- 元の回転角度を希望する度数だけ増やします。
- **PdfPageBase.setRotation()** メソッドを使用して、ページに新しい回転角度を適用します。
- **PdfDocument.saveToFile()** メソッドを使用して結果ドキュメントを保存します。

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

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

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

        //PDF文書を読み込む
        pdf.loadFromFile("貸借対照表.pdf");

        //2ページ目を取得する
        PdfPageBase page = pdf.getPages().get(1);

        //ページの元の回転角度を取得する
        int rotation = page.getRotation().getValue();

        //元の回転角度を基準にして、ページを時計回りに90度回転させる
        rotation += PdfPageRotateAngle.Rotate_Angle_90.getValue();
        page.setRotation(PdfPageRotateAngle.fromValue(rotation));

        //結果文書を保存する
        pdf.saveToFile("ページの回転.pdf");
    }
}
```
**【回転の結果】**
![2023-02-03_105603.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/aed65b31-5e05-3d4e-f275-78e457fb8eea.png)

## PDF文書内の画像を回転させる
また、PDF文書をより魅力的にするためにその中に画像を追加し、その画像を回転させたいと思うかもしれません。ここでは、Spire.PDF for Javaを使用してPDF文書内の画像を回転させる方法について説明します。
- **PdfDocument** クラスのインスタンスを作成します。
- PDFにセクションとページを追加します。
- **PdfImage.fromFile()** メソッドを使用してディスクから画像を読み込み、その幅と高さを取得します。
- **PdfPageBase.getCanvas().rotateTransform(45)** メソッドを使用して、画像の回転を設定します。
- **PdfPageBase.getCanvas().drawImage()** メソッドを使用して、画像をPDFページに描画します。
- **PdfDocument.saveToFile()** メソッドを使用して結果ドキュメントを保存します。

**Java**
```Java
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;

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

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

        //セクションを追加する
        PdfSection section = pdf.getSections().add();

        //新しいページを追加する
        PdfPageBase page = section.getPages().add();

        //画像を読み込む
        PdfImage image = PdfImage.fromFile("Icon.png");

        //画像の幅と高さを取得する
        double imageWidth = image.getPhysicalDimension().getWidth();
        double imageHeight = image.getPhysicalDimension().getHeight();

        //画像の回転を設定する
        page.getCanvas().rotateTransform(45);

        //ページ上に画像を描画する
        page.getCanvas().drawImage(image, 400, 0, imageWidth, imageHeight);
        page.getCanvas().save();

        //結果文書を保存する
        pdf.saveToFile("画像の回転.pdf");
        pdf.close();
    }
}
```
**【回転の結果】**
![2023-02-03_112459.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e8a30978-35f3-a9ef-d21a-a58b9ac7e2cf.png)

## PDF文書内のテキストを回転させる
回転角度のあるテキストを追加することは、PDF 内のテキスト生成の特定のシナリオにおいて重要な要件となり得ます。PDF文書に回転を伴うテキストを追加するために、PDFにテキストを追加する際に、**section.getPageSettings().setRotate()** メソッドを使用してテキストの回転角度を指定することができます。以下はその手順です。
- **PdfDocument** クラスのインスタンスを作成します。
- PDFにセクションを追加します。
- **Section.getPageSettings().setRotate()** メソッドを使用して、セクションを回転させます。
- **Section.getPages().add()** メソッドを使用して、PDFセクションに新しいページを追加します。
- **PdfPageBase.getCanvas().drawString()** メソッドを使用してPDFページにテキストを描画し、テキストのフォントと書式を設定します。
- **PdfDocument.saveToFile()** メソッドを使用して結果ドキュメントを保存します。

**Java**
```Java
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;

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

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

        //セクションを追加する
        PdfSection section = doc.getSections().add();

        //回転角度を設定する
        section.getPageSettings().setRotate(PdfPageRotateAngle.Rotate_Angle_90);

        //ページを追加する
        PdfPageBase page = section.getPages().add();

        //PdfBrushのインスタンスを定義する
        PdfBrush brush = PdfBrushes.getBlack();

        //フォントを作成する
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Mincho Demibold", Font.PLAIN, 16), true);

        //描画位置を設定する
        float x = 0;
        float y = 200;

        //文字列
        String text = "PDF文書作成時にページを回転させる。";

        //ページのキャンバスに文字列を描画する
        page.getCanvas().drawString(text, font, brush, x, y);

        String result = "テキストの回転.pdf";

        //ドキュメントを保存する
        doc.saveToFile(result);
        doc.close();
    }
}
```
**【回転の結果】**
![2023-02-03_114001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/af65eb9c-2963-f5f5-388c-81fa2aae3b12.png)

> **この記事では、PDFのページ、画像、およびテキストを回転させる方法を説明します。Free Spire.PDF for Javaは、他にも多くのPDFファイル処理機能を備えています。もっと知りたい方は、[Spire.PDF Forum](https://www.e-iceblue.com/forum/spire-pdf-f7.html)を訪れてみてください。**