Javaで既存のPDFドキュメントの余白を変更

余白とは、ドキュメントのページの主要な内容の外側にある余白のことです。 PDFドキュメントを作成する場合、通常、ドキュメントをページごとに均一に見せるために、固定余白を設定します。 また、既存のPDFドキュメントの余白を調整することもできます。例えば、余白を広げてページにコンテンツを追加したり、余白を減らしてドキュメントをよりコンパクトにしたりすることができます。 この記事では、[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使って、**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ドキュメントの余白を拡大する
PDF ドキュメントの余白を拡大する方法は、ページサイズを大きくした新しい PDF を作成し、元のページを大きくしたページの適切な位置に描画することです。具体的な手順は以下の通りです。
- **PdfDocument** のオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用して、既存の PDF ドキュメントを読み込みます。
- 別の **PdfDocument** のオブジェクトを作成し、ページサイズの大きいPDFドキュメントを作成します。
- 余白の値を大きくするように設定します。
- 新しいドキュメントのページサイズを設定します。
- 元のドキュメントのページをループして、**PdfPageBase.createTemplate()** メソッドを使用して、指定されたページに基づいてテンプレートを作成します。
- **PdfDocument.getPages().add()** メソッドを使用して、新しい PDF ドキュメントにページを追加します。
- **PdfTemplate.draw()** メソッドを使用して、追加されたページ上に初期座標 (0, 0) からテンプレートを描画します。
- **PdfDocument.saveToFile()** メソッドを使用して、新しいPDFドキュメントを保存します。

**Java**
```Java
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfMargins;
import com.spire.pdf.graphics.PdfTemplate;

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

public class enlargePDFMargins {

    public static void main(String[] args) {

        //PdfDocumentのオブジェクトを作成する
        PdfDocument originalPdf = new PdfDocument();

        //既存のPDFドキュメントを読み込む
        originalPdf.loadFromFile("C:/クライアント向け通話サンプル.pdf");

        //ドキュメントの最初のページを取得する
        PdfPageBase firstPage = originalPdf.getPages().get(0);

        //PdfDocumentの別のオブジェクトを作成する
        PdfDocument newPdf = new PdfDocument();

        //追加する余白の値を設定する
        PdfMargins margins = newPdf.getPageSettings().getMargins();
        margins.setTop(40);
        margins.setBottom(40);
        margins.setLeft(40);
        margins.setRight(40);

        //新規PDFドキュメントのページサイズを設定する
        Dimension2D dimension2D = new Dimension();
        dimension2D.setSize(firstPage.getSize().getWidth() + margins.getLeft() + margins.getRight(), firstPage.getSize().getHeight() + margins.getTop() + margins.getBottom());

        //元のPDFドキュメント内の全ページをループする
        for (int i = 0; i < originalPdf.getPages().getCount(); i++) {

            //元のドキュメントのページをもとに、テンプレートを作成する
            PdfTemplate template = originalPdf.getPages().get(i).createTemplate();

            //新しいPDFドキュメントに新しいページを追加する
            PdfPageBase page = newPdf.getPages().add(dimension2D);

            //追加されたページでテンプレートを描画する
            template.draw(page.getCanvas(), new Point2D.Float(0, 0));
        }

        //新しいPDFドキュメントを保存する
        newPdf.saveToFile("マージンの拡大.pdf", FileFormat.PDF);
    }
}
```
![PDFドキュメントの余白を拡大する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/af150bc6-a3d9-19cd-aeee-02384847168e.png)

## PDFドキュメントの余白を減らす
同様に、PDFの余白を減らす方法は、ページサイズを小さくした新しいPDFを作成し、その小さいページ上に元のページを指定した座標で描画します。以下、詳しい手順を説明します。
- **PdfDocument** のオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用して、既存の PDF ドキュメントを読み込みます。
- 別の **PdfDocument** のオブジェクトを作成し、ページサイズを小さくした PDF ドキュメントを作成します。
- 縮小する余白の値を設定します。
- 新しい PDF ドキュメントの余白を設定します。
- 元のドキュメントのページをループして、**PdfPageBase.createTemplate()** メソッドを使用して、指定されたページに基づいてテンプレートを作成します。
- **PdfDocument.getPages().add()** メソッドを使用して、新しい PDF ドキュメントにページを追加します。
- **PdfTemplate.draw()** メソッドを使用して、追加されたページ上の指定された位置にテンプレートを描画します。
- **PdfDocument.saveToFile()** メソッドを使用して、新しい PDF ドキュメントを保存します。

**Java**
```Java
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfMargins;
import com.spire.pdf.graphics.PdfTemplate;

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

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

        //PdfDocumentのオブジェクトを作成する
        PdfDocument originalPdf = new PdfDocument();

        //既存のPDFドキュメントを読み込む
        originalPdf.loadFromFile("C:/クライアント向け通話サンプル.pdf");

        //ドキュメントの最初のページを取得する
        PdfPageBase firstPage = originalPdf.getPages().get(0);

        //PdfDocumentの別のオブジェクトを作成する
        PdfDocument newPdf = new PdfDocument();

        //縮小する余白の値を設定する
        double left = -20;
        double right = -20;
        double top = -20;
        double bottom = -20;

        //新規PDFドキュメントのページサイズを設定する
        Dimension2D dimension2D = new Dimension();
        dimension2D.setSize(originalPdf.getPages().get(0).getSize().getWidth() + left + right, originalPdf.getPages().get(0).getSize().getHeight() + top + bottom);

        //元のPDFドキュメント内の全ページをループする
        for (int i = 0; i < originalPdf.getPages().getCount(); i++) {

            //元のドキュメントのページをもとに、テンプレートを作成する
            PdfTemplate template = originalPdf.getPages().get(i).createTemplate();

            //新しいPDFドキュメントにページを追加する
            PdfPageBase page = newPdf.getPages().add(dimension2D, new PdfMargins(0));

            //追加されたページでテンプレートを描画する
            template.draw(page.getCanvas(), new Point2D.Float((float) left, (float) top));
        }

        //新しいPDFドキュメントを保存する
        newPdf.saveToFile("余白の削減.pdf", FileFormat.PDF);
    }
}
```
![PDFドキュメントの余白を減らす](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/6d3a139f-3d47-d30a-8c54-1a627905bc4c.png)

> **このほか、Free Spire.PDF for Javaは、PDF文書の作成、編集、読み込み、変換ができます。 PDFの操作技術についてもっと知りたい方は、[Spire.PDF Forum](https://www.e-iceblue.com/forum/spire-pdf-f7.html)をご覧ください。**