PythonでPDFのページサイズを変更する

PDF文書を扱っていると、元のPDF文書が私たちの読書習慣に合わない、あるいは異なる表示デバイスに適応する必要がある、といった状況に遭遇することがあります。この時、異なるアプリケーションシナリオのニーズを満たすために、適時にPDF文書のページサイズを調整する必要があります。

この記事では、**PythonでPDFのページサイズを変更する**2つの方法を紹介します：
* [PythonでPDFのページサイズを標準の用紙サイズに変更する](#pythonでpdfのページサイズを標準の用紙サイズに変更する)
* [PythonでPDFのページサイズをカスタム用紙サイズに変更する](#pythonでpdfのページサイズをカスタム用紙サイズに変更する)

## Python PDF API -インストール
PDFのページサイズを設定または変更するには、[**Spire.PDF for Python**](https://www.e-iceblue.com/Introduce/pdf-for-python.html)ライブラリを使用する必要があります。以下のpipでインストールできます：
>**pip install Spire.PDF**

または、製品パッケージをダウンロードしてローカルパスからインストールすることもできます。

https://www.e-iceblue.com/Download/Spire-PDF-Python.html

 
## PythonでPDFのページサイズを調整する手順
[Spire.PDF for Python](https://www.e-iceblue.com/Introduce/pdf-for-python.html)ライブラリは、元のPDF文書の内容を新しいPDF文書内の指定されたサイズのページにコピーすることにより、PDFページのサイズを変更する方法を提供します。主な手順は以下の通りです：

1. 元のPDF文書を読み込み、新しいPDF文書を作成します；
1. 元のPDF文書の各ページをループします；
1. **`PdfDocument.Pages.Add()`** メ ソ ッ ド を通 じ て、 指定 し たサ イ ズのページ を新 し い PDF 文書内に追加；
1. 元の PDF 文書内のページに基づいてテ ンプ レー ト を作成；
1. **`PdfTemplate.Draw()`** メ ソ ッ ド を使っ て、 テ ンプ レー ト を新 し い PDF 文書のページに描 き ます；
1. 新しい PDF 文書を保存します。



> *Spire.PDF for PythonはA1, A2, A3, A4, B1, B2, B3, B4などの標準ページサイズをサポートしています。また、カスタムページサイズもサポートしています。以下は参考のための2つのサンプルコードです。*


## PythonでPDFのページサイズを標準の用紙サイズに変更する
```python
from spire.pdf.common import *
from spire.pdf import *
 
# 元のPDF文書を読み込む
originalPdf = PdfDocument()
originalPdf.LoadFromFile("input.pdf")
 
# 新しいPDF文書を作成する
newPdf = PdfDocument()
 
# 元のPDFのページを繰り返し処理する
for i in range(originalPdf.Pages.Count):
    page = originalPdf.Pages.get_Item(i)
 
    # 新しいPDFにA4サイズのページを追加する
    newPage = newPdf.Pages.Add(PdfPageSize.A4(), PdfMargins(0.0))
 
    # PdfTextLayoutインスタンスの作成
    layout = PdfTextLayout()
 
    # テキストレイアウトを1ページに設定し、ページサイズに合わせてコンテンツが拡大縮小されるようにする
    layout.Layout = PdfLayoutType.OnePage
 
    # 元のPDFのページに基づいてテンプレートを作成する
    template = page.CreateTemplate()
 
    # 新しいPDFのページにテンプレートを描く
    template.Draw(newPage, PointF.Empty(), layout)
 
# PDF文書を保存する
newPdf.SaveToFile("ChangeToA4Size.pdf")
newPdf.Close()
```
**出力ファイル（A4用紙サイズは210mm×297mm）：**
![A4PDF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/8eca7511-b238-e624-f40a-410a237bf5be.png)



## PythonでPDFのページサイズをカスタム用紙サイズに変更する
```python
from spire.pdf.common import *
from spire.pdf import *
 
# 元のPDF文書を読み込む
originalPdf = PdfDocument()
originalPdf.LoadFromFile("报告.pdf")
 
# 新しいPDF文書を作成する
newPdf = PdfDocument()
 
# PdfUnitConvertor のインスタンスを作成します
unitCvtr = PdfUnitConvertor()
 
# カスタムサイズをミリメートルからポイントに変換する
width = unitCvtr.ConvertUnits(180, PdfGraphicsUnit.Millimeter, PdfGraphicsUnit.Point)
height = unitCvtr.ConvertUnits(225, PdfGraphicsUnit.Millimeter, PdfGraphicsUnit.Point)
 
# カスタムサイズから新しいSizeFインスタンスを作成する
size = SizeF(width, height)
 
# 元のPDFのページを繰り返し処理する
for i in range(originalPdf.Pages.Count):
    page = originalPdf.Pages.get_Item(i)
 
    # カスタムサイズ(180*225mm)のページを新しいPDFに追加します
    newPage = newPdf.Pages.Add(size, PdfMargins(0.0))
 
    # PdfTextLayoutインスタンスの作成
    layout = PdfTextLayout()
 
    # テキストレイアウトを1ページに設定し、ページサイズに合わせてコンテンツが拡大縮小されるようにする
    layout.Layout = PdfLayoutType.OnePage
 
    # 元のPDFのページに基づいてテンプレートを作成する
    template = page.CreateTemplate()
 
    # 新しいPDFのページにテンプレートを描く
    template.Draw(newPage, PointF.Empty(), layout)
 
# PDF文書を保存する
newPdf.SaveToFile("CustomizePageSize.pdf")
newPdf.Close()
```
**出力ファイル（ここではカスタマイズされたサイズは180mm x 225mm）：**
![CustomizePDF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/a305f835-b64b-1072-d7b6-fa353fae3b8a.png)



上記の2つのサンプルコードを通して、我々は様々なニーズに応じてPDFページを希望のサイズに調整することができます。さらに、Spire.PDF for PythonライブラリはPDFの余白や用紙の向きなどの調整もサポートしています。

PythonでPDFを処理する他のデモについては、こちらをご覧ください：

https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Spire.PDF-for-Python-Program-Guide-Content.html