C#でiTextSharpとIronPDFを使用してPDFにヘッダーとフッターを追加する(例付き)
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing.
C# で PDF ドキュメントにヘッダーとフッターを追加する
PDF文書にヘッダーとフッターを追加することは、プロフェッショナルなレポート、請求書、ビジネス文書を作成するために不可欠です。 PdfPageEventHelper および OnEndPage メソッドを使用して iTextSharp ソリューションを探している開発者は、最新 for .NETライブラリが、同じ結果を達成するためのはるかにシンプルなアプローチを提供していることに気づくでしょう。
このガイドでは、従来の iText 7 アプローチとIronPDFの簡潔な API を比較しながら、C# を使用して PDF ファイルにヘッダーとフッターを追加する方法を説明します。 最終的には、新しい Document の作成から最終的な PDF ファイルの生成まで、両方の実装方法を理解し、プロジェクトの要件に最適なアプローチを選択できるようになります。

プロフェッショナル文書において PDF ヘッダーとフッターが重要なのはなぜですか?
ヘッダーとフッターは、ProfessionalなPDF文書において重要な役割を果たします。 また、画像ロゴによる一貫したブランディング、ページ番号によるページナビゲーション、日付や文書タイトルなどの重要なメタデータの表示、タイムスタンプやバージョン情報による文書の信頼性の確立などが求められます。
企業環境では、ヘッダーとフッターはしばしば法的な意味を持ちます。 財務報告書には、監査証跡としてタイムスタンプが必要です。 契約書には、完全性を保証するためにページ番号が必要です。 社内文書では、各ページに機密保持の表記が必要な場合があります。 これらの要件をプログラムで満たすには、ページレベルのコンテンツインジェクションを確実に処理するPDFライブラリが必要です。
プログラムでヘッダーとフッターを追加する主な理由は次のとおりです。
-監査コンプライアンス- 各ページのタイムスタンプとバージョン番号が規制要件を満たしている -ブランドの一貫性- 生成されたすべてのドキュメントに会社のロゴとスタイルが均一に適用されます -ナビゲーション- ページ番号とセクションタイトルは読者が情報を素早く見つけるのに役立ちます -真正性- 著者名、作成日、文書IDにより、文書の完全性に関する紛争を防止します。

C# でテキスト ヘッダーとフッターを追加するにはどうすればよいですか?
IronPDF は、 .NETアプリケーションで PDF ドキュメントにヘッダーとフッターを追加するための最も直接的なアプローチを提供します。 ChromePdfRenderer クラスを TextHeaderFooter または HtmlHeaderFooter と組み合わせて使用すると、最小限のコードでヘッダーとフッターを生成できます。個別のセルを作成したり、contentbyte オブジェクトを手動で管理したりする必要はありません。
コードを書く前に、 NuGetを使用してIronPDF をプロジェクトに追加します。
Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
ライブラリは外部依存を必要とせず、インストール後すぐに動作します。 .NET 5、6、7、8、10 を対象としており、プラットフォーム固有の構成なしで Windows、Linux、macOS 上で実行されます。
以前の iTextSharp パターンでは、開発者は private static void AddContent() のようなヘルパー メソッドを作成して、ヘッダーとフッターのロジックを手動で挿入していました。 IronPDFはそのような定型文を完全に排除します。
以下は、PDF ファイルにテキスト ヘッダーとフッターの両方を追加する完全な例です。
using IronPdf;
// Initialize the PDF renderer
var renderer = new ChromePdfRenderer();
// Configure the text header
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Quarterly Sales Report",
DrawDividerLine = true,
FontSize = 14
};
// Configure the text footer with page number and date
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
LeftText = "{date}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 10
};
// Set margins to accommodate header and footer
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
// Generate PDF from HTML content
var pdf = renderer.RenderHtmlAsPdf("<h1>Sales Data</h1><p>Content goes here...</p>");
pdf.SaveAs("report-with-headers.pdf");
using IronPdf;
// Initialize the PDF renderer
var renderer = new ChromePdfRenderer();
// Configure the text header
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Quarterly Sales Report",
DrawDividerLine = true,
FontSize = 14
};
// Configure the text footer with page number and date
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
LeftText = "{date}",
RightText = "Page {page} of {total-pages}",
DrawDividerLine = true,
FontSize = 10
};
// Set margins to accommodate header and footer
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
// Generate PDF from HTML content
var pdf = renderer.RenderHtmlAsPdf("<h1>Sales Data</h1><p>Content goes here...</p>");
pdf.SaveAs("report-with-headers.pdf");
Imports IronPdf
' Initialize the PDF renderer
Dim renderer = New ChromePdfRenderer()
' Configure the text header
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
.CenterText = "Quarterly Sales Report",
.DrawDividerLine = True,
.FontSize = 14
}
' Configure the text footer with page number and date
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.LeftText = "{date}",
.RightText = "Page {page} of {total-pages}",
.DrawDividerLine = True,
.FontSize = 10
}
' Set margins to accommodate header and footer
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
' Generate PDF from HTML content
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Sales Data</h1><p>Content goes here...</p>")
pdf.SaveAs("report-with-headers.pdf")
TextHeaderFooter クラスは、ヘッダーまたはフッター領域の左、中央、または右にテキストを配置するためのプロパティを提供します。 DrawDividerLine プロパティは、ヘッダーまたはフッターと本文の間にProfessional区切り線を追加します。 {date} のような結合可能なフィールドは、PDF 生成時に動的な値で自動的に入力されます。
IronPDF は余白の計算を自動的に処理し、ヘッダーとフッターがドキュメントの内容と重ならないようにしています。 TextHeaderFooter クラスはIronSoftware.Drawing.FontTypes のフォントタイプをサポートしており、外部依存関係なしにタイポグラフィを制御できます。
出力

実装全体が、明確で読みやすいプロパティ割り当てを持つ1つのコードブロックに収まっていることに注目してください。 個別のクラス ファイルを作成したり、ピクセル位置を計算したり、キャンバス オブジェクトを管理したりする必要はありません。 ライブラリはこれらの複雑さを抽象化し、PDF 生成の仕組みではなくコンテンツに集中できるようにします。
HTMLスタイルのヘッダーとフッターはどのように作成しますか?
より洗練されたデザインの場合、IronPDF のHtmlHeaderFooter クラスを使用すると、完全な HTML および CSS スタイル設定が可能になります。 このアプローチは、ヘッダーに画像ロゴ、複雑なレイアウト、またはブランド固有のスタイルを含める必要がある場合に特に有効です。手動でオブジェクトを作成したり、コンストラクタを使用したりすることなく実現できます。
using IronPdf;
using System;
var renderer = new ChromePdfRenderer();
// Create an HTML header with logo and styling
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; font-family: Arial, sans-serif;'>
<img src='logo.png' style='height: 30px; float: left;' />
<span style='float: right; font-size: 12px; color: #666;'>
Confidential Document
</span>
</div>",
MaxHeight = 25,
DrawDividerLine = true,
BaseUrl = new Uri(@"C:\assets\").AbsoluteUri
};
// Create an HTML footer with page numbering
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align: center; font-size: 10px; color: #999;'>
<span>Generated on {date} at {time}</span>
<br/>
<span>Page {page} of {total-pages}</span>
</div>",
MaxHeight = 20
};
renderer.RenderingOptions.MarginTop = 30;
renderer.RenderingOptions.MarginBottom = 25;
var pdf = renderer.RenderHtmlAsPdf("<h1>Project Proposal</h1><p>Document content...</p>");
pdf.SaveAs("styled-document.pdf");
using IronPdf;
using System;
var renderer = new ChromePdfRenderer();
// Create an HTML header with logo and styling
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; font-family: Arial, sans-serif;'>
<img src='logo.png' style='height: 30px; float: left;' />
<span style='float: right; font-size: 12px; color: #666;'>
Confidential Document
</span>
</div>",
MaxHeight = 25,
DrawDividerLine = true,
BaseUrl = new Uri(@"C:\assets\").AbsoluteUri
};
// Create an HTML footer with page numbering
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align: center; font-size: 10px; color: #999;'>
<span>Generated on {date} at {time}</span>
<br/>
<span>Page {page} of {total-pages}</span>
</div>",
MaxHeight = 20
};
renderer.RenderingOptions.MarginTop = 30;
renderer.RenderingOptions.MarginBottom = 25;
var pdf = renderer.RenderHtmlAsPdf("<h1>Project Proposal</h1><p>Document content...</p>");
pdf.SaveAs("styled-document.pdf");
Imports IronPdf
Imports System
Dim renderer As New ChromePdfRenderer()
' Create an HTML header with logo and styling
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='width: 100%; font-family: Arial, sans-serif;'>
<img src='logo.png' style='height: 30px; float: left;' />
<span style='float: right; font-size: 12px; color: #666;'>
Confidential Document
</span>
</div>",
.MaxHeight = 25,
.DrawDividerLine = True,
.BaseUrl = New Uri("C:\assets\").AbsoluteUri
}
' Create an HTML footer with page numbering
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align: center; font-size: 10px; color: #999;'>
<span>Generated on {date} at {time}</span>
<br/>
<span>Page {page} of {total-pages}</span>
</div>",
.MaxHeight = 20
}
renderer.RenderingOptions.MarginTop = 30
renderer.RenderingOptions.MarginBottom = 25
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Project Proposal</h1><p>Document content...</p>")
pdf.SaveAs("styled-document.pdf")
このサンプルコードでは、HTMLヘッダーにテキストと一緒に画像を組み込む方法を紹介しています。 BaseUrl プロパティは、相対画像 URL を解決するためのルート パスを確立し、会社のロゴやその他のグラフィックを簡単に含めることができるようにします。 MaxHeight プロパティは、ヘッダーが指定された寸法を超えないようにし、一貫したドキュメントレイアウトを維持します。
マージ可能なフィールド({pdf-title})は、HTML ヘッダーとフッターで同じように機能し、追加のコードなしで動的なコンテンツを挿入できます。 さまざまなヘッダー スタイルの実装に関するガイダンスについては、 "ヘッダーとフッターの使い方ガイド"を参照してください。
ブランド化されたドキュメントを作成するときは、HTML アプローチが効果的です。 マーケティングチームは、開発者が直接統合できるHTMLテンプレートを提供し、承認されたデザインをピクセル単位で完璧に再現することができます。 border などの CSS プロパティは期待どおりに動作し、他のライブラリでは広範な低レベル コードが必要となるような高度な視覚処理を可能にします。

既存の PDF ドキュメントにヘッダーを追加するにはどうすればよいですか?
一般的な要件として、アップロードされたドキュメント、結合されたファイル、または他のシステムによって生成された PDF など、既存の PDF ファイルにヘッダーとフッターを追加することが挙げられます。 IronPDF はこのシナリオを AddHtmlHeaders および AddHtmlFooters メソッドで処理します。
using IronPdf;
// Load an existing PDF document
var pdf = PdfDocument.FromFile("customer-profile.pdf");
// Define the header to add
var header = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align: center;'>REVISED COPY - {date}</div>",
MaxHeight = 20
};
// Define the footer to add
var footer = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align: right;'>Page {page}</div>",
MaxHeight = 15
};
// Apply headers and footers to all pages
pdf.AddHtmlHeaders(header);
pdf.AddHtmlFooters(footer);
pdf.SaveAs("document-with-new-headers.pdf");
using IronPdf;
// Load an existing PDF document
var pdf = PdfDocument.FromFile("customer-profile.pdf");
// Define the header to add
var header = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align: center;'>REVISED COPY - {date}</div>",
MaxHeight = 20
};
// Define the footer to add
var footer = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align: right;'>Page {page}</div>",
MaxHeight = 15
};
// Apply headers and footers to all pages
pdf.AddHtmlHeaders(header);
pdf.AddHtmlFooters(footer);
pdf.SaveAs("document-with-new-headers.pdf");
Imports IronPdf
' Load an existing PDF document
Dim pdf = PdfDocument.FromFile("customer-profile.pdf")
' Define the header to add
Dim header As New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align: center;'>REVISED COPY - {date}</div>",
.MaxHeight = 20
}
' Define the footer to add
Dim footer As New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align: right;'>Page {page}</div>",
.MaxHeight = 15
}
' Apply headers and footers to all pages
pdf.AddHtmlHeaders(header)
pdf.AddHtmlFooters(footer)
pdf.SaveAs("document-with-new-headers.pdf")
PdfDocument クラスは、読み込まれた、またはレンダリングされた PDF を表し、レンダリング後の変更を行うためのメソッドを提供します。 このようにレンダリングと修正を分離することで、PDF文書が複数の処理段階を通過するワークフローが可能になります。 AddHtmlHeaders メソッドは、すべてのページにヘッダーを自動的に適用しますが、ページインデックスのコレクションを渡すことで特定のページを対象とすることもできます。
入力

出力

この機能は、スキャンした文書、ユーザーのアップロード、サードパーティのAPIレスポンスなど、さまざまなソースからPDFファイルを受け取る文書管理システムで非常に有用です。 IronPDFは配布やアーカイブの前にブランディングやページ番号を標準化します。
異なるページに異なるヘッダーを追加するにはどうすればよいですか?
一部のドキュメントでは、最初のページに異なるヘッダー(またはヘッダーなし)が必要であり、後続のページでは標準形式が使用されます。 IronPDF はページインデックスベースのヘッダー適用によってこれをサポートしています。void OnEndPage ハンドラ内で条件をチェックしたり、ループカウンタを手動で管理したりする必要はありません。
using IronPdf;
using System.Collections.Generic;
using System.Linq;
using System.Text;
var renderer = new ChromePdfRenderer();
// Build multi-page HTML with print page-breaks between pages
var pages = new List<string>
{
"<section><h1>Title Page</h1><p>Intro text on page 1.</p></section>",
"<section><h2>Report</h2><p>Detailed report content on page 2.</p></section>",
"<section><h2>Appendix</h2><p>Appendix content on page 3.</p></section>"
};
var sb = new StringBuilder();
sb.AppendLine("<!doctype html><html><head><meta charset='utf-8'>");
sb.AppendLine("<style>");
sb.AppendLine(" body { font-family: Arial, sans-serif; margin: 20px; }");
sb.AppendLine(" .page-break { page-break-after: always; }");
sb.AppendLine("</style>");
sb.AppendLine("</head><body>");
for (int i = 0; i < pages.Count; i++)
{
sb.AppendLine(pages[i]);
if (i < pages.Count - 1)
sb.AppendLine("<div class='page-break'></div>");
}
sb.AppendLine("</body></html>");
var pdf = renderer.RenderHtmlAsPdf(sb.ToString());
// Create the standard header for pages 2 onwards
var standardHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align: center;'>Standard Header - Page {page}</div>",
MaxHeight = 20
};
// Apply to all pages except the first (index 0)
var pageIndices = Enumerable.Range(1, pdf.PageCount - 1).ToList();
pdf.AddHtmlHeaders(standardHeader, 1, pageIndices);
pdf.SaveAs("document-skip-first-page-header.pdf");
using IronPdf;
using System.Collections.Generic;
using System.Linq;
using System.Text;
var renderer = new ChromePdfRenderer();
// Build multi-page HTML with print page-breaks between pages
var pages = new List<string>
{
"<section><h1>Title Page</h1><p>Intro text on page 1.</p></section>",
"<section><h2>Report</h2><p>Detailed report content on page 2.</p></section>",
"<section><h2>Appendix</h2><p>Appendix content on page 3.</p></section>"
};
var sb = new StringBuilder();
sb.AppendLine("<!doctype html><html><head><meta charset='utf-8'>");
sb.AppendLine("<style>");
sb.AppendLine(" body { font-family: Arial, sans-serif; margin: 20px; }");
sb.AppendLine(" .page-break { page-break-after: always; }");
sb.AppendLine("</style>");
sb.AppendLine("</head><body>");
for (int i = 0; i < pages.Count; i++)
{
sb.AppendLine(pages[i]);
if (i < pages.Count - 1)
sb.AppendLine("<div class='page-break'></div>");
}
sb.AppendLine("</body></html>");
var pdf = renderer.RenderHtmlAsPdf(sb.ToString());
// Create the standard header for pages 2 onwards
var standardHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align: center;'>Standard Header - Page {page}</div>",
MaxHeight = 20
};
// Apply to all pages except the first (index 0)
var pageIndices = Enumerable.Range(1, pdf.PageCount - 1).ToList();
pdf.AddHtmlHeaders(standardHeader, 1, pageIndices);
pdf.SaveAs("document-skip-first-page-header.pdf");
Imports IronPdf
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Dim renderer As New ChromePdfRenderer()
' Build multi-page HTML with print page-breaks between pages
Dim pages As New List(Of String) From {
"<section><h1>Title Page</h1><p>Intro text on page 1.</p></section>",
"<section><h2>Report</h2><p>Detailed report content on page 2.</p></section>",
"<section><h2>Appendix</h2><p>Appendix content on page 3.</p></section>"
}
Dim sb As New StringBuilder()
sb.AppendLine("<!doctype html><html><head><meta charset='utf-8'>")
sb.AppendLine("<style>")
sb.AppendLine(" body { font-family: Arial, sans-serif; margin: 20px; }")
sb.AppendLine(" .page-break { page-break-after: always; }")
sb.AppendLine("</style>")
sb.AppendLine("</head><body>")
For i As Integer = 0 To pages.Count - 1
sb.AppendLine(pages(i))
If i < pages.Count - 1 Then
sb.AppendLine("<div class='page-break'></div>")
End If
Next
sb.AppendLine("</body></html>")
Dim pdf = renderer.RenderHtmlAsPdf(sb.ToString())
' Create the standard header for pages 2 onwards
Dim standardHeader As New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align: center;'>Standard Header - Page {page}</div>",
.MaxHeight = 20
}
' Apply to all pages except the first (index 0)
Dim pageIndices = Enumerable.Range(1, pdf.PageCount - 1).ToList()
pdf.AddHtmlHeaders(standardHeader, 1, pageIndices)
pdf.SaveAs("document-skip-first-page-header.pdf")
AddHtmlHeaders の 2 番目のパラメータは、{page} マージ可能フィールドの開始ページ番号を指定し、3 番目のパラメータは、ヘッダーを受け取るページ インデックスのコレクションを受け入れます。 このきめ細かなコントロールにより、複雑な条件ロジックを使用せずに、複雑なドキュメントレイアウトが可能になります。 高度なヘッダーとフッターの例では、奇数ページと偶数ページの区別を含む追加のシナリオについて説明します。
出力

ページ番号を超える動的コンテンツをどのように実装しますか?
マージ可能なフィールド システムは、レンダリング中に自動的に入力されるいくつかの動的な値をサポートしています。 次の表に、使用可能なすべてのフィールドとその意味を示します。
| フィールド | 挿入された値 | 一般的な用途 |
|---|---|---|
| `{page}` | 現在のページ番号 | "ページ 3"と表示されているフッター |
| `{total-pages}` | 総ページ数 | フッターに"10 ページ中 3 ページ"と表示 |
| `{date}` | 現在の日付(ローカル形式) | 監査タイムスタンプ、レポートの日付 |
| `{time}` | 現地時間の現在時刻 | 規制コンプライアンスフッター |
| `{html-title}` | HTML ` |
ページタイトルを表示するドキュメントヘッダー |
| `{pdf-title}` | PDFドキュメントのメタデータタイトル | ドキュメント名付きのブランドフッター |
| `{url}` | ウェブアドレスからレンダリングする場合のソース URL | ウェブコンテンツのアーカイブフッター |
真に動的なコンテンツ(実行時に値が決定されるコンテンツ)の場合は、補間された値を使用して HTML フラグメント文字列を構築してから、それを HtmlFragment プロパティに割り当てることができます。 このアプローチでは、データベースから取得した値、ユーザー情報、または計算データを含むヘッダーを使用できます:
using IronPdf;
string userName = GetCurrentUserName();
string documentVersion = "v2.3.1";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = $"<div style='font-size:10px;'>Prepared by: {userName} " +
$"| Version: {documentVersion} " +
"| Page {page} of {total-pages}</div>",
MaxHeight = 20
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Annual Report</h1><p>Body content here.</p>");
pdf.SaveAs("dynamic-header-report.pdf");
using IronPdf;
string userName = GetCurrentUserName();
string documentVersion = "v2.3.1";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = $"<div style='font-size:10px;'>Prepared by: {userName} " +
$"| Version: {documentVersion} " +
"| Page {page} of {total-pages}</div>",
MaxHeight = 20
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Annual Report</h1><p>Body content here.</p>");
pdf.SaveAs("dynamic-header-report.pdf");
Imports IronPdf
Dim userName As String = GetCurrentUserName()
Dim documentVersion As String = "v2.3.1"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = $"<div style='font-size:10px;'>Prepared by: {userName} " &
$"| Version: {documentVersion} " &
"| Page {page} of {total-pages}</div>",
.MaxHeight = 20
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Annual Report</h1><p>Body content here.</p>")
pdf.SaveAs("dynamic-header-report.pdf")
C# 文字列連結では、{page} および {total-pages} トークンは、補間された部分ではなく、プレーンな文字列としてそのまま残されることに注意してください。 PDF レンダリング中に、 IronPDF はこれらのトークンを自動的に置き換えます。 このパターンは、Active Directory のユーザー名、データベースのドキュメント ID、ビルド パイプラインのバージョン文字列、レポート エンジンからの計算された合計など、あらゆるランタイム値に機能します。
結合可能なフィールドと文字列補間を組み合わせることで、ビジネス ドキュメントでよく見られる洗練されたフッター デザインが可能になります。 法務部門では、文書のタイトル、日付、ページ数を示すフッターを必要とすることがよくあります。 財務報告書には、法令遵守のためタイムスタンプが必要な場合があります。 これらの要件は、ドキュメント タイプごとにカスタム コードを追加しなくても満たされます。
iText 7 のアプローチはどのようなものですか?
iText 7(iTextSharpの後継)に詳しい開発者は、ヘッダーとフッターを追加するにはイベントハンドラを実装する必要があることを知っています。 このライブラリはページイベントシステムを使用しており、OnEndPage や OnCloseDocument のようなドキュメントライフサイクルイベントに応答するクラスを作成します。
iText 7 で ITextEvents パターンを使用した場合、同じヘッダーとフッターの実装は次のようになります。
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Kernel.Events;
using iText.Kernel.Geom;
using iText.Layout.Properties;
// Event handler class for headers and footers -- similar to PdfPageEventHelper
public class ITextEvents : IEventHandler
{
private string _header;
public string Header
{
get { return _header; }
set { _header = value; }
}
public void HandleEvent(Event currentEvent)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent)currentEvent;
PdfDocument pdfDoc = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
Rectangle pageSize = page.GetPageSize();
// Create a new PdfCanvas for the contentbyte object
PdfCanvas pdfCanvas = new PdfCanvas(
page.NewContentStreamBefore(),
page.GetResources(),
pdfDoc);
Canvas canvas = new Canvas(pdfCanvas, pageSize);
// Add header text at calculated position
canvas.ShowTextAligned(
new Paragraph("Quarterly Sales Report"),
pageSize.GetWidth() / 2,
pageSize.GetTop() - 20,
TextAlignment.CENTER);
// Add footer with page number
int pageNumber = pdfDoc.GetPageNumber(page);
canvas.ShowTextAligned(
new Paragraph($"Page {pageNumber}"),
pageSize.GetWidth() / 2,
pageSize.GetBottom() + 20,
TextAlignment.CENTER);
canvas.Close();
}
}
// Usage in main code
var writer = new PdfWriter("report.pdf");
var pdfDoc = new PdfDocument(writer);
var document = new Document(pdfDoc);
// Register the event handler for END_PAGE
pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new ITextEvents());
document.Add(new Paragraph("Sales Data"));
document.Add(new Paragraph("Content goes here..."));
document.Close();
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Kernel.Events;
using iText.Kernel.Geom;
using iText.Layout.Properties;
// Event handler class for headers and footers -- similar to PdfPageEventHelper
public class ITextEvents : IEventHandler
{
private string _header;
public string Header
{
get { return _header; }
set { _header = value; }
}
public void HandleEvent(Event currentEvent)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent)currentEvent;
PdfDocument pdfDoc = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
Rectangle pageSize = page.GetPageSize();
// Create a new PdfCanvas for the contentbyte object
PdfCanvas pdfCanvas = new PdfCanvas(
page.NewContentStreamBefore(),
page.GetResources(),
pdfDoc);
Canvas canvas = new Canvas(pdfCanvas, pageSize);
// Add header text at calculated position
canvas.ShowTextAligned(
new Paragraph("Quarterly Sales Report"),
pageSize.GetWidth() / 2,
pageSize.GetTop() - 20,
TextAlignment.CENTER);
// Add footer with page number
int pageNumber = pdfDoc.GetPageNumber(page);
canvas.ShowTextAligned(
new Paragraph($"Page {pageNumber}"),
pageSize.GetWidth() / 2,
pageSize.GetBottom() + 20,
TextAlignment.CENTER);
canvas.Close();
}
}
// Usage in main code
var writer = new PdfWriter("report.pdf");
var pdfDoc = new PdfDocument(writer);
var document = new Document(pdfDoc);
// Register the event handler for END_PAGE
pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new ITextEvents());
document.Add(new Paragraph("Sales Data"));
document.Add(new Paragraph("Content goes here..."));
document.Close();
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.Kernel.Events
Imports iText.Kernel.Geom
Imports iText.Layout.Properties
' Event handler class for headers and footers -- similar to PdfPageEventHelper
Public Class ITextEvents
Implements IEventHandler
Private _header As String
Public Property Header As String
Get
Return _header
End Get
Set(value As String)
_header = value
End Set
End Property
Public Sub HandleEvent(currentEvent As [Event]) Implements IEventHandler.HandleEvent
Dim docEvent As PdfDocumentEvent = CType(currentEvent, PdfDocumentEvent)
Dim pdfDoc As PdfDocument = docEvent.GetDocument()
Dim page As PdfPage = docEvent.GetPage()
Dim pageSize As Rectangle = page.GetPageSize()
' Create a new PdfCanvas for the contentbyte object
Dim pdfCanvas As New PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc)
Dim canvas As New Canvas(pdfCanvas, pageSize)
' Add header text at calculated position
canvas.ShowTextAligned(New Paragraph("Quarterly Sales Report"), pageSize.GetWidth() / 2, pageSize.GetTop() - 20, TextAlignment.CENTER)
' Add footer with page number
Dim pageNumber As Integer = pdfDoc.GetPageNumber(page)
canvas.ShowTextAligned(New Paragraph($"Page {pageNumber}"), pageSize.GetWidth() / 2, pageSize.GetBottom() + 20, TextAlignment.CENTER)
canvas.Close()
End Sub
End Class
' Usage in main code
Dim writer As New PdfWriter("report.pdf")
Dim pdfDoc As New PdfDocument(writer)
Dim document As New Document(pdfDoc)
' Register the event handler for END_PAGE
pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, New ITextEvents())
document.Add(New Paragraph("Sales Data"))
document.Add(New Paragraph("Content goes here..."))
document.Close()
この実装は、2 つのライブラリ間の基本的なアーキテクチャの違いを示しています。 iText 7 では、IEventHandler (従来の PdfPageEventHelper と同様) を実装する別のハンドラ クラスを作成し、浮動小数点座標を使用してページ位置を手動で計算し、描画操作のために PdfCanvas および Canvas オブジェクトを管理する必要があります。 ハンドラーは、END_PAGE イベント タイプを介して各ページのイベントを受け取ります。これは、START_PAGE を誤って使用する多くの開発者をつまずかせる詳細です。
出力

iText 7の座標系はページの左下隅を起点としているため、位置決めのために明示的な計算が必要です。 最終的なページ数を取得するには、PdfTemplate パターンを使用してさらに複雑化する必要があります。このパターンは、OnCloseDocument -- 中に入力され、既に複雑なワークフローにさらに定型コードを追加します。
ウェブ開発のバックグラウンドを持つ開発者にとって、この座標ベースのアプローチは、宣言的なHTML/CSSモデルと比較して異質に感じられます。 それぞれの配置を決定するには、ページ寸法、余白オフセット、およびテキスト測定を理解する必要がありますが、これらは HTML ベースのアプローチでは抽象化されます。
iText 7 も AGPL ライセンスの下で動作します。つまり、商用ライセンスを購入しない限り、iTextSharp または iText 7 を使用するアプリケーションはオープンソースである必要があります。 これは、商用プロジェクト用のライブラリを選択する際に重要な考慮事項です。
2 つのアプローチを比較するとどうなりますか?
具体的な機能を並べて見ると、違いがより明確になります。次の表は、主な違いをまとめたものです。
| 特徴 | IronPDF | iText 7 / iTextSharp |
|---|---|---|
| 実装スタイル | レンダラーオプションのプロパティの割り当て | IEventHandlerを実装するイベントハンドラークラス |
| HTML/CSSサポート | HtmlHeaderFooter経由の完全なHTMLとCSS | ネイティブ HTML サポートなし。低レベルのキャンバス描画が必要 |
| ページ数合計 | `{total-pages}`フィールドによる自動 | OnCloseDocument に PdfTemplate を入力する必要があります |
| ヘッダーの画像 | BaseUrl を使用した標準 HTML ` |
画像オブジェクトと手動配置が必要です |
| 既存のPDFに追加 | AddHtmlHeaders / AddHtmlFooters メソッド | スタンパーまたはイベントループによる再処理が必要 |
| ページごとのターゲティング | メソッドに渡されるページインデックスのリスト | イベントハンドラ内の条件付きロジック |
| ライセンスモデル | 無料トライアル付きの商用 | AGPL(オープンソース)または商用 |
| クロスプラットフォーム | Windows、Linux、macOS、Docker対応 | Windows, Linux, macOS |
また、問題のトラブルシューティングを行う際にも、開発経験は大きく異なります。 IronPDFのHTMLベースのアプローチは、PDF生成コードに統合する前にブラウザでヘッダーデザインをプレビューできることを意味します。 何か間違っているように見える場合は、使い慣れたブラウザの開発者ツールを使用して、HTMLとCSSを調整することができます。 iText 7では、位置決めの問題をデバッグするために、テストPDFを繰り返し生成し、手動で座標を測定する必要があります。
HTML ベースのアプローチにより、既存の Web 開発スキルを直接適用できます。 フレックスボックスの配置から画像グリッドまで、HTML と CSS で実現可能なあらゆるレイアウトがIronPDF のヘッダーとフッターで機能します。 HTML ヘッダーとフッターの例では、追加のスタイル設定の可能性を示しています。
ヘッダーとフッターの外観のカスタマイズ
ヘッダーとフッターの微調整には、位置や視覚的な表現に影響するいくつかのプロパティが含まれます。 TextHeaderFooter クラスは、以下のカスタマイズオプションを提供します。
using IronPdf;
using IronSoftware.Drawing;
var renderer = new ChromePdfRenderer();
var footer = new TextHeaderFooter
{
LeftText = "Confidential",
CenterText = "{pdf-title}",
RightText = "Page {page} of {total-pages}",
Font = FontTypes.Arial,
FontSize = 9,
DrawDividerLine = true,
DrawDividerLineColor = Color.Gray
};
renderer.RenderingOptions.TextFooter = footer;
renderer.RenderingOptions.MarginBottom = 20;
var pdf = renderer.RenderHtmlAsPdf("<h1>Board Report</h1><p>Executive summary content.</p>");
pdf.SaveAs("board-report.pdf");
using IronPdf;
using IronSoftware.Drawing;
var renderer = new ChromePdfRenderer();
var footer = new TextHeaderFooter
{
LeftText = "Confidential",
CenterText = "{pdf-title}",
RightText = "Page {page} of {total-pages}",
Font = FontTypes.Arial,
FontSize = 9,
DrawDividerLine = true,
DrawDividerLineColor = Color.Gray
};
renderer.RenderingOptions.TextFooter = footer;
renderer.RenderingOptions.MarginBottom = 20;
var pdf = renderer.RenderHtmlAsPdf("<h1>Board Report</h1><p>Executive summary content.</p>");
pdf.SaveAs("board-report.pdf");
Imports IronPdf
Imports IronSoftware.Drawing
Dim renderer As New ChromePdfRenderer()
Dim footer As New TextHeaderFooter With {
.LeftText = "Confidential",
.CenterText = "{pdf-title}",
.RightText = "Page {page} of {total-pages}",
.Font = FontTypes.Arial,
.FontSize = 9,
.DrawDividerLine = True,
.DrawDividerLineColor = Color.Gray
}
renderer.RenderingOptions.TextFooter = footer
renderer.RenderingOptions.MarginBottom = 20
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Board Report</h1><p>Executive summary content.</p>")
pdf.SaveAs("board-report.pdf")
Font プロパティは、Helvetica、Arial、Courier、Times New Roman を含む IronSoftware.Drawing.FontTypes の値を受け入れます。 DrawDividerLine プロパティは、フッターとメインコンテンツの間にProfessional水平線を追加します。 DrawDividerLineColor を使用して、ブランドカラーやドキュメントのテーマに合わせて線の色をカスタマイズできます。
HTML ベースのヘッダーとフッターの場合、LoadStylesAndCSSFromMainHtmlDocument プロパティは、レンダリングされるメイン ドキュメントからスタイルをオプションで継承し、ヘッダーと本文コンテンツ間の視覚的な一貫性を確保します。 これは、ヘッダーとフッターの領域にも適用されるべきカスタムCSSをメインドキュメントで使用している場合に特に役立ちます。

クロスプラットフォームとコンテナのデプロイメント
最近 for .NETアプリケーションは、Linuxコンテナ、Azure App Services、またはAWS Lambda関数にデプロイされることがよくあります。 IronPDFはWindows、Linux、macOSのクロスプラットフォームに対応しています。 このライブラリはDockerコンテナですぐに動作するため、マイクロサービス・アーキテクチャやクラウドネイティブ・アプリケーションに適しています。
このクロスプラットフォーム機能はヘッダーとフッターの機能にも拡張されており、Windows 開発マシンでヘッダー付きの PDF を生成するのと同じコードを Linux 運用サーバーに展開すると、同一の出力が生成されます。 追加のフォントをインストールしたり、レンダリング エンジンを構成したり、プラットフォーム固有のコード パスを処理したりする必要はありません。
コンテナ化されたワークロードを実行するチーム向けに、 IronPDFのDockerデプロイメントに関するドキュメントでは、さまざまなベースイメージとオーケストレーションプラットフォームの設定に関するガイダンスを提供しています。 ライブラリは環境間で一貫した動作をするため、PDF 生成ワークフローでよくあるバグの原因が排除されます。
Microsoft for .NETドキュメントによると、コンテナ化された.NETアプリケーションは、環境間で一貫した実行時動作の恩恵を受けます。これは、IronPDF のレンダリング エンジンが PDF 生成タスクに対して強化する原則です。 同様に、 Docker の公式ドキュメントでは、 PDF 生成サービスに直接適用される.NETワークロードをコンテナー化するためのベスト プラクティスについて説明しています。
iText 7 のドキュメントでもクロスプラットフォームのサポートが確認されていますが、イベント駆動型モデルの複雑さが増すため、クロスプラットフォームのレンダリング問題のデバッグは、宣言型の HTML ベースのアプローチよりも複雑になる可能性があります。
次のステップは何ですか?
IronPDFを使えば、PDFドキュメントにヘッダーとフッターを実装するのに数分しかかかりません。 NuGetパッケージマネージャーを使用してライブラリをインストールしてください:
Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf

ここから先は、以下のリソースが役立ちます。
-入門ドキュメント- PDF 生成と操作の全機能を網羅しています -ヘッダーとフッターの使い方ガイド- すべてのヘッダーとフッターのシナリオのステップバイステップの説明
- HTML ヘッダーとフッターの例- HTML ベースのヘッダーのすぐに実行できるコードサンプル -高度なヘッダーとフッターの例- ページごとのターゲティングと奇数ページ/偶数ページの区別
- TextHeaderFooter API リファレンス- テキストベースのヘッダーとフッターの完全なプロパティ リスト
- HtmlHeaderFooter API リファレンス- HTML ベースのヘッダーとフッターの完全な API
- Dockerデプロイメントガイド- Linuxコンテナとクラウド環境の設定
- IronPDF のライセンス オプション- 個人開発者からエンタープライズ チームまでを対象としたプラン
無料トライアルを開始して、独自のプロジェクトでヘッダーとフッターの実装をテストしてください。 試用版には機能制限のないすべての機能が含まれており、ライセンスを購入する前に、実際の PDF ドキュメントの要件に照らしてライブラリを評価できます。

C#でPDFドキュメントにヘッダーとフッターを追加する作業は、使用するライブラリによって、簡単なものから複雑なものまで様々です。iText 7はイベントハンドラーとキャンバス操作による低レベルの制御を提供していますが、 IronPDFは使い慣れたHTMLとCSSの概念を適用したAPIを通じて同じ機能を提供します。迅速な実装と保守性の高いコードを重視する開発者にとって、 IronPDFは、ハンドラークラス、セル構成、表構造などを含む数十行に及ぶヘッダーとフッターの実装を、わずか数行のプロパティ割り当てにまで削減します。
よくある質問
iTextSharpを使ってPDFにヘッダーとフッターを追加する方法を教えてください。
iTextSharpを使用してPDFにヘッダーとフッターを追加するには、PDF作成プロセス中にドキュメントのページをカスタマイズするページイベントハンドラを定義することができます。これには、OnEndPageメソッドをオーバーライドして、必要なヘッダーとフッターのコンテンツを含めることが含まれます。
ヘッダーとフッターを追加するためにIronPDFを使う利点は何ですか?
IronPDFは分かりやすいAPIを提供し、様々なスタイリングオプションをサポートすることで、ヘッダーとフッターを追加するプロセスを簡素化します。C#プロジェクトとシームレスに統合され、HTMLからPDFへの変換のような追加機能を提供し、PDF操作のための多目的なツールとなっています。
IronPDFとiTextSharpは一緒に使えますか?
はい、IronPDFとiTextSharpはC#プロジェクトで一緒に使うことができます。iTextSharpはプログラムでPDFを操作するのに適していますが、IronPDFはHTMLをPDFに変換するような追加機能を提供することで補完します。
IronPDFを使ってヘッダーとフッターをスタイルする方法はありますか?
IronPDFはHTMLとCSSを使ってヘッダーとフッターをスタイルすることができます。これにより、開発者はPDFドキュメントの視覚的に魅力的なデザインやレイアウトを柔軟に作成することができます。
IronPDFはヘッダーやフッターのページ番号をどのように扱うのですか?
IronPDFはヘッダーとフッターに自動的にページ番号を挿入することができます。総ページ数を含めたり、開始ページ数を調整するなど、ニーズに応じてページ番号をフォーマットするオプションを提供します。
IronPDFでC#を使ってPDFを操作する利点は何ですか?
IronPDFでPDFを操作するためにC#を使用することは、強力な型安全性、.NETアプリケーションとの容易な統合、開発プロセスを強化する幅広いライブラリやツールへのアクセスを提供します。IronPDFのC# APIは直感的でユーザーフレンドリーに設計されているため、あらゆるレベルの開発者がアクセス可能です。
IronPDFを使って既存のドキュメントをPDFに変換できますか?
はい、IronPDFはHTML、ASPX、その他のウェブベースのコンテンツを含む様々なドキュメントフォーマットをPDFに変換することができます。この機能はウェブページや動的に生成されたコンテンツからPDFを作成する場合に特に便利です。


