Hinzufügen von Kopf- und Fußzeilen in PDF mit iTextSharp und IronPDF in C# mit Beispiel
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing.
Hinzufügen von Kopf- und Fußzeilen zu PDF-Dokumenten in C
Das Hinzufügen von Kopf- und Fußzeilen zu PDF-Dokumenten ist für die Erstellung professioneller Berichte, Rechnungen und Geschäftsdokumente unerlässlich. Entwickler, die nach iTextSharp-Lösungen mit der Methode PdfPageEventHelper und der Methode OnEndPage suchen, werden feststellen, dass moderne .NET Bibliotheken wesentlich einfachere Ansätze bieten, um die gleichen Ergebnisse zu erzielen.
Dieser Leitfaden zeigt, wie man mit C# Kopf- und Fußzeilen in PDF-Dateien einfügt und vergleicht dabei den traditionellen Ansatz von iText 7 mit der prägnanten API von IronPDF . Am Ende werden Sie beide Implementierungen verstehen – von der Erstellung eines neuen Document bis zur Generierung der endgültigen PDF-Datei – und können den Ansatz wählen, der am besten zu Ihren Projektanforderungen passt.

Warum sind PDF-Kopf- und Fußzeilen in Professional Dokumenten wichtig?
Kopf- und Fußzeilen haben in professionellen PDF-Dokumenten eine wichtige Funktion. Sie sorgen für ein konsistentes Branding durch Bildlogos, ermöglichen die Seitennavigation mit Seitenzahlen, zeigen wichtige Metadaten wie Datumsangaben und Dokumententitel an und stellen die Authentizität des Dokuments durch Zeitstempel und Versionsinformationen sicher.
In Unternehmensumgebungen haben Kopf- und Fußzeilen oft eine rechtliche Bedeutung. Bei Finanzberichten sind Zeitstempel für Prüfpfade erforderlich. Die Verträge benötigen eine Seitennummerierung, um die Vollständigkeit zu gewährleisten. Interne Dokumente erfordern möglicherweise Vertraulichkeitshinweise auf jeder Seite. Um diese Anforderungen programmatisch zu erfüllen, ist eine PDF-Bibliothek erforderlich, die die Einfügung von Inhalten auf Seitenebene zuverlässig handhabt.
Wichtige Gründe für das programmatische Hinzufügen von Kopf- und Fußzeilen sind:
- Einhaltung der Prüfvorschriften – Zeitstempel und Versionsnummern auf jeder Seite erfüllen die regulatorischen Anforderungen
- Markenkonsistenz – Firmenlogos und -design werden einheitlich auf alle erstellten Dokumente angewendet.
- Navigation – Seitenzahlen und Abschnittsüberschriften helfen Lesern, Informationen schnell zu finden
- Authentizität – Name des Autors, Erstellungsdatum und Dokumenten-ID verhindern Streitigkeiten über die Integrität des Dokuments.

Wie fügt man in C# eine Textkopf- und -fußzeile hinzu?
IronPDF bietet den direktesten Ansatz zum Hinzufügen von Kopf- und Fußzeilen zu PDF-Dokumenten in .NET Anwendungen. Durch die Verwendung der Klasse ChromePdfRenderer in Kombination mit entweder TextHeaderFooter oder HtmlHeaderFooter können Sie Kopf- und Fußzeilen mit minimalem Code generieren – es ist nicht erforderlich, separate Zellen zu erstellen oder ein contentbyte-Objekt manuell zu verwalten.
Bevor Sie mit dem Programmieren beginnen, fügen Sie IronPDF mithilfe von NuGet zu Ihrem Projekt hinzu:
Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
Die Bibliothek erfordert keine externen Abhängigkeiten und funktioniert sofort nach der Installation. Es zielt auf .NET 5, 6, 7, 8 und 10 ab und läuft unter Windows, Linux und macOS ohne plattformspezifische Konfiguration.
In älteren iTextSharp-Mustern erstellten Entwickler Hilfsmethoden wie private static void AddContent(), um Kopf- und Fußzeilenlogik manuell einzufügen. IronPDF macht derartige Floskeln völlig überflüssig.
Hier ist ein vollständiges Beispiel, das sowohl eine Textkopfzeile als auch eine Textfußzeile zu einer PDF-Datei hinzufügt:
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")
Die Klasse TextHeaderFooter bietet Eigenschaften zum Positionieren von Text links, mittig oder rechts im Kopf- oder Fußzeilenbereich. Die Eigenschaft DrawDividerLine fügt eine Professional Trennlinie zwischen Kopf- oder Fußzeile und dem Hauptdokumentinhalt ein. Zusammenführbare Felder wie {page}, {total-pages} und {date} werden während der PDF-Generierung automatisch mit dynamischen Werten befüllt.
IronPDF übernimmt die Berechnung der Ränder automatisch und stellt so sicher, dass Kopf- und Fußzeilen nicht mit dem Dokumentinhalt überlappen. Die Klasse TextHeaderFooter unterstützt Schriftarten von IronSoftware.Drawing.FontTypes, wodurch Sie die Typografie ohne externe Abhängigkeiten steuern können.
Ausgabe

Beachten Sie, wie die gesamte Implementierung in einen einzigen Codeblock mit klaren, lesbaren Eigenschaftszuweisungen passt. Es ist nicht nötig, eine separate Klassendatei zu erstellen, Pixelpositionen zu berechnen oder Canvas-Objekte zu verwalten. Die Bibliothek abstrahiert diese Komplexitäten, sodass Sie sich auf den Inhalt konzentrieren können, anstatt auf die Mechanismen der PDF-Erstellung.
Wie erstellt man Kopf- und Fußzeilen im HTML-Stil?
Für anspruchsvollere Designs ermöglicht die HtmlHeaderFooter-Klasse von IronPDF die vollständige HTML- und CSS-Formatierung. Dieser Ansatz ist besonders wertvoll, wenn Header ein Bildlogo, komplexe Layouts oder markenspezifische Stile enthalten müssen – ohne dass manuell PdfPCell Objekte erstellt oder new Phrase Konstruktoren verwendet werden müssen.
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")
Dieses Codebeispiel zeigt, wie HTML-Kopfzeilen neben Text auch Bilder enthalten können. Die Eigenschaft BaseUrl legt den Stammpfad für die Auflösung relativer Bild-URLs fest und vereinfacht so das Einbinden von Firmenlogos oder anderen Grafiken. Die Eigenschaft MaxHeight stellt sicher, dass die Kopfzeile die festgelegten Abmessungen nicht überschreitet und somit ein einheitliches Dokumentlayout gewährleistet ist.
Die zusammenführbaren Felder ({page}, {total-pages}, {url}, {date}, {time}, {html-title}, {pdf-title}) funktionieren in HTML-Kopf- und Fußzeilen identisch und ermöglichen das dynamische Einfügen von Inhalten ohne zusätzlichen Code. Hinweise zur Implementierung verschiedener Header-Stile finden Sie im Leitfaden "Headers and Footers How-To Guide" .
Der HTML-Ansatz spielt seine Stärken besonders bei der Erstellung von Dokumenten mit Markenlogo aus. Marketingteams können HTML-Vorlagen bereitstellen, die von den Entwicklern direkt integriert werden können, um eine pixelgenaue Reproduktion der genehmigten Designs zu gewährleisten. CSS-Eigenschaften wie font-family, color, background-color und border funktionieren wie erwartet und ermöglichen anspruchsvolle visuelle Darstellungen, die in anderen Bibliotheken umfangreichen Low-Level-Code erfordern würden.

Wie kann man Kopfzeilen zu bestehenden PDF-Dokumenten hinzufügen?
Eine häufige Anforderung besteht darin, bereits existierenden PDF-Dateien Kopf- und Fußzeilen hinzuzufügen – egal ob es sich um hochgeladene Dokumente, zusammengeführte Dateien oder von anderen Systemen generierte PDFs handelt. IronPDF behandelt dieses Szenario mit den Methoden AddHtmlHeaders und 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")
Die Klasse PdfDocument repräsentiert ein geladenes oder gerendertes PDF und bietet Methoden für Änderungen nach dem Rendern. Diese Trennung zwischen Rendering und Modifikation ermöglicht Arbeitsabläufe, bei denen PDF-Dokumente mehrere Verarbeitungsstufen durchlaufen. Die Methode AddHtmlHeaders wendet den Header automatisch auf jede Seite an. Sie können aber auch bestimmte Seiten ansprechen, indem Sie eine Sammlung von Seitenindizes übergeben.
Eingabe

Ausgabe

Diese Fähigkeit ist von unschätzbarem Wert in Dokumentenverwaltungssystemen, die PDF-Dateien aus verschiedenen Quellen erhalten, z. B. gescannte Dokumente, Benutzer-Uploads oder API-Antworten von Drittanbietern. IronPDF standardisiert das Branding oder die Seitennummerierung vor der Verteilung oder Archivierung.
Wie fügt man auf verschiedenen Seiten unterschiedliche Überschriften hinzu?
Bei manchen Dokumenten muss die erste Seite eine andere Kopfzeile haben (oder gar keine Kopfzeile), während die nachfolgenden Seiten ein Standardformat verwenden. IronPDF unterstützt dies durch eine seitenindexbasierte Header-Anwendung – es ist nicht erforderlich, Bedingungen innerhalb von void OnEndPage Handlern zu prüfen oder Schleifenzähler manuell zu verwalten:
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")
Der zweite Parameter in AddHtmlHeaders gibt die Startseitennummer für das zusammenführbare Feld {page} an, während der dritte Parameter eine Sammlung von Seitenindizes akzeptiert, um den Header zu empfangen. Diese granulare Steuerung ermöglicht komplexe Dokumentenlayouts ohne komplizierte bedingte Logik. Das Beispiel "Erweiterte Kopf- und Fußzeilen" behandelt weitere Szenarien, darunter die Unterscheidung zwischen geraden und ungeraden Seiten.
Ausgabe

Wie implementiert man dynamische Inhalte über Seitenzahlen hinaus?
Das System der zusammenführbaren Felder unterstützt mehrere dynamische Werte, die während des Renderns automatisch eingefügt werden. Die folgende Tabelle listet alle verfügbaren Felder und ihre Bedeutungen auf:
| Feld | Eingefügter Wert | Typische Verwendung |
|---|---|---|
| `{page}` | Aktuelle Seitenzahl | Fußzeilen mit der Aufschrift "Seite 3" |
| `{total-pages}` | Gesamtzahl der Seiten | Fußzeilen mit dem Hinweis "Seite 3 von 10" |
| `{date}` | Aktuelles Datum im lokalen Format | Prüfzeitstempel, Berichtsdaten |
| `{time}` | Aktuelle Zeit im lokalen Format | Fußzeilen zur Einhaltung gesetzlicher Bestimmungen |
| `{html-title}` | Inhalt des HTML-Tags ` |
Dokumentkopfzeilen, die den Seitentitel anzeigen |
| `{pdf-title}` | Titel der Metadaten des PDF-Dokuments | Branded Footers mit Dokumentnamen |
| `{url}` | Quell-URL beim Rendern von einer Webadresse | Archivierungsfußzeilen für Webinhalte |
Für wirklich dynamische Inhalte – Werte, die zur Laufzeit bestimmt werden – können Sie die HTML-Fragmentzeichenfolge mit interpolierten Werten erstellen, bevor Sie sie der Eigenschaft HtmlFragment zuweisen. Dieser Ansatz ermöglicht Kopfzeilen, die aus der Datenbank abgerufene Werte, Benutzerinformationen oder berechnete Daten enthalten:
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")
Beachten Sie, dass die Token {page} und {total-pages} innerhalb der C#-Zeichenkettenverkettung als einfache Zeichenketten erhalten bleiben – nicht innerhalb des interpolierten Teils. Während des PDF-Renderings ersetzt IronPDF diese Token automatisch. Dieses Muster funktioniert für jeden Laufzeitwert: Benutzernamen aus Active Directory, Dokument-IDs aus einer Datenbank, Versionszeichenfolgen aus Ihrer Build-Pipeline oder berechnete Summen aus Ihrem Reporting-System.
Die Kombination aus zusammenführbaren Feldern und String-Interpolation ermöglicht anspruchsvolle Fußzeilengestaltungen, wie sie in Geschäftsdokumenten üblich sind. Rechtsabteilungen benötigen oft Fußzeilen mit Titel, Datum und Seitenzahl des Dokuments. Finanzberichte benötigen zur Einhaltung gesetzlicher Vorschriften möglicherweise Zeitstempel. Diese Anforderungen werden ohne kundenspezifischen Code für jeden Dokumenttyp erfüllt.
Wie sieht der iText 7-Ansatz aus?
Entwickler, die mit iText 7 (dem Nachfolger von iTextSharp) vertraut sind, wissen, dass das Hinzufügen von Kopf- und Fußzeilen die Implementierung von Event-Handlern erfordert. Die Bibliothek verwendet ein Seitenereignissystem, bei dem Sie eine Klasse erstellen, die auf Dokumentlebenszyklusereignisse wie OnEndPage und OnCloseDocument reagiert.
So sieht die gleiche Header- und Footer-Implementierung mit iText 7 unter Verwendung des Musters ITextEvents aus:
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()
Diese Implementierung verdeutlicht den grundlegenden architektonischen Unterschied zwischen den beiden Bibliotheken. Für iText 7 ist es erforderlich, eine separate Handler-Klasse zu erstellen, die IEventHandler implementiert (ähnlich dem älteren PdfPageEventHelper), Seitenpositionen manuell mithilfe von Gleitkomma-Koordinaten zu berechnen und die Objekte PdfCanvas und Canvas für Zeichenvorgänge zu verwalten. Der Handler empfängt Ereignisse für jede Seite über den Ereignistyp END_PAGE - ein Detail, das viele Entwickler in die Irre führt, die fälschlicherweise START_PAGE verwenden.
Ausgabe

Das Koordinatensystem in iText 7 geht von der linken unteren Ecke der Seite aus und erfordert explizite Berechnungen zur Positionierung. Um die endgültige Seitenzahl zu ermitteln, ist eine zusätzliche Komplexität mit PdfTemplate Mustern erforderlich, die während OnCloseDocument ausgefüllt werden -- ein Muster, das einem ohnehin schon komplexen Workflow noch mehr Boilerplate-Code hinzufügt.
Für Entwickler, die aus der Webentwicklung kommen, fühlt sich dieser koordinatenbasierte Ansatz im Vergleich zum deklarativen HTML/CSS-Modell fremd an. Jede Positionierungsentscheidung erfordert ein Verständnis von Seitenabmessungen, Randabständen und Textmessungen – Aspekte, die bei HTML-basierten Ansätzen abstrahiert werden.
iText 7 unterliegt außerdem der AGPL-Lizenz, was bedeutet, dass Anwendungen, die iTextSharp oder iText 7 verwenden, Open Source sein müssen, sofern keine kommerzielle Lizenz erworben wird. Dies ist ein wichtiger Aspekt bei der Auswahl zwischen Bibliotheken für kommerzielle Projekte.
Wie lassen sich die beiden Ansätze vergleichen?
Die Unterschiede werden deutlicher, wenn man die einzelnen Funktionen direkt miteinander vergleicht. Die folgende Tabelle fasst die wichtigsten Unterschiede zusammen:
| Merkmal | IronPDF | iText 7 / iTextSharp |
|---|---|---|
| Implementierungsstil | Eigenschaftenzuweisung bei Renderer-Optionen | Ereignisbehandlungsklasse, die IEventHandler implementiert |
| HTML/CSS-Unterstützung | Vollständiges HTML und CSS über HtmlHeaderFooter | Keine native HTML-Unterstützung; erfordert Low-Level-Canvas-Zeichnen |
| Summe der Seitenzahlen | Automatische Überschreibung des Felds `{total-pages}` | Erfordert, dass die PDF-Vorlage in OnCloseDocument ausgefüllt wird. |
| Bild im Header | Standard-HTML- ` |
Erfordert ein Bildobjekt und manuelle Positionierung |
| Zu bestehendem PDF hinzufügen | AddHtmlHeaders / AddHtmlFooters Methoden | Erfordert erneute Verarbeitung durch Stempel oder Ereignisschleife |
| Seitenweises Targeting | Liste der an die Methode übergebenen Seitenindizes | Bedingte Logik innerhalb des Ereignishandlers |
| Lizenzmodell | Kommerziell mit kostenloser Testversion | AGPL (Open Source) oder kommerziell |
| Plattformübergreifend | Windows, Linux, macOS; Docker-fähig | Windows, Linux, macOS |
Die Entwicklungserfahrung unterscheidet sich auch bei der Fehlerbehebung erheblich. Der HTML-basierte Ansatz von IronPDF bedeutet, dass Sie Ihr Kopfzeilendesign in einem Browser in der Vorschau anzeigen können, bevor Sie es in Ihren PDF-Generierungscode integrieren. Wenn etwas falsch aussieht, können Sie den HTML- und CSS-Code mit den bekannten Browser-Entwicklerwerkzeugen anpassen. Bei iText 7 erfordert die Behebung von Positionierungsproblemen die wiederholte Erstellung von Test-PDFs und die manuelle Messung von Koordinaten.
Der HTML-basierte Ansatz ermöglicht es Ihnen, Ihre vorhandenen Webentwicklungskenntnisse direkt anzuwenden. Jedes mit HTML und CSS realisierbare Layout funktioniert in IronPDF Kopf- und Fußzeilen, von Flexbox-Anordnungen bis hin zu Bildrastern. Das Beispiel für HTML-Kopf- und Fußzeilen zeigt weitere Gestaltungsmöglichkeiten.
Anpassen des Erscheinungsbilds von Kopf- und Fußzeile
Die Feinabstimmung von Kopf- und Fußzeilen umfasst mehrere Eigenschaften, die sich auf die Positionierung und die visuelle Darstellung auswirken. Die Klasse TextHeaderFooter bietet folgende Anpassungsoptionen:
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")
Die Eigenschaft Font akzeptiert Werte von IronSoftware.Drawing.FontTypes, einschließlich Helvetica, Arial, Courier und Times New Roman. Die Eigenschaft DrawDividerLine fügt eine Professional horizontale Linie zwischen der Fußzeile und dem Hauptinhalt ein. Sie können die Linienfarbe mit DrawDividerLineColor an Ihre Markenfarben oder Ihr Dokumentdesign anpassen.
Bei HTML-basierten Kopf- und Fußzeilen erbt die Eigenschaft LoadStylesAndCSSFromMainHtmlDocument optional Stile vom gerenderten Hauptdokument, um eine visuelle Konsistenz zwischen Kopfzeilen und Hauptteil zu gewährleisten. Dies ist besonders nützlich, wenn Ihr Hauptdokument benutzerdefinierte CSS verwendet, die auch für die Kopf- und Fußzeilenbereiche gelten sollen.

Plattformübergreifende und Container-Bereitstellungen
Moderne .NET-Anwendungen werden häufig in Linux-Containern, Azure App Services oder AWS Lambda-Funktionen bereitgestellt. IronPDF unterstützt den plattformübergreifenden Einsatz unter Windows, Linux und macOS, ohne dass eine zusätzliche Konfiguration erforderlich ist. Die Bibliothek funktioniert standardmäßig in Docker-Containern und ist daher für Microservices-Architekturen und Cloud-native Anwendungen geeignet.
Diese plattformübergreifende Funktionalität erstreckt sich auch auf die Kopf- und Fußzeilenfunktionalität – derselbe Code, der auf einem Windows-Entwicklungsrechner PDFs mit Kopfzeilen erzeugt, liefert bei der Bereitstellung auf einem Linux-Produktionsserver identische Ergebnisse. Es ist nicht erforderlich, zusätzliche Schriftarten zu installieren, Rendering-Engines zu konfigurieren oder plattformspezifische Codepfade zu handhaben.
Für Teams, die containerisierte Workloads ausführen, bietet die IronPDF Docker-Bereitstellungsdokumentation Konfigurationshinweise für verschiedene Basis-Images und Orchestrierungsplattformen. Das konsistente Verhalten der Bibliothek in verschiedenen Umgebungen eliminiert eine häufige Fehlerquelle in PDF-Generierungsabläufen.
Laut Microsofts .NET -Dokumentation profitieren containerisierte .NET -Anwendungen von einem konsistenten Laufzeitverhalten in verschiedenen Umgebungen – ein Prinzip, das die Rendering-Engine von IronPDF bei der PDF-Generierung unterstützt. In ähnlicher Weise werden in der offiziellen Docker-Dokumentation Best Practices für die Containerisierung von .NET -Workloads erläutert, die direkt auf PDF-Generierungsdienste anwendbar sind.
Die iText 7-Dokumentation bestätigt ebenfalls die plattformübergreifende Unterstützung, doch die zusätzliche Komplexität des ereignisgesteuerten Modells bedeutet, dass die Fehlersuche bei plattformübergreifenden Darstellungsproblemen aufwendiger sein kann als bei einem deklarativen HTML-basierten Ansatz.
Was sind Ihre nächsten Schritte?
Die Implementierung von Kopf- und Fußzeilen in Ihren PDF-Dokumenten dauert mit IronPDF nur ein paar Minuten. Installieren Sie die Bibliothek über den NuGet-Paket-Manager:
Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf

Von hier aus helfen Ihnen diese Ressourcen weiter:
- Die Dokumentation "Erste Schritte " deckt das gesamte Spektrum der PDF-Erstellungs- und Bearbeitungsfunktionen ab.
- Leitfaden für Kopf- und Fußzeilen – Schritt-für-Schritt-Anleitung für alle Szenarien von Kopf- und Fußzeilen
- HTML-Kopf- und Fußzeilenbeispiele – sofort ausführbare Codebeispiele für HTML-basierte Kopfzeilen
- Beispiel für erweiterte Kopf- und Fußzeilen – seitenweise Ausrichtung und Unterscheidung zwischen geraden und ungeraden Seiten
- TextHeaderFooter-API-Referenz – vollständige Eigenschaftenliste für textbasierte Kopf- und Fußzeilen
- HtmlHeaderFooter API-Referenz – vollständige API für HTML-basierte Kopf- und Fußzeilen
- Docker-Bereitstellungsleitfaden -- Konfiguration für Linux-Container und Cloud-Umgebungen
- IronPDF -Lizenzierungsoptionen – von Tarifen für einzelne Entwickler bis hin zu Enterprise -Teams
Starten Sie Ihre kostenlose Testphase , um Header- und Footer-Implementierungen in Ihren eigenen Projekten zu testen. Die Testversion umfasst alle Funktionen ohne zeitliche Begrenzung, sodass Sie die Bibliothek anhand Ihrer realen Anforderungen an PDF-Dokumente testen können, bevor Sie sich für eine Lizenz entscheiden.

Das Hinzufügen von Kopf- und Fußzeilen zu PDF-Dokumenten in C# kann je nach Bibliothekswahl einfach bis komplex sein. Während iText 7 über Ereignisbehandler und Canvas-Operationen eine Low-Level-Steuerung ermöglicht, bietet IronPDF dieselbe Funktionalität über eine API, die auf bekannten HTML- und CSS-Konzepten basiert. Für Entwickler, die Wert auf schnelle Implementierung und wartungsfreundlichen Code legen, reduziert IronPDF die Implementierung von Kopf- und Fußzeilen von Dutzenden von Zeilen – einschließlich Handler-Klassen, Zellenkonfigurationen und Tabellenstrukturen – auf wenige Eigenschaftszuweisungen.
Häufig gestellte Fragen
Wie kann ich mit iTextSharp Kopf- und Fußzeilen zu PDFs hinzufügen?
Um PDFs mit iTextSharp Kopf- und Fußzeilen hinzuzufügen, können Sie einen Page Event Handler definieren, der die Seiten des Dokuments während des PDF-Erstellungsprozesses anpasst. Dabei wird die OnEndPage-Methode überschrieben, um den gewünschten Kopf- und Fußzeileninhalt einzufügen.
Welche Vorteile bietet die Verwendung von IronPDF für das Hinzufügen von Kopf- und Fußzeilen?
IronPDF vereinfacht das Hinzufügen von Kopf- und Fußzeilen, indem es eine unkomplizierte API bereitstellt und verschiedene Styling-Optionen unterstützt. Es lässt sich nahtlos in C#-Projekte integrieren und bietet zusätzliche Funktionen wie die Konvertierung von HTML in PDF, was es zu einem vielseitigen Werkzeug für die PDF-Bearbeitung macht.
Können IronPDF und iTextSharp zusammen verwendet werden?
Ja, IronPDF und iTextSharp können zusammen in einem C#-Projekt verwendet werden. Während iTextSharp für die programmatische PDF-Bearbeitung hervorragend geeignet ist, ergänzt IronPDF es durch zusätzliche Funktionen wie die Konvertierung von HTML in PDF, was für die dynamische Erzeugung von Kopf- und Fußzeilen nützlich sein kann.
Gibt es eine Möglichkeit, Kopf- und Fußzeilen mit IronPDF zu gestalten?
IronPDF ermöglicht die Gestaltung von Kopf- und Fußzeilen mit HTML und CSS. Dies gibt Entwicklern die Flexibilität, visuell ansprechende Designs und Layouts für ihre PDF-Dokumente zu erstellen.
Wie geht IronPDF mit Seitenzahlen in Kopf- und Fußzeilen um?
IronPDF kann automatisch Seitenzahlen in Kopf- und Fußzeilen einfügen. Es bietet Optionen zur Formatierung der Seitenzahlen entsprechend Ihren Anforderungen, wie z. B. die Einbeziehung der Gesamtseitenzahl oder die Anpassung der Anfangsseitenzahl.
Was ist der Vorteil der Verwendung von C# für die PDF-Bearbeitung mit IronPDF?
Die Verwendung von C# für die PDF-Bearbeitung mit IronPDF bietet eine hohe Typsicherheit, eine einfache Integration in .NET-Anwendungen und den Zugriff auf eine breite Palette von Bibliotheken und Tools, die den Entwicklungsprozess verbessern. Die C#-API von IronPDF ist so konzipiert, dass sie intuitiv und benutzerfreundlich ist, so dass sie für Entwickler aller Kenntnisstufen zugänglich ist.
Kann ich bestehende Dokumente mit IronPDF in PDF konvertieren?
Ja, IronPDF kann verschiedene Dokumentformate, einschließlich HTML, ASPX und andere webbasierte Inhalte, in PDF konvertieren. Diese Funktion ist besonders nützlich für die Erstellung von PDFs aus Webseiten oder dynamisch generierten Inhalten.




