VB.NETでPDFをJPGに変換する方法
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文書にヘッダーとフッターを追加することは、プロフェッショナルなレポート、請求書、ビジネス文書を作成するために不可欠です。 iTextソリューションをOnEndPageメソッドを使用して検索する開発者は、最新 for .NETライブラリが同じ結果をより簡単に達成するアプローチを提供していることに気づくでしょう。
このガイドは、従来のiTextアプローチとIronPDFの簡潔なAPIを比較しながら、C#を使用してPDFファイルにヘッダーとフッターを追加する方法を示しています。 最終的には、新しいDocumentの作成から最終的なPDFファイルの生成まで、双方の実装を理解し、プロジェクトの要件に最適なアプローチを選択できるようになります。

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

C#でテキストヘッダーとフッターを追加する方法
IronPDF は、 .NETアプリケーションで PDF ドキュメントにヘッダーとフッターを追加するための最も直接的なアプローチを提供します。 contentbyteオブジェクトを手動で管理する必要はありません。
コードを書く前に、 NuGetを使用してIronPDF をプロジェクトに追加します。
Install-Package IronPdf
ライブラリは外部依存を必要とせず、インストール後すぐに動作します。 .NET 5、6、7、8、10 を対象としており、プラットフォーム固有の構成なしで Windows、Linux、macOS 上で実行されます。
古いiTextパターンでは、開発者はヘッダーとフッターのロジックを手動で注入するために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プロパティは、ヘッダーまたはフッターとメインドキュメントコンテンツの間にプロフェッショナルなセパレーターラインを追加します。 {date}のような統合可能なフィールドは、PDF生成中に動的値で自動的に埋められます。
IronPDF は余白の計算を自動的に処理し、ヘッダーとフッターがドキュメントの内容と重ならないようにしています。 TextHeaderFooterクラスはIronSoftware.Drawing.FontTypesからフォントタイプをサポートし、外部の依存なしにタイポグラフィを制御できます。
出力

実装全体が、明確で読みやすいプロパティ割り当てを持つ1つのコードブロックに収まっていることに注目してください。 個別のクラス ファイルを作成したり、ピクセル位置を計算したり、キャンバス オブジェクトを管理したりする必要はありません。 ライブラリはこれらの複雑さを抽象化し、PDF 生成の仕組みではなくコンテンツに集中できるようにします。
HTMLスタイルのヘッダーとフッターはどのように作成しますか?
より洗練されたデザインの場合、IronPDF のHtmlHeaderFooter クラスを使用すると、完全な HTML および CSS スタイル設定が可能になります。 このアプローチは、ヘッダーにロゴイメージや複雑なレイアウト、またはブランド固有のスタイルを含める必要がある場合に特に価値があります。new Phraseコンストラクタを使用する必要はありません。
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は、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")
{page}統合可能なフィールドの開始ページ番号を指定し、3番目のパラメーターはヘッダーを受け取るページインデックスのコレクションを受け入れます。 このきめ細かなコントロールにより、複雑な条件ロジックを使用せずに、複雑なドキュメントレイアウトが可能になります。 高度なヘッダーとフッターの例では、奇数ページと偶数ページの区別を含む追加のシナリオについて説明します。
出力

ページ番号を超える動的コンテンツをどのように実装しますか?
マージ可能なフィールド システムは、レンダリング中に自動的に入力されるいくつかの動的な値をサポートしています。 次の表に、使用可能なすべてのフィールドとその意味を示します。
| フィールド | 挿入された値 | 一般的な用途 |
|---|---|---|
{page} |
現在のページ番号 | "ページ 3"と表示されているフッター |
{total-pages} |
総ページ数 | フッターに"10 ページ中 3 ページ"と表示 |
{date} |
現在の日付(ローカル形式) | 監査タイムスタンプ、レポートの日付 |
{time} |
現地時間の現在時刻 | 規制コンプライアンスフッター |
{html-title} |
HTML タグの内容 |
ページタイトルを表示するドキュメントヘッダー |
{pdf-title} |
PDFドキュメントのメタデータタイトル | ドキュメント名付きのブランドフッター |
{url} |
ウェブアドレスからレンダリングする場合のソース URL | ウェブコンテンツのアーカイブフッター |
実行時に決定される本当に動的なコンテンツには、HtmlFragmentプロパティに割り当てる前に、補間された値を使用してHTMLフラグメント文字列を構築できます。 このアプローチでは、データベースから取得した値、ユーザー情報、または計算データを含むヘッダーを使用できます:
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")
注:{total-pages}トークンは、C#文字列の連結内でプレーンな文字列として残され、補間された部分内ではありません。 PDF レンダリング中に、 IronPDF はこれらのトークンを自動的に置き換えます。 このパターンは、Active Directory のユーザー名、データベースのドキュメント ID、ビルド パイプラインのバージョン文字列、レポート エンジンからの計算された合計など、あらゆるランタイム値に機能します。
結合可能なフィールドと文字列補間を組み合わせることで、ビジネス ドキュメントでよく見られる洗練されたフッター デザインが可能になります。 法務部門では、文書のタイトル、日付、ページ数を示すフッターを必要とすることがよくあります。 財務報告書には、法令遵守のためタイムスタンプが必要な場合があります。 これらの要件は、ドキュメント タイプごとにカスタム コードを追加しなくても満たされます。
iTextアプローチはどのように見えるか?
iText(iTextの後継)に精通している開発者は、ヘッダーとフッターを追加するにはイベントハンドラーを実装する必要があると知っています。 ライブラリはページイベントシステムを使用し、OnCloseDocumentなどのドキュメントライフサイクルイベントに応答するクラスを作成します。
ここに、iTextを使った同じヘッダーとフッターの実装があり、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では、Canvasオブジェクトを描画操作のために管理する必要があります。 ハンドラは、START_PAGEを誤って使用する多くの開発者をつまずかせる詳細です。
出力

iText の座標系はページの左下隅を起点としており、位置決めのために明示的な計算が必要です。 ページの最終的な数を取得するには、OnCloseDocument中に補完され、既に関与しているワークフローにさらにボイラープレートコードを追加するパターンです。
ウェブ開発のバックグラウンドを持つ開発者にとって、この座標ベースのアプローチは、宣言的なHTML/CSSモデルと比較して異質に感じられます。 それぞれの配置を決定するには、ページ寸法、余白オフセット、およびテキスト測定を理解する必要がありますが、これらは HTML ベースのアプローチでは抽象化されます。
iTextはまた、AGPLライセンスの下で動作しているため、iTextまたはiTextを使用するアプリケーションは、商業ライセンスを購入しない限り、オープンソースでなければなりません。 これは、商用プロジェクト用のライブラリを選択する際に重要な考慮事項です。
2 つのアプローチを比較するとどうなりますか?
具体的な機能を並べて見ると、違いがより明確になります。次の表は、主な違いをまとめたものです。
| 特徴 | IronPDF | iText / iText |
|---|---|---|
| 実装スタイル | レンダラーオプションのプロパティの割り当て | 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では、位置決めの問題をデバッグするために、テスト用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プロパティは、フッターとメインコンテンツの間にプロフェッショナルな水平ルールを追加します。 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のドキュメントもまたクロスプラットフォームサポートを確認していますが、イベント駆動型モデルの追加の複雑さから、デバッグするときにクロスプラットフォームのレンダリング問題がデバッグするには、宣言的なHTMLベースのアプローチよりも関与することができるのです。
次のステップは何ですか?
IronPDFを使えば、PDFドキュメントにヘッダーとフッターを実装するのに数分しかかかりません。 NuGetパッケージマネージャーを使用してライブラリをインストールしてください:
Install-Package IronPdf

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

C# での PDF ドキュメントへのヘッダーとフッターの追加は、使用するライブラリに応じて、簡単なものから複雑なものまで様々です。iText はイベントハンドラーとキャンバスの操作を通じて低レベルの制御を提供しますが、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を作成する場合に特に便利です。

