C#/VB.NETでPDFのページサイズを変更する

## はじめに
PDF のページ サイズの変更は、非常に一般的なニーズです。 たとえば、コンテンツのレイアウトに基づいてページ サイズをカスタマイズできます。 または、プリンターで使用する用紙サイズに合わせてページ サイズを変更します。 詳細なメソッドの紹介とコードは次のとおりです。
## ツール
* Visual Studio 2022
* [Free Spire.PDF for .NET](https://www.e-iceblue.com/Introduce/free-pdf-component.html)

このライブラリは、無料でPDFァイルを作成、編集、変換することができますが、ページ数の制限があります。または、有料版の製品の[無料トライアル](https://www.e-iceblue.com/TemLicense.html)を申し込むこともできます。

有料版 : [Spire.PDF for .NET](https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html)
## インストール方法
1. [Free Spire.PDF for .NET](https://www.e-iceblue.com/TemLicense.html)をダウンロードします。
2. Visual Studioで新しいプロジェクトを作成します。
3. 「Solution Explorer」>「References」を右クリックし、「Add Reference」>「Browse」を選択します。
4. BINフォルダ内のdllファイルを見つけて、「OK」をクリックします。

## 説明
1. 最初に、元のPDF文書をロードするためにPdfDocumentオブジェクトを作成します。
2. 新しいPDF文書を作成するために別のPdfDocumentオブジェクトを作成します。
3. Spire.PDF for .NETではポンドを測定単位として使用するため、自作の用紙サイズをポンドに変換するためにPdfUnitConvertorクラスのConvertUnits()メソッドを使用する必要があります。
4. その後、これらのサイズに基づいて、新しいPDFページのサイズとして使用するSizeFオブジェクトが作成されます。
5. 元のPDF文書の各ページを反復処理し、それぞれについて次の操作が行われます。
6. 新しいPDFファイルに、自作の用紙サイズの新しいページが追加されます。
7. PdfTextLayoutオブジェクトが作成され、単一ページのレイアウトに設定されます。
8. 元のPDF文書のページに基づいて、テンプレートが作成されます。
9. PdfTemplateのDraw()メソッドを使用して、テンプレートを新しいPDFページに描画します。
10. 最後に、結果の文書を保存します。

## コード
C#
```c#
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace ChangePageSizeToCustomPaperSize
{
    class Program
    {
        static void Main(string[] args)
        {
            //PdfDocumentインスタンスを初期化する
            PdfDocument originPdf = new PdfDocument();
            
            //元のPDFドキュメントをロードする
            originPdf.LoadFromFile("Sample.pdf");

            //新しいPDFドキュメントを作成する
            PdfDocument newPdf = new PdfDocument();

            // PdfUnitConvertorインスタンスを初期化する
            PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
            
            //カスタムサイズ（インチ）をポイントに変換する
            float width = unitCvtr.ConvertUnits(5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
            float height = unitCvtr.ConvertUnits(5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
            
            //カスタムサイズから新しいSizeFインスタンスを作成して、新しいPDFのページサイズとして使用する
            SizeF size = new SizeF(width, height);

            //元のPDFのページをループする
            foreach (PdfPageBase page in originPdf.Pages)
            {
                //新しいPDFにカスタムサイズのページを追加する
                PdfPageBase newPage = newPdf.Pages.Add(size, new PdfMargins(0));
                //PdfTextLayoutインスタンスを初期化する
                PdfTextLayout layout = new PdfTextLayout();
                //テキストレイアウトを1ページに設定する（設定されていない場合、コンテンツはページサイズに合わせてスケールできません）
                layout.Layout = PdfLayoutType.OnePage;
                //元のPDFのページに基づいてテンプレートを作成する
                PdfTemplate template = page.CreateTemplate();
                //テンプレートを新しいPDFのページに描画する
                template.Draw(newPage, new PointF(0, 0), layout);
            }

            //結果文書を保存する
            newPdf.SaveToFile("Result.pdf");
        }
    }
}
```
VB.NET
```vb
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing

Namespace ChangePageSizeToCustomPaperSize
    Friend Class Program
        Private Shared Sub Main(ByVal args As String())
            ' PdfDocumentインスタンスを初期化する
            Dim originPdf As PdfDocument = New PdfDocument()
            
            '元のPDFドキュメントをロードする
            originPdf.LoadFromFile("Sample.pdf")

            '新しいPDFドキュメントを作成する
            Dim newPdf As PdfDocument = New PdfDocument()

            ' PdfUnitConvertorインスタンスを初期化する
            Dim unitCvtr As PdfUnitConvertor = New PdfUnitConvertor()
            
            'カスタムサイズ（インチ）をポイントに変換する
            Dim width As Single = unitCvtr.ConvertUnits(5F, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point)
            Dim height As Single = unitCvtr.ConvertUnits(5F, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point)
            
            'カスタムサイズから新しいSizeFインスタンスを作成して、新しいPDFのページサイズとして使用する
            Dim size As SizeF = New SizeF(width, height)

            '元のPDFのページをループする
            For Each page As PdfPageBase In originPdf.Pages
                '新しいPDFにカスタムサイズのページを追加する
                Dim newPage As PdfPageBase = newPdf.Pages.Add(size, New PdfMargins(0))
                'PdfTextLayoutインスタンスを初期化する
                Dim layout As PdfTextLayout = New PdfTextLayout()
                'テキストレイアウトを1ページに設定する（設定されていない場合、コンテンツはページサイズに合わせてスケールできません）
                layout.Layout = PdfLayoutType.OnePage
                '元のPDFのページに基づいてテンプレートを作成する
                Dim template As PdfTemplate = page.CreateTemplate()
                'テンプレートを新しいPDFのページに描画する
                template.Draw(newPage, New PointF(0, 0), layout)
            Next

            '結果文書を保存する
            newPdf.SaveToFile("Result.pdf")
        End Sub
    End Class
End Namespace
```
![2024-02-08_115434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/3bf5fd8c-bccd-c3c2-dab5-761e25e5d32a.png)