既存の PDF ドキュメントにページ番号を追加することは、資料の可読性や実用性を高めるうえで非常に重要です。レポートやマニュアル、帳票など、複数ページにわたる PDF では、ページ番号があることで閲覧・管理が格段にしやすくなります。 本記事では、Spire.PDF for .NET を使用して、C# から既存の PDF にページ番号を追加する方法を解説します。左寄せ・中央揃え・右寄せといった配置の違いを、PDF の座標系とあわせて分かりやすく説明します。 目次 Spire.PDF for .NET のインストール PDF の座標系とページ番号の配置 C# で PDF にページ番号を追加する ページ番号の配置方法 一時ライセンスについて Spire.PDF for .NET のインストール はじめに、Spire.PDF for .NET を .NET プロジェクトに追加します。Spire.PDF for .NET を手動でダウンロードし、DLL を参照に追加するか、NuGet を使用してインストールできます。以下は NuGet インストールコードです。 PM> Install-Package Spire.PDF インストールが完了したら、PDF 操作に必要なクラスを使用できるようになります。 PDF の座標系とページ番号の配置 Spire.PDF for .NET で PDF を操作する際は、座標系の考え方を理解しておくことが重要です。 原点(0,0)は ページの左上 にあります。 X 軸は右方向に増加します。 Y 軸は下方向に増加します。 以下は、Spire.PDFにおける座標系を示す画像です。 ページ番号は通常、ヘッダーまたはフッターに配置します。そのため、ページサイズや余白を考慮しながら、描画位置(特に X 座標)を調整する必要があります。 本記事で紹介する左寄せ・中央揃え・右寄せの違いは、すべて X 座標の計算方法の違いによって実現します。 C#でPDFにページ番号を追加する まずは、ページ番号を追加するための共通的な実装を確認します。 Spire.PDF for .NET では、以下のクラスを使用します。 PdfPageNumberField:現在のページ番号を表します。 PdfPageCountField:総ページ数を表します。 PdfCompositeField:文字列とフィールドを組み合わせて表示します。 これらを組み合わせることで、「X ページ/全 Y ページ」という形式のページ番号を作成できます。 基本処理の流れ PdfDocument オブジェクトを作成します。 LoadFromFile() メソッドで既存の PDF を読み込みます。 フォントやブラシを設定します。 PdfPageNumberField と PdfPageCountField を作成します。 PdfCompositeField を使用して表示形式を定義します。 各ページをループ処理し、指定位置にページ番号を描画します。 PDF を保存します。 PDFのページの左隅にページ番号を追加するC#コード例 using Spire.Pdf; using Spire.Pdf.AutomaticFields; using Spire.Pdf.Graphics; using System.Drawing; namespace AddPageNumbers { class Program { static void Main(string[] args) { // 1. PDF ドキュメントを読み込む PdfDocument doc = new PdfDocument(); doc.LoadFromFile("Sample.pdf"); // 2. ページ番号用のフォントと描画スタイルを定義 PdfTrueTypeFont font = new PdfTrueTypeFont( new Font("Yu Gothic UI", 12, FontStyle.Regular), true); PdfBrush brush = PdfBrushes.Black; PdfPen pen = new PdfPen(brush, 1.0f); // 3. ページ番号と総ページ数のフィールドを作成 PdfPageNumberField pageNumberField = new PdfPageNumberField(); PdfPageCountField pageCountField = new PdfPageCountField(); // 4. 表示形式を定義(例:1 ページ/全 10 ページ) PdfCompositeField compositeField = new PdfCompositeField( font, brush, "{0} ページ/全 {1} ページ", pageNumberField, pageCountField); // 5. ページ番号の描画位置 SizeF pageSize = doc.Pages[0].Size; compositeField.Location = new PointF(72, pageSize.Height - 45); // 6. 各ページにページ番号を描画 for (int i = 0; i < doc.Pages.Count; i++) { PdfPageBase page = doc.Pages[i]; // 補助線(フッターの区切り線) page.Canvas.DrawLine( pen, 72, pageSize.Height - 50, pageSize.Width - 72, pageSize.Height - 50); compositeField.Draw(page.Canvas); } // 7. PDF を保存 doc.SaveToFile("AddPageNumbers.pdf"); doc.Dispose(); } } } 以下は、ページ番号付きの生成済みPDFファイルのプレビューです。 この共通処理をベースに、次の章では配置方法ごとの違いを説明します。 新しいPDF文書を作成し、そこにページ番号を追加したい場合は、「C#でPDF文書を作成する方法」も併せてご確認ください。 ページ番号の配置方法 左寄せでページ番号を配置する 左寄せの場合は、X 座標を固定値に設定します。これにより、すべてのページで左端から一定の位置にページ番号が表示されます。 compositeField.Location = new PointF(72, pageSize.Height - 45); この方法は、帳票やビジネス文書など、レイアウトが厳密に決まっている PDF に適しています。 中央揃えでページ番号を配置する 中央揃えにする場合は、ページ番号文字列の幅を動的に計算する必要があります。 SizeF pageNumberSize = font.MeasureString( string.Format("{0} ページ/全 {1} ページ", i + 1, doc.Pages.Count)); compositeField.Location = new PointF( (pageSize.Width - pageNumberSize.Width) / 2, pageSize.Height - 45); ページ幅から文字列幅を引き、その半分を X 座標として指定することで、正確に中央配置できます。 右寄せでページ番号を配置する 右寄せの場合も文字列幅を考慮します。ページの右端から余白分を引いた位置に配置します。 SizeF pageNumberSize = font.MeasureString( string.Format("{0} ページ/全 {1} ページ", i + 1, doc.Pages.Count)); compositeField.Location = new PointF( pageSize.Width - pageNumberSize.Width - 72, pageSize.Height - 45); この方法は、書籍や報告書など、右下にページ番号を配置したい場合によく使用されます。 まとめ 本記事では、Spire.PDF for .NET を使用して、C# から既存の PDF にページ番号を追加する方法を解説しました。 PdfCompositeField を使用することで、「X ページ/全 Y ページ」の形式を簡単に実現できます。 ページ番号の配置は、X 座標の計算方法を変えるだけで制御できます。 PDF の座標系を理解することで、柔軟なレイアウト調整が可能になります。 用途に応じて、左寄せ・中央揃え・右寄せを使い分けてみてください。 一時ライセンスについて 評価版の制限や透かしを解除したい場合は、30 日間の試用ライセンスを申請できます。詳細は公式サイトをご確認ください。