PythonでPDF文書にヘッダーとフッターを挿入する方法

PDFへのヘッダーとフッターの追加は、PDFドキュメントの視覚的な魅力、ブランディング、整理を向上させるための重要な機能となっています。
ヘッダーとフッターを組み込むことにより、ユーザーはドキュメントのタイトル、ページ番号、ロゴ、日付、著作権表示、機密性の免責事項など、重要な文脈情報をカスタマイズすることができます。これにより、プロフェッショナルな外観が確立されるだけでなく、ドキュメントのナビゲーションが改善され、法的要件の遵守が保証されます。
本記事では、**Pythonを使用してPDFファイルにヘッダーとフッターをシームレスに追加**するプロセスについて詳しく説明します。

- **[Pythonで既存のPDF文書にヘッダーを追加する](#pythonで既存のpdf文書にヘッダーを追加する)**
- **[Pythonで既存のPDF文書にフッターを追加する](#pythonで既存のpdf文書にフッターを追加する)**

この記事で使用する方法は、[Spire.PDF for Python](https://www.e-iceblue.com/Download/Spire-PDF-Python.html)を必要とします。これはPyPI経由でインストールできます: `pip install Spire.PDF`。

[無料ライセンスの申請](https://www.e-iceblue.com/TemLicense.html)

## Pythonで既存のPDF文書にヘッダーを追加する
ヘッダーは、各ページの上部に表示されるセクションを指します。ヘッダーには通常、ロゴ、ドキュメントのタイトル、日付、またはドキュメントに関連する他の詳細情報が含まれます。これらの情報は、ドキュメントに文脈やブランディングを提供します。
テキスト、画像、ライン、セクション番号から構成されるヘッダーを PDF ドキュメントに追加するには、以下の手順に従うことができます：
1. **PdfDocument** オブジェクトを作成します。
2. 指定されたパスから既存の PDF ドキュメントを読み込みます。
3. ヘッダーのコンテンツを定義します：
    - ヘッダーに追加するテキストを指定します。
    - ヘッダー用の画像を読み込みます。
4. ヘッダーを各ページに追加します：PDF ドキュメントの各ページを反復処理し、指定された位置にヘッダーのコンテンツを **Canvas.DrawString()**、**Canvas.DrawImage()**、および **Canvas.DrawLine()** メソッドを使用して追加します。これらのメソッドを呼び出す際には、ページのサイズと余白を考慮して位置を決定する必要があります。
5. 変更された PDF を新しいファイルに保存するか、既存のファイルを上書きします。

**コード例**
```python
from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentオブジェクトを作成します
pdf = PdfDocument()

# PDFファイルを読み込みます
pdf.LoadFromFile("サンプル.pdf")

# 画像を読み込みます
headerImage = PdfImage.FromFile("ヘッダー.png")

# 画像の幅をピクセル単位で取得します
width = headerImage.Width

# 画像の幅をポイント単位で取得します
unitCvtr = PdfUnitConvertor()
pointWidth = unitCvtr.ConvertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point) 

# フォント、ブラシ、ペンを作成します
firstFont = PdfTrueTypeFont("HarmonyOS Sans SC", 18.0, PdfFontStyle.Bold, True)
brush = PdfBrushes.get_DarkBlue()
pen = PdfPen(PdfBrushes.get_Black(), 1.5)

# ヘッダに追加するテキストを指定します
headerText = "富士山"

# PdfSectionNumberFieldオブジェクトを作成します
sectionField = PdfSectionNumberField(firstFont, brush)

# ドキュメント内のページをイテレートします
for i in range(pdf.Pages.Count):

    # 特定のページを取得します
    page = pdf.Pages[i]  

    # 指定した位置に画像を描画します
    page.Canvas.DrawImage(headerImage, page.ActualSize.Width - pointWidth - 72.0, 5.0)

    # 指定した位置に文字列を描画します
    page.Canvas.DrawString(headerText, firstFont, brush, 72.0, 25.0)

    # 指定した位置に線を描画します
    page.Canvas.DrawLine(pen, 72.0, 50.0, page.ActualSize.Width - 72.0, 50.0)

# 変更内容を別のPDFファイルに保存します
pdf.SaveToFile("Output/PDFヘッダー.pdf")

# リソースを解放します
pdf.Dispose()
```

**結果**
![Pythonで既存のPDF文書にヘッダーを追加する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/4f3d1589-0e9a-78d2-7b62-99e65e843b07.png)

## Pythonで既存のPDF文書にフッターを追加する
フッターは、各ページの下部に表示されるセクションを指します。フッターには、ページ番号、著作権情報、著者名、日付、または読者に追加の文脈やナビゲーション支援を提供する他の関連情報が含まれる場合があります。
PDF ドキュメントに「Page X of Y」という行とページ番号を含むフッターを追加するには、以下の手順に従ってください。
1. **PdfDocument** オブジェクトを作成します。
2. 指定されたパスから既存の PDF ドキュメントを読み込みます。
3. フッターのコンテンツを定義します：
現在のページ番号を取得するために **PdfPageNumberField** オブジェクトを作成します。
総ページ数を取得するために **PdfPageCountField** オブジェクトを作成します。「X / Y」の形式を作成するために、これらの2つの自動フィールドとテキストを組み合わせるために **PdfCompositeField** オブジェクトを利用することができます。
4. フッターを各ページに追加します：PDF ドキュメントの各ページを反復処理し、**Canvas.DrawLine()** メソッドを使用してラインを追加します。**PdfCompositeField.Draw()** メソッドを使用して、ページ番号と総ページ数をフッター領域に追加します。これらのメソッドを呼び出す際には、ページのサイズと余白を考慮して位置を決定する必要があります。
5. 変更された PDF を新しいファイルに保存するか、既存のファイルを上書きします。

**コード例**
```python
from spire.pdf.common import *
from spire.pdf import *

# PdfDocumentオブジェクトを作成します
pdf = PdfDocument()

# PDFファイルを読み込みます
pdf.LoadFromFile("サンプル.pdf")

# フォント、ブラシ、ペンを作成します
font = PdfTrueTypeFont("HarmonyOS Sans SC", 12.0, PdfFontStyle.Bold, True)
brush = PdfBrushes.get_Black()
pen = PdfPen(brush, 1.5)

# PdfPageNumberFieldオブジェクトとPdfPageCountFieldオブジェクトを作成します
pageNumberField = PdfPageNumberField()
pageCountField = PdfPageCountField()

# ページ数フィールドとページ番号フィールドを1つの文字列に結合するPdfCompositeFieldオブジェクトを作成します
compositeField = PdfCompositeField(font, brush, "{0} / {1}", [pageNumberField, pageCountField])

# ページサイズを取得します
pageSize = pdf.Pages[0].Size

# コンポジットフィールドの位置を設定します
compositeField.Location = PointF(72.0, pageSize.Height - 45.0)

# ドキュメント内のページを反復処理します
for i in range(pdf.Pages.Count):

    # 特定のページを取得します
    page = pdf.Pages[i]

    # 指定された位置に線を描画します
    page.Canvas.DrawLine(pen, 72.0, pageSize.Height - 50.0, pageSize.Width - 72.0, pageSize.Height - 50.0)

    # ページにコンポジットフィールドを描画します
    compositeField.Draw(page.Canvas, 0.0, 0.0)

# 別のPDFファイルに保存します
pdf.SaveToFile("Output/PDFフッター.pdf")

# リソースを解放します
pdf.Dispose()
```

**結果**
![Pythonで既存のPDF文書にフッターを追加する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/59aa3b11-fd7b-98d5-ae32-99bd6a016127.png)

この記事では、Pythonを使ってPDF文書にヘッダーとフッターを挿入する方法を紹介しました。
より多くのPDF処理スキルについては、[Spire.PDF for Pythonのチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Spire.PDF-for-Python-Program-Guide-Content.html)をご覧ください。
このAPIを使用して何か問題が発生した場合は、[Spire.PDFフォーラム](https://www.e-iceblue.com/forum/spire-pdf-f7.html)で技術サポートを受けてください。