Wie man PDF zu JPG in VB.NET konvertiert
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 Kopfzeilen 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 iText-Lösungen mit PdfPageEventHelper und der OnEndPage-Methode suchen, werden feststellen, dass moderne .NET-Bibliotheken deutlich einfachere Ansätze bieten, um die gleichen Ergebnisse zu erzielen.
Diese Anleitung zeigt, wie Sie Kopf- und Fußzeilen in PDF-Dateien mithilfe von C# hinzufügen, indem der traditionelle iText-Ansatz mit der prägnanten API von IronPDF verglichen wird. 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 eine Textkopfzeile und Fußzeile in C# hinzu?
IronPDF bietet den direktesten Ansatz zum Hinzufügen von Kopf- und Fußzeilen zu PDF-Dokumenten in .NET Anwendungen. Mit der ChromePdfRenderer-Klasse, kombiniert mit entweder TextHeaderFooter oder HtmlHeaderFooter, können Sie Kopf- und Fußzeilen mit minimalem Code erzeugen – es ist nicht notwendig, 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
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 iText-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 TextHeaderFooter-Klasse bietet Eigenschaften zur Positionierung von Text links, zentriert oder rechts im Kopf- oder Fußzeilenbereich. Die DrawDividerLine-Eigenschaft fügt eine professionelle Trennlinie zwischen der Kopf- oder Fußzeile und dem Hauptdokumentinhalt hinzu. Zusammenführbare Felder wie {page}, {total-pages} und {date} füllen sich während der PDF-Erstellung automatisch mit dynamischen Werten.
IronPDF übernimmt die Berechnung der Ränder automatisch und stellt so sicher, dass Kopf- und Fußzeilen nicht mit dem Dokumentinhalt überlappen. Die TextHeaderFooter-Klasse unterstützt Schriftarten von IronSoftware.Drawing.FontTypes und gibt Ihnen die Kontrolle über Typografie ohne externe Abhängigkeiten.
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 Kopfzeilen ein Bildlogo, komplexe Layouts oder markenspezifisches Styling enthalten sollen – ohne manuell PdfPCell-Objekte zu erstellen oder new Phrase-Konstruktoren zu verwenden.
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 BaseUrl-Eigenschaft legt den Stammverzeichnispfad fest, um relative Bild-URLs aufzulösen, was die Einbindung von Firmenlogos oder anderen Grafiken vereinfacht. Die MaxHeight-Eigenschaft stellt sicher, dass die Kopfzeile die angegebenen Maße nicht überschreitet und ein konsistentes Dokumentlayout beibehält.
Die zusammenführbaren Felder ({page}, {total-pages}, {url}, {date}, {time}, {html-title}, {pdf-title}) arbeiten identisch in HTML-Kopf- und Fußzeilen und bieten eine dynamische Inhaltseinfügung 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 Behandlungen, 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 AddHtmlHeaders und AddHtmlFooters-Methoden.
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 PdfDocument-Klasse repräsentiert ein geladenes oder gerendertes PDF und bietet Methoden für nachträgliche Modifikationen. Diese Trennung zwischen Rendering und Modifikation ermöglicht Arbeitsabläufe, bei denen PDF-Dokumente mehrere Verarbeitungsstufen durchlaufen. Die AddHtmlHeaders-Methode wendet die Kopfzeile automatisch auf jede Seite an, obwohl Sie auch spezifische Seiten anvisieren können, 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 die seitenindizesgestützte Kopfzeilenanwendung – es ist nicht notwendig, Bedingungen in 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 {page}-zusammenführbare Feld an, während der dritte Parameter eine Sammlung von Seitenindizes akzeptiert, die die Kopfzeile erhalten sollen. 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 <title> |
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 den HTML-Fragment-String mit interpolierten Werten erstellen, bevor Sie ihn der HtmlFragment-Eigenschaft 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 {page} und {total-pages}-Tokens als einfache Zeichenfolgen innerhalb der C#-Zeichenfolgenkonkatenation belassen werden – nicht im interpolierten Teil. 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-Ansatz aus?
Entwickler, die mit iText (dem Nachfolger von iText) vertraut sind, wissen, dass die Hinzufügung von Kopf- und Fußzeilen die Implementierung von Ereignishandlern erfordert. Die Bibliothek verwendet ein Seitenevent-System, bei dem Sie eine Klasse erstellen, die auf Dokumentenlebenszyklusereignisse wie OnEndPage und OnCloseDocument reagiert.
Hier ist, wie dieselbe Kopf- und Fußzeilenimplementierung mit iText aussieht, unter Verwendung des ITextEvents-Patterns:
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. iText erfordert das Erstellen einer separaten Handler-Klasse, die IEventHandler implementiert (ähnlich wie im Legacy-PdfPageEventHelper), das manuelle Berechnen von Seitenpositionen mit Fließkommazahlen und das Verwalten der PdfCanvas und Canvas-Objekte für Zeichenoperationen. Der Handler empfängt Ereignisse für jede Seite über den END_PAGE-Ereignistyp – ein Detail, das viele Entwickler aus dem Tritt bringt, die fälschlicherweise START_PAGE verwenden.
Ausgabe

Das Koordinatensystem in iText geht vom linken unteren Seitenrand aus, erfordert explizite Berechnungen für die Positionierung. Um die endgültige Seitenanzahl zu erhalten, ist zusätzliche Komplexität mit PdfTemplate-Mustern erforderlich, die während OnCloseDocument ausgefüllt werden – ein Muster, das zusätzlichen Boilerplate-Code zu einem ohnehin schon umfassenden Workflow 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 unterliegt auch der AGPL-Lizenzierung, was bedeutet, dass Anwendungen, die iText oder iText verwenden, Open Source sein müssen, es sei denn, es wird eine kommerzielle Lizenz erworben. 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 / iText |
|---|---|---|
| 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- <img> -Tag mit BaseUrl |
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 erfordert das Debuggen von Positionierungsproblemen das wiederholte Generieren von Test-PDFs und das manuelle Messen 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 TextHeaderFooter-Klasse bietet diese 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 Font-Eigenschaft akzeptiert Werte von IronSoftware.Drawing.FontTypes, einschließlich Helvetica, Arial, Courier und Times New Roman. Die DrawDividerLine-Eigenschaft fügt eine professionelle horizontale Linie zwischen der Fußzeile und dem Hauptinhalt hinzu. Sie können die Linienfarbe mit DrawDividerLineColor anpassen, um Ihre Markenfarben oder das Dokumentthema zu treffen.
Für HTML-basierte Kopf- und Fußzeilen erbt die LoadStylesAndCSSFromMainHtmlDocument-Eigenschaft optional Stile aus dem Hauptdokument, das gerendert wird, um visuelle Konsistenz zwischen Kopfzeilen und Hauptinhalten 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-Dokumentation bestätigt auch die plattformübergreifende Unterstützung, aber die zusätzliche Komplexität ihres ereignisgesteuerten Modells bedeutet, dass das Debuggen von plattformübergreifenden Rendering-Problemen mehr Aufwand erfordern kann als mit 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

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# reicht von einfach bis komplex, abhängig von der Wahl der Bibliothek. Während iText mit Hilfe von Ereignishandlern und Canvas-Operationen eine niedrige Kontrolle bietet, liefert IronPDF dieselbe Funktionalität durch eine API, die vertraute HTML- und CSS-Konzepte anwendet. Für Entwickler, die eine schnelle Implementierung und wartbaren Code priorisieren, reduziert IronPDF die Implementierung von Kopf- und Fußzeilen von Dutzenden von Zeilen – einschließlich Handlerklassen, Zellkonfigurationen und Tabellenstrukturen – auf nur wenige Eigenschaften-Zuweisungen.
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.

