JavaでPDFのページサイズを変更する方法

PDF文書のページサイズは、文書の体裁や読みやすさに影響します。異なるページサイズは、異なる文書の使用シナリオに適しています。ページサイズを調整することで、文書を特定のシナリオの使用に適したものにするだけでなく、用紙を節約したり、印刷の品質を確保したり、その他の利点を得ることができます。この記事では、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して、プログラムを通じて**PDF文書のページサイズを変更する方法**を紹介します。
**- [PDFのページサイズを標準用紙サイズに変更する](#pdfのページサイズを標準用紙サイズに変更する)**
**- [PDFのページサイズをカスタム用紙サイズに変更する](#pdfのページサイズをカスタム用紙サイズに変更する)**
### 依存関係の追加
Spire.PDF for Javaは、[公式サイト](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)から手動でダウンロードしてプロジェクトに導入するか、Mavenで以下のコードを入力してインストールすることが可能です。
```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</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>
```
## PDFのページサイズを標準用紙サイズに変更する
指定されたページサイズで新しいPDF文書を作成し、元の文書のページを新しい文書のページにコピーし、レイアウトを変更することで、PDFのページサイズを変更することができます。PDF文書のページサイズを指定された標準用紙サイズに変更する手順は次のとおりです。
- **ステップ1**
**PdfDocument** のオブジェクトを作成し、**PdfDocument.loadFromFile()** メソッドを使ってPDF文書を読み込みます。
- **ステップ 2**
新しいPDF文書を作成します。
- **ステップ 3**
元の文書内のページをループして、それらに基づいてテンプレートを作成し、指定された標準用紙サイズで新しい文書内に新しいページを作成し、レイアウトの種類を設定し、新しい文書内のページにテンプレートを描画します。
- **ステップ 4**
**PdfDocument.saveToFile()** メソッドを使って新しい文書を保存します。

### コード例
```java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.PdfPageSize;
import com.spire.pdf.graphics.PdfLayoutType;
import com.spire.pdf.graphics.PdfMargins;
import com.spire.pdf.graphics.PdfTemplate;
import com.spire.pdf.graphics.PdfTextLayout;

import java.awt.geom.Point2D;

public class StandardPaperSize {
    public static void main(String[] args) {
        //PdfDocumentのオブジェクトを作成する
        PdfDocument pdf = new PdfDocument();

        //PDF文書を読み込む
        pdf.loadFromFile("サンプル.pdf");

        //新しいPDF文書を作成する
        PdfDocument newPdf = new PdfDocument();

        //元の文書のページをループする
        for (PdfPageBase page : (Iterable<? extends PdfPageBase>) pdf.getPages()
             ) {
            //新しい文書に、指定したページサイズで新しいページを作成する
            PdfPageBase newPage = newPdf.getPages().add(PdfPageSize.A1, new PdfMargins(0));
            //PdfTextLayoutのオブジェクトを作成する
            PdfTextLayout layout = new PdfTextLayout();
            //レイアウトの種類を設定する
            layout.setLayout(PdfLayoutType.One_Page);
            //元文書のページをもとにテンプレートを作成する
            PdfTemplate template = page.createTemplate();
            //新しい文書のページにテンプレートを描く
            template.draw(newPage, new Point2D.Float(0, 0), layout);
        }

        //結果文書を保存する
        newPdf.saveToFile("標準用紙サイズ.pdf");
        pdf.dispose();
        newPdf.dispose();
    }
}
```
![PDFのページサイズを標準用紙サイズに変更する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/2acca5e3-9a72-f534-6f60-516d4b609f09.png)

## PDFのページサイズをカスタム用紙サイズに変更する
PDFのページサイズをカスタム用紙サイズに変更する手順は以下の通りです。
- **ステップ 1**
**PdfDocument** のオブジェクトを作成し、**PdfDocument.loadFromFile()** メソッドを使ってPDF文書を読み込みます。
- **ステップ 2**
新しいPDF文書を作成します。
- **ステップ 3**
**PdfUnitConvertor.convertUnits()** メソッドを使用して、カスタムの幅と高さをインチからポイントに変換します。
- **ステップ 4**
用紙サイズとして使用されている幅と高さに基づいて、**Dimension2D** のオブジェクトを作成します。
- **ステップ 5**
元の文書内のページをループして、それらに基づいてテンプレートを作成し、指定されたカスタム用紙サイズで新しい文書内に新しいページを作成し、レイアウトの種類を設定し、新しい文書内のページにテンプレートを描画します。
- **ステップ 6**
**PdfDocument.saveToFile()** メソッドを使って新しい文書を保存します。

### コード例
```java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;

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

public class CustomPaperSize {
    public static void main(String[] args) {
        //PdfDocumentのオブジェクトを作成する
        PdfDocument pdf = new PdfDocument();

        //PDF文書を読み込む
        pdf.loadFromFile("サンプル.pdf");

        //新しいPDF文書を作成する
        PdfDocument newPdf = new PdfDocument();

        //カスタムの幅と高さをインチからポイントに変換する
        PdfUnitConvertor convertor = new PdfUnitConvertor();
        float width = convertor.convertUnits(7.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
        float height = convertor.convertUnits(9.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);

        //用紙サイズとして使用されている幅と高さに基づいて、Dimension2Dのオブジェクトを作成する
        Dimension2D size = new Dimension();
        size.setSize(width, height);

        //元の文書のページをループする
        for (PdfPageBase page : (Iterable<? extends PdfPageBase>) pdf.getPages()
        ) {
            //新しい文書に、指定したページサイズで新しいページを作成する
            PdfPageBase newPage = newPdf.getPages().add(size, new PdfMargins(0));
            //PdfTextLayoutのオブジェクトを作成する
            PdfTextLayout layout = new PdfTextLayout();
            //レイアウトの種類を設定する
            layout.setLayout(PdfLayoutType.One_Page);
            //元文書のページをもとにテンプレートを作成する
            PdfTemplate template = page.createTemplate();
            //新しい文書のページにテンプレートを描く
            template.draw(newPage, new Point2D.Float(0, 0), layout);
        }

        //結果文書を保存する
        newPdf.saveToFile("カスタム用紙サイズ.pdf");
        pdf.dispose();
        newPdf.dispose();
    }
}
```
![PDFのページサイズをカスタム用紙サイズに変更する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/5a479eb9-21cf-23b9-1b3d-2483580ad071.png)

この記事では、Free Spire.PDF for Javaを使ってPDF文書のページサイズを変更する方法について説明します。 このライブラリは、手動でダウンロードしてプロジェクトに追加するか、Maven経由でインストールすることができます。 PDFのページサイズを変更するには、新しい文書を作成し、元の文書のページを新しい文書のページにコピーしてレイアウトを変更します。 ユーザーは、PDFページサイズを標準用紙サイズまたはカスタム用紙サイズに変更することを選択できます。

この記事で説明した以外にも、Free Spire.PDF for Javaは以下のような多くの機能を提供しています。

- [PDF文書に表を追加](https://jp.e-iceblue.com/tutorials/java/spire-pdf-java/pdf-java-table/java-create-tables-in-a-pdf-document.html)
- [PDF文書の結合](https://jp.e-iceblue.com/tutorials/java/spire-pdf-java/pdf-java-document-operation/java-merge-multiple-pdfs-into-a-single-pdf.html)
- [PDFフォームの作成](https://jp.e-iceblue.com/tutorials/java/spire-pdf-java/pdf-java-formfield/java-create-fill-or-remove-fillable-form-fields-in-pdf.html)