Zum Fußzeileninhalt springen
IRONPDF NUTZEN
Wie man PDF-Dateien in .NET 6 generiert

Wie man mehrere Seiten in eine PDF-Datei einscannt

PDFs in C# zu erstellen, ist eine wesentliche Fähigkeit für moderne .NET-Entwickler, egal ob Sie Finanzberichte, Gesundheitsdokumente oder E-Commerce-Quittungen erstellen. Mit der richtigen .NET-PDF-Bibliothek können Sie HTML-Inhalte mit nur wenigen Codezeilen in professionelle PDF-Dokumente umwandeln und haben die vollständige Kontrolle über Struktur und Erscheinungsbild des Dokuments.

IronPDF ist die einfachste, benutzerfreundlichste .NET-PDF-Erstellungsbibliothek bei weitem - mit einer unglaublich einfachen Lernkurve, die Sie in Minuten, nicht Stunden, PDFs erstellen lässt. Dieser umfassende Leitfaden zeigt Ihnen genau, wie Sie PDF-Dokumente in C# mit IronPDF erstellen - einem leistungsstarken C# PDF Generator, der pixelgenaue Ergebnisse liefert und jede moderne .NET-Plattform unterstützt, einschließlich der bevorstehenden Veröffentlichung von .NET 10 im November 2025. Während dieses Tutorial alles abdeckt, von den einfachsten Anwendungsfällen bis zu den fortgeschrittensten PDF-Erstellungsszenarien, lassen Sie sich nicht einschüchtern - beginnen Sie am Anfang und arbeiten Sie sich vorwärts. Sie werden mehrere Möglichkeiten lernen, PDFs zu erstellen, von einfachen HTML-Strings bis hin zu komplexen mehrseitigen Berichten, sowie wie Sie häufige Probleme beheben und die Leistung für verschiedene PDF-Erstellungsaufgaben optimieren können.

Was Sie lernen werden

  1. Quick Start: Erstellen Sie Ihr erstes PDF in weniger als 2 Minuten
  2. Warum müssen Entwickler PDFs in C# erstellen?
  3. Einrichtung von IronPDF in Ihrem C# Projekt
  4. Verschiedene Wege zum Generieren von PDFs in C#?
  5. Wie kann ich PDFs professionell aussehen lassen?

Schnellstart: Erstellen Sie Ihre erste PDF-Datei in C# (unter 2 Minuten)

Möchten Sie sofort ein PDF erstellen? Lassen Sie uns ein einfaches, aber funktionales PDF-Dokument erstellen, das die Leistungsfähigkeit der modernen PDF-Erstellung in .NET demonstriert. Zuerst installieren Sie IronPDF über den NuGet Package Manager – dieses Einzelpaket enthält alles, was Sie benötigen, um sofort mit der Erstellung von PDFs zu beginnen. IronPDF ist kostenlos für die Entwicklung, sodass Sie alle Funktionen ausprobieren können, bevor Sie sich für eine Lizenz entscheiden.

Install-Package IronPdf

Erstellen wir nun PDF-Inhalte mit C#:

using IronPdf;

// Instantiate the PDF generator - this is your gateway to PDF creation
var renderer = new ChromePdfRenderer();

// Create a PDF from HTML string - yes, it's really this simple!
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>PDF generated successfully!</p>");

// Save your newly created PDF document
pdf.SaveAs("my-first-pdf.pdf");

Console.WriteLine("PDF generated successfully!");
using IronPdf;

// Instantiate the PDF generator - this is your gateway to PDF creation
var renderer = new ChromePdfRenderer();

// Create a PDF from HTML string - yes, it's really this simple!
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>PDF generated successfully!</p>");

// Save your newly created PDF document
pdf.SaveAs("my-first-pdf.pdf");

Console.WriteLine("PDF generated successfully!");
Imports IronPdf

' Instantiate the PDF generator - this is your gateway to PDF creation
Private renderer = New ChromePdfRenderer()

' Create a PDF from HTML string - yes, it's really this simple!
Private pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>PDF generated successfully!</p>")

' Save your newly created PDF document
pdf.SaveAs("my-first-pdf.pdf")

Console.WriteLine("PDF generated successfully!")
$vbLabelText   $csharpLabel

Das war's! Sie haben gerade Ihr erstes PDF-Dokument in C# erstellt. Es ist nicht notwendig, komplexe PDF-APIs zu lernen, keine Serverabhängigkeiten zu installieren, keine Low-Level-PDF-Befehle zu beherrschen. Einfach HTML rein, PDF raus – so sollte die PDF-Erstellung sein. Aber das ist erst der Anfang – lassen Sie uns herausfinden, warum dieser Ansatz so leistungsstark ist und wie Sie komplexere PDF-Dokumente erstellen können.

Wie man ein PDF in C# erstellt: Ein schneller Überblick

Um ein PDF in C# zu erstellen, können Sie Bibliotheken von Drittanbietern wie IronPDF, QuestPDF oder PDFSharp nutzen. Diese Bibliotheken bieten verschiedene Funktionen, darunter das Erstellen von PDFs von Grund auf, das Konvertieren von HTML zu PDF und mehr.

Hier ist eine allgemeine Übersicht des Prozesses:

  1. Installieren Sie eine PDF-Bibliothek: Verwenden Sie den NuGet Package Manager in Visual Studio, um eine geeignete Bibliothek zu installieren.
  2. Erstellen Sie ein neues PDF-Dokument: Instanziieren Sie ein PDF-Dokumentobjekt.
  3. Fügen Sie Inhalte hinzu: Fügen Sie Seiten, Text, Bilder und andere Elemente zum Dokument hinzu.
  4. Speichern Sie das Dokument: Geben Sie einen Dateipfad an und speichern Sie das PDF.

Hier ist ein Beispiel mit IronPDF:

using IronPdf;

public class Example
{
    public static void CreatePdf()
    {
        // Create a new PDF document
        var pdf = new ChromePdfRenderer();

        // Add some text
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a dynamically created PDF.</p>";

        // Render HTML to PDF
        var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);

        // Save the PDF
        pdfDocument.SaveAs("MyDynamicPdf.pdf");
    }
}
using IronPdf;

public class Example
{
    public static void CreatePdf()
    {
        // Create a new PDF document
        var pdf = new ChromePdfRenderer();

        // Add some text
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a dynamically created PDF.</p>";

        // Render HTML to PDF
        var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);

        // Save the PDF
        pdfDocument.SaveAs("MyDynamicPdf.pdf");
    }
}
Imports IronPdf

Public Class Example
	Public Shared Sub CreatePdf()
		' Create a new PDF document
		Dim pdf = New ChromePdfRenderer()

		' Add some text
		Dim htmlContent As String = "<h1>Hello, PDF!</h1><p>This is a dynamically created PDF.</p>"

		' Render HTML to PDF
		Dim pdfDocument = pdf.RenderHtmlAsPdf(htmlContent)

		' Save the PDF
		pdfDocument.SaveAs("MyDynamicPdf.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Jetzt tauchen wir tiefer ein, warum Entwickler PDFs erstellen müssen und erkunden die vielen Möglichkeiten, wie IronPDF diesen Prozess einfach und leistungsstark macht.

Warum sollten Entwickler PDFs in C# erstellen?

PDFs programmatisch zu erstellen in C# eröffnet eine Welt von Möglichkeiten zur Automatisierung der Dokumentenerstellung und zur Rationalisierung der Geschäftsprozesse. IronPDF wurde von über 14 Millionen installierten Entwicklern weltweit vertraut, um diese Aufgaben zu erfüllen, da es unvergleichliche Zuverlässigkeit und Benutzerfreundlichkeit für das Erstellen von PDFs in .NET bietet. In der Finanzwelt verwenden Entwickler C#, um PDF-Rechnungen, Kontoauszüge und regulatorische Berichte zu erstellen, die präzise Formatierungen und Sicherheitsfunktionen erfordern. Gesundheitsorganisationen erstellen Patientenakten, Laborergebnisse und Versicherungsformulare als PDFs, um die Dokumentenintegrität und HIPAA-Konformität zu gewährleisten. E-Commerce-Plattformen erstellen PDF-Quittungen, Versandetiketten und Tickets mit in PDFs eingebetteten QR-Codes (mithilfe von Tools wie IronQR). Die Fähigkeit, PDF-Dokumente programmatisch zu manipulieren, bedeutet, dass Sie Dokumente in großem Maßstab erstellen, ändern und sichern können, ohne manuelle Eingriffe.

Der Vorteil der Verwendung einer modernen .NET-PDF-Bibliothek wie IronPDF besteht darin, dass sie sich nahtlos in die bestehenden Workflows Ihrer Organisation integriert. Egal, ob Sie Word-Dokumente konvertieren von Ihren Geschäftsanwendern, Markdown-Dokumentation Ihres Entwicklungsteams in PDFs umwandeln oder PDFs aus web-basierten Berichten erstellen, IronPDF kann alles bewältigen. Diese organisatorische Flexibilität ist der Grund, warum Unternehmen die programmatische PDF-Erstellung in .NET wählen - es eliminiert die manuelle Dokumentenerstellung, reduziert Fehler, stellt Konsistenz über alle erstellten PDFs sicher und spart unzählige Stunden Arbeitszeit der Mitarbeiter. Anstatt eine proprietäre PDF-Syntax zu lernen oder jedes Element manuell zu positionieren, können Sie HTML und CSS verwenden, um Ihre Dokumente zu entwerfen. Dieser Ansatz reduziert die Entwicklungszeit drastisch und erleichtert die Aufrechterhaltung einer konsistenten Markenidentität in allen erstellten PDFs. Ob Sie nun eine einseitige Rechnung oder einen komplexen mehrkapiteligen Bericht erstellen, die Prinzipien bleiben gleich - entwerfen Sie mit HTML, erstellen Sie PDFs mit C#.

Einrichten von IronPDF in Ihrem C# Projekt

Bevor wir in die Erstellung von PDFs eintauchen, lassen Sie uns sicherstellen, dass Ihre Entwicklungsumgebung ordnungsgemäß konfiguriert ist, um eine optimale PDF-Erstellung zu gewährleisten. IronPDF unterstützt alle modernen .NET-Versionen, einschließlich .NET 8, .NET 9, und ist bereits konform mit dem bevorstehenden .NET 10-Release, das für November 2025 geplant ist (Iron Software arbeitet eng mit der .NET Foundation und Microsoft zusammen, um die Tageskompatibilität zu gewährleisten). Der Einrichtungsprozess ist einfach, aber das Verständnis Ihrer Optionen hilft Ihnen, den besten Ansatz für Ihre spezifischen Bedürfnisse zu wählen.

Installationsmethoden

Methode 1: Visual Studio Package Manager (empfohlen für Einsteiger)

Der einfachste Weg mit IronPDF zu beginnen, ist über den integrierten NuGet Package Manager von Visual Studio. Diese grafische Oberfläche macht es einfach, Ihre Abhängigkeiten für die PDF-Erstellung zu durchsuchen, zu installieren und zu verwalten:

  1. Rechtsklick auf Ihr Projekt im Solution Explorer
  2. Wählen Sie "NuGet-Pakete verwalten"
  3. Klicken Sie auf "Durchsuchen" und suchen Sie nach "IronPDF"
  4. Wählen Sie das IronPDF-Paket von Iron Software
  5. Klicken Sie auf Installieren und akzeptieren Sie die Lizenzvereinbarung
Paket-Manager-Konsole

Methode 2: Paketmanager-Konsole

Für Entwickler, die Kommandozeilenwerkzeuge bevorzugen, bietet die Paket-Manager-Konsole eine schnelle Möglichkeit, IronPDF zu installieren:

Install-Package IronPdf

Methode 3: .NET CLI (für plattformübergreifende Entwicklung)

Wenn Sie an macOS, Linux arbeiten oder die .NET CLI bevorzugen, verwenden Sie diesen Befehl in Ihrem Projektverzeichnis:

dotnet add package IronPdf

Auswahl des richtigen Pakets

IronPDF bietet verschiedene NuGet-Pakete, die für verschiedene Bereitstellungsszenarien optimiert sind. Das Verständnis dieser Optionen hilft Ihnen, die Bereitstellungsgröße zu minimieren und die Leistung zu optimieren:

  • IronPdf: Das Standardpaket, das alles enthält, was Sie für Windows, macOS und Linux benötigen. Perfekt für die meisten Anwendungen.
  • IronPdf.Slim: Ein leichtgewichtiges Basispaket, das plattformspezifische Komponenten zur Laufzeit herunterlädt. Ideal für Cloud-Einsätze, bei denen die Paketgröße eine Rolle spielt.
  • IronPdf.Linux: Speziell für Linux-Einsätze optimiert, mit allen erforderlichen Abhängigkeiten vorverpackt.
  • IronPdf.MacOs: Für macOS-Umgebungen optimiert, mit Unterstützung für native Apple-Silicon.

Hinweis:Für Cloud-Bereitstellungen auf Azure, AWS oder Docker empfiehlt sich die Verwendung von IronPdf.Slim, um die Containergröße zu reduzieren. Die benötigten Komponenten werden beim ersten Einsatz automatisch heruntergeladen.

Überprüfung Ihrer Installation

Nach der Installation überprüfen Sie, ob alles korrekt funktioniert mit diesem einfachen Test, der ein neues Dokument erstellt:

using IronPdf;
using System.IO;

// Test your IronPDF installation
var renderer = new ChromePdfRenderer();
var testPdf = renderer.RenderHtmlAsPdf("<p>Installation test successful!</p>");
testPdf.SaveAs("test.pdf");

if (File.Exists("test.pdf"))
{
    Console.WriteLine("IronPDF installed and working correctly!");
}
using IronPdf;
using System.IO;

// Test your IronPDF installation
var renderer = new ChromePdfRenderer();
var testPdf = renderer.RenderHtmlAsPdf("<p>Installation test successful!</p>");
testPdf.SaveAs("test.pdf");

if (File.Exists("test.pdf"))
{
    Console.WriteLine("IronPDF installed and working correctly!");
}
Imports IronPdf
Imports System.IO

' Test your IronPDF installation
Private renderer = New ChromePdfRenderer()
Private testPdf = renderer.RenderHtmlAsPdf("<p>Installation test successful!</p>")
testPdf.SaveAs("test.pdf")

If File.Exists("test.pdf") Then
	Console.WriteLine("IronPDF installed and working correctly!")
End If
$vbLabelText   $csharpLabel

Welche verschiedenen Möglichkeiten gibt es, PDFs in C# zu erzeugen?

IronPDF bietet mehrere Ansätze zur Erstellung von PDF-Dokumenten, die jeweils für unterschiedliche Szenarien und Anforderungen geeignet sind. Das Verständnis dieser Methoden hilft Ihnen, den effizientesten Ansatz für Ihre spezifische Verwendung zu wählen, wenn Sie PDFs in .NET erstellen müssen. Egal, ob Sie PDFs von Grund auf neu erstellen mit HTML-Strings, vorhandene Dateien konvertieren oder Live-Webinhalte erfassen, IronPDF hat als umfassender C# PDF Generator alles abgedeckt. Lass uns jede Methode im Detail mit praktischen Beispielen erkunden, die reale Anwendungen für PDF-Erstellung in C# demonstrieren.

1. PDF aus HTML-String erstellen (am flexibelsten)

PDFs aus HTML-Strings zu erstellen, gibt Ihnen vollständige Kontrolle über den Inhalt und das Styling Ihres endgültigen Dokuments, wenn Sie HTML-Inhalte in das PDF-Format konvertieren müssen. Diese Methode eignet sich perfekt, um dynamische Berichte, Rechnungen oder jedes Dokument zu erstellen, bei dem sich der Inhalt auf Basis von Daten ändert. Sie können HTML-Inhalte mithilfe moderner HTML5- und CSS3-Funktionen, einschließlich Flexbox- und Rasterlayouts, in professionelle PDFs umwandeln. Die Möglichkeit, HTML-Inhalte dynamisch zu konvertieren, macht dies zum vielseitigsten Ansatz für die PDF-Erstellung in C#:

using IronPdf;
using System;
using System.Linq;

var renderer = new ChromePdfRenderer();

// Build dynamic content with data
var customerName = "Acme Corporation";
var orderDate = DateTime.Now;
var items = new[] { 
    new { Name = "Widget Pro", Price = 99.99m },
    new { Name = "Gadget Plus", Price = 149.99m }
};

// Create HTML with embedded data and modern CSS
var html = $@"
    <html>
    <head>
        <style>
            body {{font-family: 'Segoe UI', Arial, sans-serif; 
                margin: 40px;
                color: #333;}}
            .invoice-header {{display: flex;
                justify-content: space-between;
                border-bottom: 2px solid #0066cc;
                padding-bottom: 20px;}}
            .items-table {{width: 100%;
                margin-top: 30px;
                border-collapse: collapse;}}
            .items-table th {{background: #f0f0f0;
                padding: 10px;
                text-align: left;}}
        </style>
    </head>
    <body>
        <div class='invoice-header'>
            <div>
                <h1>Invoice</h1>
                <p>Customer: {customerName}</p>
            </div>
            <div>
                <p>Date: {orderDate:yyyy-MM-dd}</p>
                <p>Invoice #: INV-{orderDate:yyyyMMdd}-001</p>
            </div>
        </div>

        <table class='items-table'>
            <thead>
                <tr>
                    <th>Item</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>";

foreach (var item in items)
{
    html += $@"
                <tr>
                    <td>{item.Name}</td>
                    <td>${item.Price:F2}</td>
                </tr>";
}

html += @"
            </tbody>
        </table>
    </body>
    </html>";

// Generate the PDF document
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"invoice-{orderDate:yyyyMMdd}.pdf");
using IronPdf;
using System;
using System.Linq;

var renderer = new ChromePdfRenderer();

// Build dynamic content with data
var customerName = "Acme Corporation";
var orderDate = DateTime.Now;
var items = new[] { 
    new { Name = "Widget Pro", Price = 99.99m },
    new { Name = "Gadget Plus", Price = 149.99m }
};

// Create HTML with embedded data and modern CSS
var html = $@"
    <html>
    <head>
        <style>
            body {{font-family: 'Segoe UI', Arial, sans-serif; 
                margin: 40px;
                color: #333;}}
            .invoice-header {{display: flex;
                justify-content: space-between;
                border-bottom: 2px solid #0066cc;
                padding-bottom: 20px;}}
            .items-table {{width: 100%;
                margin-top: 30px;
                border-collapse: collapse;}}
            .items-table th {{background: #f0f0f0;
                padding: 10px;
                text-align: left;}}
        </style>
    </head>
    <body>
        <div class='invoice-header'>
            <div>
                <h1>Invoice</h1>
                <p>Customer: {customerName}</p>
            </div>
            <div>
                <p>Date: {orderDate:yyyy-MM-dd}</p>
                <p>Invoice #: INV-{orderDate:yyyyMMdd}-001</p>
            </div>
        </div>

        <table class='items-table'>
            <thead>
                <tr>
                    <th>Item</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>";

foreach (var item in items)
{
    html += $@"
                <tr>
                    <td>{item.Name}</td>
                    <td>${item.Price:F2}</td>
                </tr>";
}

html += @"
            </tbody>
        </table>
    </body>
    </html>";

// Generate the PDF document
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"invoice-{orderDate:yyyyMMdd}.pdf");
Imports IronPdf
Imports System
Imports System.Linq

Dim renderer = New ChromePdfRenderer()

' Build dynamic content with data
Dim customerName = "Acme Corporation"
Dim orderDate = DateTime.Now
Dim items = New() {
    New With {.Name = "Widget Pro", .Price = 99.99D},
    New With {.Name = "Gadget Plus", .Price = 149.99D}
}

' Create HTML with embedded data and modern CSS
Dim html = $"
    <html>
    <head>
        <style>
            body {{font-family: 'Segoe UI', Arial, sans-serif; 
                margin: 40px;
                color: #333;}}
            .invoice-header {{display: flex;
                justify-content: space-between;
                border-bottom: 2px solid #0066cc;
                padding-bottom: 20px;}}
            .items-table {{width: 100%;
                margin-top: 30px;
                border-collapse: collapse;}}
            .items-table th {{background: #f0f0f0;
                padding: 10px;
                text-align: left;}}
        </style>
    </head>
    <body>
        <div class='invoice-header'>
            <div>
                <h1>Invoice</h1>
                <p>Customer: {customerName}</p>
            </div>
            <div>
                <p>Date: {orderDate:yyyy-MM-dd}</p>
                <p>Invoice #: INV-{orderDate:yyyyMMdd}-001</p>
            </div>
        </div>

        <table class='items-table'>
            <thead>
                <tr>
                    <th>Item</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>"

For Each item In items
    html += $"
                <tr>
                    <td>{item.Name}</td>
                    <td>${item.Price:F2}</td>
                </tr>"
Next

html += "
            </tbody>
        </table>
    </body>
    </html>"

' Generate the PDF document
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs($"invoice-{orderDate:yyyyMMdd}.pdf")
$vbLabelText   $csharpLabel

2. PDF aus URL generieren (Web Page Capture)

Gelegentlich müssen Sie bestehende Webseiten in PDF-Dokumente umwandeln – perfekt zum Archivieren, Berichten oder Erstellen von Offline-Versionen von Online-Inhalten. IronPDFs URL-zu-PDF-Konvertierung verwendet eine echte Chromium-Engine, die sicherstellt, dass komplexe JavaScript-lastige Websites korrekt gerendert werden. Diese Methode ist äußerst wertvoll, um Schnappschüsse von Dashboards zu erstellen, Online-Quittungen zu speichern oder webbasierte Berichte zu dokumentieren:

Beispiel einer URL in PDF
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure rendering options for optimal capture
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

// Wait for JavaScript to fully load (important for SPAs)
renderer.RenderingOptions.RenderDelay = 2000; // 2 seconds

// Enable JavaScript execution
renderer.RenderingOptions.EnableJavaScript = true;

// Capture a web page as PDF
var pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard");
pdf.SaveAs("dashboard-capture.pdf");

// For authenticated pages, you can set cookies
var cookieManager = renderer.RenderingOptions.CustomCookies;
cookieManager["session_id"] = "your-session-token";

// Capture authenticated content
var securePdf = renderer.RenderUrlAsPdf("https://app.example.com/private/report");
securePdf.SaveAs("private-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure rendering options for optimal capture
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

// Wait for JavaScript to fully load (important for SPAs)
renderer.RenderingOptions.RenderDelay = 2000; // 2 seconds

// Enable JavaScript execution
renderer.RenderingOptions.EnableJavaScript = true;

// Capture a web page as PDF
var pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard");
pdf.SaveAs("dashboard-capture.pdf");

// For authenticated pages, you can set cookies
var cookieManager = renderer.RenderingOptions.CustomCookies;
cookieManager["session_id"] = "your-session-token";

// Capture authenticated content
var securePdf = renderer.RenderUrlAsPdf("https://app.example.com/private/report");
securePdf.SaveAs("private-report.pdf");
Imports IronPdf

Private renderer = New ChromePdfRenderer()

' Configure rendering options for optimal capture
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25

' Wait for JavaScript to fully load (important for SPAs)
renderer.RenderingOptions.RenderDelay = 2000 ' 2 seconds

' Enable JavaScript execution
renderer.RenderingOptions.EnableJavaScript = True

' Capture a web page as PDF
Dim pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard")
pdf.SaveAs("dashboard-capture.pdf")

' For authenticated pages, you can set cookies
Dim cookieManager = renderer.RenderingOptions.CustomCookies
cookieManager("session_id") = "your-session-token"

' Capture authenticated content
Dim securePdf = renderer.RenderUrlAsPdf("https://app.example.com/private/report")
securePdf.SaveAs("private-report.pdf")
$vbLabelText   $csharpLabel

3 PDF aus HTML-Datei erstellen (Template-basierte Generierung)

Template-basierte PDF-Erstellung ist ideal, wenn Sie komplexe Layouts haben, die Designer separat von Ihrem Anwendungscode pflegen können. Wenn Sie HTML-Vorlagen als Dateien speichern, ermöglichen Sie eine saubere Trennung zwischen Design und Logik. Dieser Ansatz funktioniert besonders gut, um konsistente Dokumente wie Zertifikate, Verträge oder standardisierte Berichte zu erstellen:

HTML-Datei zu PDF
using IronPdf;
using System.IO;
using System;

var renderer = new ChromePdfRenderer();

// Basic file conversion
var pdf = renderer.RenderHtmlFileAsPdf("Templates/certificate-template.html");
pdf.SaveAs("certificate.pdf");

// Advanced: Using templates with asset directories
// Perfect when your HTML references images, CSS, or JavaScript files
var basePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "Assets");
var pdfWithAssets = renderer.RenderHtmlFileAsPdf(
    "Templates/report-template.html", 
    basePath  // IronPDF will resolve relative paths from here
);

// Even better: Template with placeholders
var templateHtml = File.ReadAllText("Templates/contract-template.html");
templateHtml = templateHtml
    .Replace("{{ClientName}}", "Tech Innovations Inc.")
    .Replace("{{ContractDate}}", DateTime.Now.ToString("MMMM dd, yyyy"))
    .Replace("{{ContractValue}}", "$50,000");

var contractPdf = renderer.RenderHtmlAsPdf(templateHtml);
contractPdf.SaveAs("contract-final.pdf");
using IronPdf;
using System.IO;
using System;

var renderer = new ChromePdfRenderer();

// Basic file conversion
var pdf = renderer.RenderHtmlFileAsPdf("Templates/certificate-template.html");
pdf.SaveAs("certificate.pdf");

// Advanced: Using templates with asset directories
// Perfect when your HTML references images, CSS, or JavaScript files
var basePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "Assets");
var pdfWithAssets = renderer.RenderHtmlFileAsPdf(
    "Templates/report-template.html", 
    basePath  // IronPDF will resolve relative paths from here
);

// Even better: Template with placeholders
var templateHtml = File.ReadAllText("Templates/contract-template.html");
templateHtml = templateHtml
    .Replace("{{ClientName}}", "Tech Innovations Inc.")
    .Replace("{{ContractDate}}", DateTime.Now.ToString("MMMM dd, yyyy"))
    .Replace("{{ContractValue}}", "$50,000");

var contractPdf = renderer.RenderHtmlAsPdf(templateHtml);
contractPdf.SaveAs("contract-final.pdf");
Imports IronPdf
Imports System.IO
Imports System

Private renderer = New ChromePdfRenderer()

' Basic file conversion
Private pdf = renderer.RenderHtmlFileAsPdf("Templates/certificate-template.html")
pdf.SaveAs("certificate.pdf")

' Advanced: Using templates with asset directories
' Perfect when your HTML references images, CSS, or JavaScript files
Dim basePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "Assets")
Dim pdfWithAssets = renderer.RenderHtmlFileAsPdf("Templates/report-template.html", basePath)

' Even better: Template with placeholders
Dim templateHtml = File.ReadAllText("Templates/contract-template.html")
templateHtml = templateHtml.Replace("{{ClientName}}", "Tech Innovations Inc.").Replace("{{ContractDate}}", DateTime.Now.ToString("MMMM dd, yyyy")).Replace("{{ContractValue}}", "$50,000")

Dim contractPdf = renderer.RenderHtmlAsPdf(templateHtml)
contractPdf.SaveAs("contract-final.pdf")
$vbLabelText   $csharpLabel

4. Markdown in PDF konvertieren

Markdown hat sich zum Standard für technische Dokumentation, README-Dateien und Content-Management-Systeme entwickelt. IronPDF macht es einfach, Markdown-Inhalte direkt in PDF zu konvertieren, wobei die Formatierung beibehalten wird, während professionelle Dokumente erstellt werden. Diese Funktion ist besonders wertvoll für Organisationen, die ihre Dokumentation im Markdown-Format pflegen - Entwickler können in ihrem bevorzugten Format Dokumentation schreiben, und das System kann automatisch PDFs generieren zur Verteilung an Kunden oder Stakeholder.

using IronPdf;

var renderer = new ChromePdfRenderer();

// Convert Markdown string to PDF
string markdownContent = @"
# Project Documentation

## Overview
This project demonstrates **PDF generation** from _Markdown_ content.

### Features
- Easy conversion
- Preserves formatting
- Supports lists and tables

| Feature | Status |
|---------|--------|
| Markdown Support | |
| Table Rendering | |
| Code Blocks | |

```csharp
// Code blocks are preserved
var pdf = RenderMarkdownAsPdf(markdown);
\`\`\`
";

// Render Markdown as PDF
var pdfFromMarkdown = renderer.RenderMarkdownStringAsPdf(markdownContent);
pdfFromMarkdown.SaveAs("documentation.pdf");

// Convert Markdown file to PDF
var pdfFromFile = renderer.RenderMarkdownFileAsPdf("README.md");
pdfFromFile.SaveAs("readme-pdf.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Convert Markdown string to PDF
string markdownContent = @"
# Project Documentation

## Overview
This project demonstrates **PDF generation** from _Markdown_ content.

### Features
- Easy conversion
- Preserves formatting
- Supports lists and tables

| Feature | Status |
|---------|--------|
| Markdown Support | |
| Table Rendering | |
| Code Blocks | |

```csharp
// Code blocks are preserved
var pdf = RenderMarkdownAsPdf(markdown);
\`\`\`
";

// Render Markdown as PDF
var pdfFromMarkdown = renderer.RenderMarkdownStringAsPdf(markdownContent);
pdfFromMarkdown.SaveAs("documentation.pdf");

// Convert Markdown file to PDF
var pdfFromFile = renderer.RenderMarkdownFileAsPdf("README.md");
pdfFromFile.SaveAs("readme-pdf.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Convert Markdown string to PDF
Dim markdownContent As String = "
# Project Documentation

## Overview
This project demonstrates **PDF generation** from _Markdown_ content.

### Features
- Easy conversion
- Preserves formatting
- Supports lists and tables

| Feature | Status |
|---------|--------|
| Markdown Support | |
| Table Rendering | |
| Code Blocks | |

```csharp
// Code blocks are preserved
var pdf = RenderMarkdownAsPdf(markdown);
\`\`\`
"

' Render Markdown as PDF
Dim pdfFromMarkdown = renderer.RenderMarkdownStringAsPdf(markdownContent)
pdfFromMarkdown.SaveAs("documentation.pdf")

' Convert Markdown file to PDF
Dim pdfFromFile = renderer.RenderMarkdownFileAsPdf("README.md")
pdfFromFile.SaveAs("readme-pdf.pdf")
$vbLabelText   $csharpLabel

Die Markdown-zu-PDF-Konvertierung ist besonders nützlich für Organisationen, die Versionskontrollsysteme wie Git nutzen. Ihr gesamter Dokumentations-Workflow kann automatisiert werden - Entwickler aktualisieren Markdown-Dateien, CI/CD-Pipelines generieren automatisch PDF-Dokumente, und Stakeholder erhalten professionell formatierte Dokumentation ohne manuelle Eingriffe. Diese nahtlose Integration in bestehende Workflows ist der Grund, warum viele Entwicklungsteams IronPDF für ihre Dokumentationsanforderungen wählen.

5. Word-Dokumente (DOCX) in PDF konvertieren

Viele Unternehmen haben bestehende Word-Dokumente, die zur Verteilung oder Archivierung in PDF konvertiert werden müssen. IronPDF bietet eine nahtlose DOCX-zu-PDF-Konvertierung, die die Formatierung, Bilder und selbst komplexe Funktionen wie Seriendruck beibehält. Diese Fähigkeit ist transformativ für Organisationen - Geschäftsanwender können weiterhin in vertrauter Microsoft Word-Umgebung arbeiten, während das System automatisch PDFs generiert für den externen Vertrieb. Die DOCX-zu-PDF-Konvertierungsfunktion überbrückt die Kluft zwischen Geschäftsanwendern, die Word bevorzugen, und der Notwendigkeit von sicheren, nicht editierbaren PDF-Dokumenten.

using IronPDF;
using System.Collections.Generic;

// Simple DOCX to PDF conversion
var docxRenderer = new DocxToPdfRenderer();
var pdfFromDocx = docxRenderer.RenderDocxAsPdf("proposal.docx");
pdfFromDocx.SaveAs("proposal.pdf");

// Advanced: Mail merge functionality for mass document generation
var recipients = new List<Dictionary<string, string>>
{
    new() { ["Name"] = "John Smith", ["Company"] = "Tech Corp", ["Date"] = "March 15, 2024" },
    new() { ["Name"] = "Jane Doe", ["Company"] = "Innovation Inc", ["Date"] = "March 15, 2024" }
};

// Configure mail merge options
var options = new DocxPdfRenderOptions
{
    MailMergeDataSource = recipients,
    MailMergePrintAllInOnePdfDocument = false // Creates separate PDFs
};

// Generate personalized PDFs from template
foreach (var recipient in recipients)
{
    var personalizedPdf = docxRenderer.RenderDocxAsPdf("letter-template.docx", options);
    personalizedPdf.SaveAs($"letter-{recipient["Name"].Replace(" ", "-")}.pdf");
}
using IronPDF;
using System.Collections.Generic;

// Simple DOCX to PDF conversion
var docxRenderer = new DocxToPdfRenderer();
var pdfFromDocx = docxRenderer.RenderDocxAsPdf("proposal.docx");
pdfFromDocx.SaveAs("proposal.pdf");

// Advanced: Mail merge functionality for mass document generation
var recipients = new List<Dictionary<string, string>>
{
    new() { ["Name"] = "John Smith", ["Company"] = "Tech Corp", ["Date"] = "March 15, 2024" },
    new() { ["Name"] = "Jane Doe", ["Company"] = "Innovation Inc", ["Date"] = "March 15, 2024" }
};

// Configure mail merge options
var options = new DocxPdfRenderOptions
{
    MailMergeDataSource = recipients,
    MailMergePrintAllInOnePdfDocument = false // Creates separate PDFs
};

// Generate personalized PDFs from template
foreach (var recipient in recipients)
{
    var personalizedPdf = docxRenderer.RenderDocxAsPdf("letter-template.docx", options);
    personalizedPdf.SaveAs($"letter-{recipient["Name"].Replace(" ", "-")}.pdf");
}
Imports IronPDF
Imports System.Collections.Generic

' Simple DOCX to PDF conversion
Dim docxRenderer As New DocxToPdfRenderer()
Dim pdfFromDocx = docxRenderer.RenderDocxAsPdf("proposal.docx")
pdfFromDocx.SaveAs("proposal.pdf")

' Advanced: Mail merge functionality for mass document generation
Dim recipients As New List(Of Dictionary(Of String, String)) From {
    New Dictionary(Of String, String) From {{"Name", "John Smith"}, {"Company", "Tech Corp"}, {"Date", "March 15, 2024"}},
    New Dictionary(Of String, String) From {{"Name", "Jane Doe"}, {"Company", "Innovation Inc"}, {"Date", "March 15, 2024"}}
}

' Configure mail merge options
Dim options As New DocxPdfRenderOptions With {
    .MailMergeDataSource = recipients,
    .MailMergePrintAllInOnePdfDocument = False ' Creates separate PDFs
}

' Generate personalized PDFs from template
For Each recipient In recipients
    Dim personalizedPdf = docxRenderer.RenderDocxAsPdf("letter-template.docx", options)
    personalizedPdf.SaveAs($"letter-{recipient("Name").Replace(" ", "-")}.pdf")
Next
$vbLabelText   $csharpLabel

Diese DOCX-Konvertierungsfunktion ist unverzichtbar für die Automatisierung von Dokumenten-Workflows innerhalb von Organisationen. Betrachten Sie ein Vertriebsteam, das Angebote in Word erstellt - mit IronPDF können diese Angebote automatisch in PDFs mit Wasserzeichen, Sicherheitseinstellungen und digitalen Signaturen konvertiert werden, die programmgesteuert angewendet werden. Die Seriendruckfunktion ermöglicht die massenhafte Erstellung personalisierter PDF-Dokumente - perfekt, um Tausende von maßgeschneiderten Briefen, Zertifikaten oder Verträgen ohne manuelle Eingriffe zu erstellen. Diese Integrationsfähigkeit ist der Grund, warum IronPDF von Unternehmen weltweit vertraut wird, um ihre Dokumentenautomatisierungsanforderungen zu erfüllen.

6. Bilder in PDF konvertieren

Das Konvertieren von Bildern in PDF ist unerlässlich, um Fotoalben, gescannte Dokumentensammlungen oder bildbasierte Berichte zu erstellen. IronPDF unterstützt alle wichtigen Bildformate und bietet Optionen zur Steuerung von Layout und Qualität:

using IronPDF;
using IronPdf.Imaging; // `Install-Package IronPdf`
using System.IO;

var renderer = new ChromePdfRenderer();

// Convert single image to PDF
var imagePath = "product-photo.jpg";
var imageHtml = @"
    <html>
    <body style='margin: 0; padding: 0;'>
        <img src='{imagePath}' style='width: 100%; height: auto;' />
    </body>
    </html>";

var imagePdf = renderer.RenderHtmlAsPdf(imageHtml, Path.GetDirectoryName(imagePath));
imagePdf.SaveAs("product-catalog-page.pdf");

// Create multi-page PDF from multiple images
var imageFiles = Directory.GetFiles("ProductImages", "*.jpg");
var catalogHtml = "<html><body style='margin: 0;'>";

foreach (var image in imageFiles)
{
    catalogHtml += @"
        <div style='page-break-after: always;'>
            <img src='{Path.GetFileName(image)}' style='width: 100%; height: auto;' />
            <p style='text-align: center;'>{Path.GetFileNameWithoutExtension(image)}</p>
        </div>";
}

catalogHtml += "</body></html>";

var catalogPdf = renderer.RenderHtmlAsPdf(catalogHtml, "ProductImages");
catalogPdf.SaveAs("product-catalog.pdf");
using IronPDF;
using IronPdf.Imaging; // `Install-Package IronPdf`
using System.IO;

var renderer = new ChromePdfRenderer();

// Convert single image to PDF
var imagePath = "product-photo.jpg";
var imageHtml = @"
    <html>
    <body style='margin: 0; padding: 0;'>
        <img src='{imagePath}' style='width: 100%; height: auto;' />
    </body>
    </html>";

var imagePdf = renderer.RenderHtmlAsPdf(imageHtml, Path.GetDirectoryName(imagePath));
imagePdf.SaveAs("product-catalog-page.pdf");

// Create multi-page PDF from multiple images
var imageFiles = Directory.GetFiles("ProductImages", "*.jpg");
var catalogHtml = "<html><body style='margin: 0;'>";

foreach (var image in imageFiles)
{
    catalogHtml += @"
        <div style='page-break-after: always;'>
            <img src='{Path.GetFileName(image)}' style='width: 100%; height: auto;' />
            <p style='text-align: center;'>{Path.GetFileNameWithoutExtension(image)}</p>
        </div>";
}

catalogHtml += "</body></html>";

var catalogPdf = renderer.RenderHtmlAsPdf(catalogHtml, "ProductImages");
catalogPdf.SaveAs("product-catalog.pdf");
Imports IronPDF
Imports IronPdf.Imaging ' `Install-Package IronPdf`
Imports System.IO

Dim renderer As New ChromePdfRenderer()

' Convert single image to PDF
Dim imagePath As String = "product-photo.jpg"
Dim imageHtml As String = "
    <html>
    <body style='margin: 0; padding: 0;'>
        <img src='" & imagePath & "' style='width: 100%; height: auto;' />
    </body>
    </html>"

Dim imagePdf = renderer.RenderHtmlAsPdf(imageHtml, Path.GetDirectoryName(imagePath))
imagePdf.SaveAs("product-catalog-page.pdf")

' Create multi-page PDF from multiple images
Dim imageFiles = Directory.GetFiles("ProductImages", "*.jpg")
Dim catalogHtml As String = "<html><body style='margin: 0;'>"

For Each image In imageFiles
    catalogHtml &= "
        <div style='page-break-after: always;'>
            <img src='" & Path.GetFileName(image) & "' style='width: 100%; height: auto;' />
            <p style='text-align: center;'>" & Path.GetFileNameWithoutExtension(image) & "</p>
        </div>"
Next

catalogHtml &= "</body></html>"

Dim catalogPdf = renderer.RenderHtmlAsPdf(catalogHtml, "ProductImages")
catalogPdf.SaveAs("product-catalog.pdf")
$vbLabelText   $csharpLabel

7. PDF aus ASP.NET-Seiten erzeugen

Für Webanwendungen bietet das Erstellen von PDFs aus Ihren bestehenden Ansichten eine nahtlose Möglichkeit, herunterladbare Versionen von Webinhalten zu erstellen. Diese Integrationsfähigkeit ist entscheidend für Unternehmen, die PDFs aus ihren Webanwendungen erstellen müssen – ob es sich um Kundenportale handelt, die Kontoauszüge erzeugen, Admin-Dashboards, die Berichte erstellen, oder E-Learning-Plattformen, die Zertifikate erstellen. IronPDF arbeitet mit allen ASP.NET Technologien einschließlich MVC, Razor Pages und Blazor, was es zur perfekten Wahl für Organisationen macht, die bereits in das Microsoft-Ökosystem investiert haben:

// Namespace: Microsoft.AspNetCore.Mvc
using Microsoft.AspNetCore.Mvc;
// Namespace: IronPDF
using IronPDF;
// Namespace: System.Threading.Tasks
using System.Threading.Tasks;
// Namespace: System.IO
using System.IO;
// Namespace: System
using System;

// ASP.NET Core MVC Controller
public class ReportController : Controller
{
    private readonly ChromePdfRenderer _pdfRenderer;

    public ReportController()
    {
        _pdfRenderer = new ChromePdfRenderer();
    }

    public async Task<IActionResult> DownloadReport(int reportId)
    {
        // Get your report data
        var reportData = await GetReportData(reportId);

        // Render view to HTML string
        var html = await RenderViewToStringAsync("Reports/MonthlyReport", reportData);

        // Convert HTML content to PDF
        var pdf = _pdfRenderer.RenderHtmlAsPdf(html);

        // Return as file download
        return File(
            pdf.BinaryData,
            "application/pdf",
            $"report-{reportId}-{DateTime.Now:yyyy-MM}.pdf"
        );
    }

    private async Task<string> RenderViewToStringAsync(string viewName, object model)
    {
        ViewData.Model = model;
        using var sw = new StringWriter();
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(
            ControllerContext,
            viewResult.View,
            ViewData,
            TempData,
            sw,
            new HtmlHelperOptions()
        );
        viewResult.View.Render(viewContext, sw);
        return sw.GetStringBuilder().ToString();
    }
}
// Namespace: Microsoft.AspNetCore.Mvc
using Microsoft.AspNetCore.Mvc;
// Namespace: IronPDF
using IronPDF;
// Namespace: System.Threading.Tasks
using System.Threading.Tasks;
// Namespace: System.IO
using System.IO;
// Namespace: System
using System;

// ASP.NET Core MVC Controller
public class ReportController : Controller
{
    private readonly ChromePdfRenderer _pdfRenderer;

    public ReportController()
    {
        _pdfRenderer = new ChromePdfRenderer();
    }

    public async Task<IActionResult> DownloadReport(int reportId)
    {
        // Get your report data
        var reportData = await GetReportData(reportId);

        // Render view to HTML string
        var html = await RenderViewToStringAsync("Reports/MonthlyReport", reportData);

        // Convert HTML content to PDF
        var pdf = _pdfRenderer.RenderHtmlAsPdf(html);

        // Return as file download
        return File(
            pdf.BinaryData,
            "application/pdf",
            $"report-{reportId}-{DateTime.Now:yyyy-MM}.pdf"
        );
    }

    private async Task<string> RenderViewToStringAsync(string viewName, object model)
    {
        ViewData.Model = model;
        using var sw = new StringWriter();
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(
            ControllerContext,
            viewResult.View,
            ViewData,
            TempData,
            sw,
            new HtmlHelperOptions()
        );
        viewResult.View.Render(viewContext, sw);
        return sw.GetStringBuilder().ToString();
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports IronPDF
Imports System.Threading.Tasks
Imports System.IO
Imports System

Public Class ReportController
    Inherits Controller

    Private ReadOnly _pdfRenderer As ChromePdfRenderer

    Public Sub New()
        _pdfRenderer = New ChromePdfRenderer()
    End Sub

    Public Async Function DownloadReport(reportId As Integer) As Task(Of IActionResult)
        ' Get your report data
        Dim reportData = Await GetReportData(reportId)

        ' Render view to HTML string
        Dim html = Await RenderViewToStringAsync("Reports/MonthlyReport", reportData)

        ' Convert HTML content to PDF
        Dim pdf = _pdfRenderer.RenderHtmlAsPdf(html)

        ' Return as file download
        Return File(pdf.BinaryData, "application/pdf", $"report-{reportId}-{DateTime.Now:yyyy-MM}.pdf")
    End Function

    Private Async Function RenderViewToStringAsync(viewName As String, model As Object) As Task(Of String)
        ViewData.Model = model
        Using sw As New StringWriter()
            Dim viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName)
            Dim viewContext = New ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw, New HtmlHelperOptions())
            viewResult.View.Render(viewContext, sw)
            Return sw.GetStringBuilder().ToString()
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Wie kann ich meine PDFs professionell aussehen lassen?

PDFs zu erstellen ist eine Sache - sie professionell aussehen zu lassen, ist es, was Ihre Anwendung auszeichnet, wenn Sie PDFs in .NET erstellen. Professionelle PDF-Dokumente erfordern Aufmerksamkeit auf Details in Layout, Typografie und Konsistenz der Markendarstellung, um den richtigen Eindruck zu hinterlassen. Mit IronPDFs umfassenden Styling-Optionen und fortgeschrittenen PDF-Funktionen können Sie Dokumente erstellen, die perfekt zu Ihrer Unternehmensidentität passen, mit diesem leistungsstarken C# PDF Generator. Die HTML-zu-PDF-Konvertierungsfähigkeiten stellen sicher, dass Ihre gestalteten Dokumente ihre visuelle Attraktivität beibehalten, wenn sie als PDFs produziert werden. Lassen Sie uns die Funktionen erkunden, die grundlegende PDFs in polierte, professionelle Dokumente verwandeln, die bei Kunden und Stakeholdern einen Eindruck hinterlassen.

Kopfzeilen, Fußzeilen und Seitenzahlen

Professionelle Dokumente benötigen konsistente Kopf- und Fußzeilen, die Kontext und Navigation bieten. IronPDF bietet sowohl einfache textbasierte als auch komplexe HTML-basierte Optionen für Kopf- und Fußzeilen. Diese Flexibilität ist der Grund, warum Organisationen IronPDF wählen, wenn sie auf großer Skala Marken-PDF-Dokumente erstellen müssen. Sie können dynamische Inhalte wie Seitennummern, Daten und Dokumenttitel einfügen - was sicherstellt, dass alle erstellten PDFs professionelle Standards erfüllen:

using IronPDF;
using System;

var renderer = new ChromePdfRenderer();

// Simple text header and footer with page numbers
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    Text = "Confidential Report - {date}",
    DrawDividerLine = true,
    Font = "Arial",
    FontSize = 12
};

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    Text = "Page {page} of {total-pages}",
    DrawDividerLine = true,
    Font = "Arial",
    FontSize = 10,
    CenterText = true
};

// HTML headers for complex layouts with logos
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    Html = @"
        <div style='display: flex; justify-content: space-between; align-items: center; padding: 10px 40px;'>
            <img src='logo.png' style='height: 40px;' />
            <div style='text-align: center;'>
                <h2 style='margin: 0; color: #333;'>Annual Report 2024</h2>
                <p style='margin: 0; font-size: 12px; color: #666;'>Confidential</p>
            </div>
            <div style='text-align: right; font-size: 11px; color: #666;'>
                Generated: {date}<br/>
                Department: Finance
            </div>
        </div>",
    Height = 80,
    LoadStylesAndCSSFromMainHtmlDocument = true
};

// Create your PDF with professional headers/footers
var html = @"<h1>Financial Overview</h1><p>Report content here...</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("professional-report.pdf");
using IronPDF;
using System;

var renderer = new ChromePdfRenderer();

// Simple text header and footer with page numbers
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    Text = "Confidential Report - {date}",
    DrawDividerLine = true,
    Font = "Arial",
    FontSize = 12
};

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    Text = "Page {page} of {total-pages}",
    DrawDividerLine = true,
    Font = "Arial",
    FontSize = 10,
    CenterText = true
};

// HTML headers for complex layouts with logos
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    Html = @"
        <div style='display: flex; justify-content: space-between; align-items: center; padding: 10px 40px;'>
            <img src='logo.png' style='height: 40px;' />
            <div style='text-align: center;'>
                <h2 style='margin: 0; color: #333;'>Annual Report 2024</h2>
                <p style='margin: 0; font-size: 12px; color: #666;'>Confidential</p>
            </div>
            <div style='text-align: right; font-size: 11px; color: #666;'>
                Generated: {date}<br/>
                Department: Finance
            </div>
        </div>",
    Height = 80,
    LoadStylesAndCSSFromMainHtmlDocument = true
};

// Create your PDF with professional headers/footers
var html = @"<h1>Financial Overview</h1><p>Report content here...</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("professional-report.pdf");
Imports IronPDF
Imports System

Dim renderer As New ChromePdfRenderer()

' Simple text header and footer with page numbers
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .Text = "Confidential Report - {date}",
    .DrawDividerLine = True,
    .Font = "Arial",
    .FontSize = 12
}

renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .Text = "Page {page} of {total-pages}",
    .DrawDividerLine = True,
    .Font = "Arial",
    .FontSize = 10,
    .CenterText = True
}

' HTML headers for complex layouts with logos
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .Html = "
        <div style='display: flex; justify-content: space-between; align-items: center; padding: 10px 40px;'>
            <img src='logo.png' style='height: 40px;' />
            <div style='text-align: center;'>
                <h2 style='margin: 0; color: #333;'>Annual Report 2024</h2>
                <p style='margin: 0; font-size: 12px; color: #666;'>Confidential</p>
            </div>
            <div style='text-align: right; font-size: 11px; color: #666;'>
                Generated: {date}<br/>
                Department: Finance
            </div>
        </div>",
    .Height = 80,
    .LoadStylesAndCSSFromMainHtmlDocument = True
}

' Create your PDF with professional headers/footers
Dim html As String = "<h1>Financial Overview</h1><p>Report content here...</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("professional-report.pdf")
$vbLabelText   $csharpLabel

Diese Kopf- und Fußzeilenoptionen ermöglichen es Organisationen, die Konsistenz der Marke über alle erstellten PDFs hinweg aufrechtzuerhalten. Ganz gleich, ob Sie Finanzberichte oder technische Dokumentationen erstellen, professionelle Kopf- und Fußzeilen stellen sicher, dass Ihre Dokumente den Unternehmensstandards entsprechen.

Erweiterte Seiteneinrichtung und Layout-Steuerung

Kontrolle über das Seitenlayout ist entscheidend für die Erstellung von Dokumenten, die richtig gedruckt werden und auf allen Geräten professionell aussehen. IronPDF bietet umfassende Optionen für die Seiteneinrichtung, einschließlich benutzerdefinierter Größen, Ausrichtungen und Ränder:

var renderer = new ChromePdfRenderer();

// Configure page setup for professional printing
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

// Set margins in millimeters for precise control
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Enable background colors and images (important for branding)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;

// Use screen media type for vibrant colors
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;

// Custom page size for special documents
renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297); // A4

// Enable high-quality rendering
renderer.RenderingOptions.RenderQuality = 100; // 0-100 scale
var renderer = new ChromePdfRenderer();

// Configure page setup for professional printing
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

// Set margins in millimeters for precise control
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Enable background colors and images (important for branding)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;

// Use screen media type for vibrant colors
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;

// Custom page size for special documents
renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297); // A4

// Enable high-quality rendering
renderer.RenderingOptions.RenderQuality = 100; // 0-100 scale
Dim renderer = New ChromePdfRenderer()

' Configure page setup for professional printing
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait

' Set margins in millimeters for precise control
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20

' Enable background colors and images (important for branding)
renderer.RenderingOptions.PrintHtmlBackgrounds = True

' Use screen media type for vibrant colors
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen

' Custom page size for special documents
renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297) ' A4

' Enable high-quality rendering
renderer.RenderingOptions.RenderQuality = 100 ' 0-100 scale
$vbLabelText   $csharpLabel

Arbeiten mit Schriftarten und Typografie

Typografie spielt eine entscheidende Rolle bei der Professionalisierung von Dokumenten. IronPDF unterstützt Webfonts, benutzerdefinierte Fonts und erweiterte Typografiefunktionen:

var renderer = new ChromePdfRenderer();

// HTML with custom fonts and typography
var html = @"
    <html>
    <head>
        <link href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap' rel='stylesheet'>
        <style>
            @font-face {
                font-family: 'CustomBrand';
                src: url('BrandFont.ttf') format('truetype');
            }

            body {
                font-family: 'Roboto', Arial, sans-serif;
                font-size: 11pt;
                line-height: 1.6;
                color: #333;
            }

            h1 {
                font-family: 'CustomBrand', Georgia, serif;
                font-size: 28pt;
                color: #0066cc;
                letter-spacing: -0.5px;
            }

            .quote {
                font-style: italic;
                font-size: 14pt;
                color: #666;
                border-left: 4px solid #0066cc;
                padding-left: 20px;
                margin: 20px 0;
            }
        </style>
    </head>
    <body>
        <h1>Professional Document</h1>
        <p>This document demonstrates professional typography.</p>
        <div class='quote'>
            "Excellence in typography enhances readability and professionalism."
        </div>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(html, "Assets/Fonts");
pdf.SaveAs("typography-demo.pdf");
var renderer = new ChromePdfRenderer();

// HTML with custom fonts and typography
var html = @"
    <html>
    <head>
        <link href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap' rel='stylesheet'>
        <style>
            @font-face {
                font-family: 'CustomBrand';
                src: url('BrandFont.ttf') format('truetype');
            }

            body {
                font-family: 'Roboto', Arial, sans-serif;
                font-size: 11pt;
                line-height: 1.6;
                color: #333;
            }

            h1 {
                font-family: 'CustomBrand', Georgia, serif;
                font-size: 28pt;
                color: #0066cc;
                letter-spacing: -0.5px;
            }

            .quote {
                font-style: italic;
                font-size: 14pt;
                color: #666;
                border-left: 4px solid #0066cc;
                padding-left: 20px;
                margin: 20px 0;
            }
        </style>
    </head>
    <body>
        <h1>Professional Document</h1>
        <p>This document demonstrates professional typography.</p>
        <div class='quote'>
            "Excellence in typography enhances readability and professionalism."
        </div>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(html, "Assets/Fonts");
pdf.SaveAs("typography-demo.pdf");
Dim renderer = New ChromePdfRenderer()

' HTML with custom fonts and typography
Dim html = "
    <html>
    <head>
        <link href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap' rel='stylesheet'>
        <style>
            @font-face {
                font-family: 'CustomBrand';
                src: url('BrandFont.ttf') format('truetype');
            }

            body {
                font-family: 'Roboto', Arial, sans-serif;
                font-size: 11pt;
                line-height: 1.6;
                color: #333;
            }

            h1 {
                font-family: 'CustomBrand', Georgia, serif;
                font-size: 28pt;
                color: #0066cc;
                letter-spacing: -0.5px;
            }

            .quote {
                font-style: italic;
                font-size: 14pt;
                color: #666;
                border-left: 4px solid #0066cc;
                padding-left: 20px;
                margin: 20px 0;
            }
        </style>
    </head>
    <body>
        <h1>Professional Document</h1>
        <p>This document demonstrates professional typography.</p>
        <div class='quote'>
            "Excellence in typography enhances readability [and] professionalism." </div> </body> </html>"

Dim pdf = renderer.RenderHtmlAsPdf(html, "Assets/Fonts")
pdf.SaveAs("typography-demo.pdf")
$vbLabelText   $csharpLabel

Real-World Beispiel: Wie generiere ich eine PDF-Rechnung?

Lassen Sie uns einen vollständigen, produktionsbereiten Rechnungsgenerator erstellen, der Best Practices für die Erstellung von PDF-Dokumenten in realen Anwendungen demonstriert. Dieses Beispiel zeigt, warum Tausende von Unternehmen IronPDF als ihren C# PDF Generator für Rechnungserstellungsanforderungen wählen - es kombiniert Datenbindung, professionelles Styling und eine angemessene Dokumentstruktur auf eine Weise, die sowohl leistungsstark als auch wartbar ist. Ähnliche Implementierungen werden von E-Commerce-Plattformen verwendet,um monatlich Millionen von Rechnungen zu erstellen, was die Skalierbarkeit der programmgesteuerten PDF-Erstellung in .NET demonstriert. Sie können diesen Code für Ihre eigenen Aufgaben der PDF-Erstellung anpassen:

using IronPDF;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;

public class InvoiceGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public InvoiceGenerator()
    {
        _renderer = new ChromePdfRenderer();
        ConfigureRenderer();
    }

    private void ConfigureRenderer()
    {
        // Professional page setup
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        _renderer.RenderingOptions.MarginTop = 25;
        _renderer.RenderingOptions.MarginBottom = 25;
        _renderer.RenderingOptions.MarginLeft = 25;
        _renderer.RenderingOptions.MarginRight = 25;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;

        // Add footer with page numbers
        _renderer.RenderingOptions.TextFooter = new TextHeaderFooter
        {
            Text = "Page {page} of {total-pages} | Invoice generated on {date}",
            FontSize = 9,
            Font = "Arial",
            CenterText = true
        };
    }

    public void CreateInvoice(Invoice invoice)
    {
        var html = GenerateInvoiceHtml(invoice);
        var pdf = _renderer.RenderHtmlAsPdf(html);

        // Add metadata to the final document
        pdf.MetaData.Title = $"Invoice {invoice.Number}";
        pdf.MetaData.Author = "Your Company Name";
        pdf.MetaData.Subject = $"Invoice for {invoice.CustomerName}";
        pdf.MetaData.Keywords = "invoice, billing, payment";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Save the PDF document
        var fileName = $"Invoice-{invoice.Number}.pdf";
        pdf.SaveAs(fileName);

        Console.WriteLine($"PDF generated successfully: {fileName}");
    }

    private string GenerateInvoiceHtml(Invoice invoice)
    {
        var itemsHtml = string.Join("", invoice.Items.Select(item => @"
            <tr>
                <td style='padding: 12px; border-bottom: 1px solid #eee;'>{item.Description}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: center;'>{item.Quantity}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.UnitPrice:F2}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.Total:F2}</td>
            </tr>"));

        return @"
            <html>
            <head>
                <style>
                    * {{box-sizing: border-box;}}
                    body {{font-family: 'Segoe UI', Arial, sans-serif; 
                        line-height: 1.6;
                        color: #333;
                        margin: 0;
                        padding: 0;}}
                    .invoice-container {{max-width: 800px;
                        margin: 0 auto;
                        padding: 40px;}}
                    .invoice-header {{display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;
                        padding-bottom: 20px;
                        border-bottom: 3px solid #0066cc;}}
                    .company-details {{flex: 1;}}
                    .company-details h1 {{color: #0066cc;
                        margin: 0 0 10px 0;
                        font-size: 28px;}}
                    .invoice-details {{flex: 1;
                        text-align: right;}}
                    .invoice-details h2 {{margin: 0 0 10px 0;
                        color: #666;
                        font-size: 24px;}}
                    .invoice-number {{font-size: 18px;
                        color: #0066cc;
                        font-weight: bold;}}
                    .billing-section {{display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;}}
                    .billing-box {{flex: 1;
                        padding: 20px;
                        background: #f8f9fa;
                        border-radius: 8px;
                        margin-right: 20px;}}
                    .billing-box:last-child {{margin-right: 0;}}
                    .billing-box h3 {{margin: 0 0 15px 0;
                        color: #0066cc;
                        font-size: 16px;
                        text-transform: uppercase;
                        letter-spacing: 1px;}}
                    .items-table {{width: 100%;
                        border-collapse: collapse;
                        margin-bottom: 40px;}}
                    .items-table th {{background: #0066cc;
                        color: white;
                        padding: 12px;
                        text-align: left;
                        font-weight: 600;}}
                    .items-table th:last-child {{text-align: right;}}
                    .totals-section {{display: flex;
                        justify-content: flex-end;
                        margin-bottom: 40px;}}
                    .totals-box {{width: 300px;}}
                    .total-row {{display: flex;
                        justify-content: space-between;
                        padding: 8px 0;
                        border-bottom: 1px solid #eee;}}
                    .total-row.final {{border-bottom: none;
                        border-top: 2px solid #0066cc;
                        margin-top: 10px;
                        padding-top: 15px;
                        font-size: 20px;
                        font-weight: bold;
                        color: #0066cc;}}
                    .payment-terms {{background: #f8f9fa;
                        padding: 20px;
                        border-radius: 8px;
                        margin-bottom: 30px;}}
                    .payment-terms h3 {{margin: 0 0 10px 0;
                        color: #0066cc;}}
                    .footer-note {{text-align: center;
                        color: #666;
                        font-size: 14px;
                        margin-top: 40px;
                        padding-top: 20px;
                        border-top: 1px solid #eee;}}
                </style>
            </head>
            <body>
                <div class='invoice-container'>
                    <div class='invoice-header'>
                        <div class='company-details'>
                            <h1>{invoice.CompanyName}</h1>
                            <p>{invoice.CompanyAddress}<br>
                            {invoice.CompanyCity}, {invoice.CompanyState} {invoice.CompanyZip}<br>
                            Phone: {invoice.CompanyPhone}<br>
                            Email: {invoice.CompanyEmail}</p>
                        </div>
                        <div class='invoice-details'>
                            <h2>INVOICE</h2>
                            <p class='invoice-number'>#{invoice.Number}</p>
                            <p><strong>Date:</strong> {invoice.Date:MMMM dd, yyyy}<br>
                            <strong>Due Date:</strong> {invoice.DueDate:MMMM dd, yyyy}</p>
                        </div>
                    </div>

                    <div class='billing-section'>
                        <div class='billing-box'>
                            <h3>Bill To</h3>
                            <p><strong>{invoice.CustomerName}</strong><br>
                            {invoice.CustomerAddress}<br>
                            {invoice.CustomerCity}, {invoice.CustomerState} {invoice.CustomerZip}<br>
                            {invoice.CustomerEmail}</p>
                        </div>
                        <div class='billing-box'>
                            <h3>Payment Information</h3>
                            <p><strong>Payment Terms:</strong> {invoice.PaymentTerms}<br>
                            <strong>Invoice Status:</strong> <span style='color: #ff6b6b;'>Unpaid</span><br>
                            <strong>Amount Due:</strong> ${invoice.Total:F2}</p>
                        </div>
                    </div>

                    <table class='items-table'>
                        <thead>
                            <tr>
                                <th>Description</th>
                                <th style='text-align: center;'>Quantity</th>
                                <th style='text-align: right;'>Unit Price</th>
                                <th style='text-align: right;'>Total</th>
                            </tr>
                        </thead>
                        <tbody>
                            {itemsHtml}
                        </tbody>
                    </table>

                    <div class='totals-section'>
                        <div class='totals-box'>
                            <div class='total-row'>
                                <span>Subtotal:</span>
                                <span>${invoice.Subtotal:F2}</span>
                            </div>
                            <div class='total-row'>
                                <span>Tax ({invoice.TaxRate:F0}%):</span>
                                <span>${invoice.Tax:F2}</span>
                            </div>
                            <div class='total-row final'>
                                <span>Total Due:</span>
                                <span>${invoice.Total:F2}</span>
                            </div>
                        </div>
                    </div>

                    <div class='payment-terms'>
                        <h3>Payment Terms & Conditions</h3>
                        <p>Payment is due within {invoice.PaymentTerms}. Late payments are subject to a 1.5% monthly service charge.
                        Please make checks payable to {invoice.CompanyName} or pay online at {invoice.CompanyWebsite}.</p>
                    </div>

                    <div class='footer-note'>
                        <p>Thank you for your business! This invoice was generated automatically using our C# PDF generation system.</p>
                        <p>Questions? Contact us at {invoice.CompanyEmail} or {invoice.CompanyPhone}</p>
                    </div>
                </div>
            </body>
            </html>";
    }
}

// Invoice model classes
public class Invoice
{
    public string Number { get; set; }
    public DateTime Date { get; set; }
    public DateTime DueDate { get; set; }
    public string CompanyName { get; set; }
    public string CompanyAddress { get; set; }
    public string CompanyCity { get; set; }
    public string CompanyState { get; set; }
    public string CompanyZip { get; set; }
    public string CompanyPhone { get; set; }
    public string CompanyEmail { get; set; }
    public string CompanyWebsite { get; set; }
    public string CustomerName { get; set; }
    public string CustomerAddress { get; set; }
    public string CustomerCity { get; set; }
    public string CustomerState { get; set; }
    public string CustomerZip { get; set; }
    public string CustomerEmail { get; set; }
    public string PaymentTerms { get; set; }
    public List<InvoiceItem> Items { get; set; }
    public decimal Subtotal => Items.Sum(i => i.Total);
    public decimal TaxRate { get; set; }
    public decimal Tax => Subtotal * (TaxRate / 100);
    public decimal Total => Subtotal + Tax;
}

public class InvoiceItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal Total => Quantity * UnitPrice;
}

// Usage example
var generator = new InvoiceGenerator();
var invoice = new Invoice
{
    Number = "INV-2024-001",
    Date = DateTime.Now,
    DueDate = DateTime.Now.AddDays(30),
    CompanyName = "Your Company Name",
    CompanyAddress = "123 Business Street",
    CompanyCity = "New York",
    CompanyState = "NY",
    CompanyZip = "10001",
    CompanyPhone = "(555) 123-4567",
    CompanyEmail = "billing@yourcompany.com",
    CompanyWebsite = "www.yourcompany.com",
    CustomerName = "Acme Corporation",
    CustomerAddress = "456 Client Avenue",
    CustomerCity = "Los Angeles",
    CustomerState = "CA",
    CustomerZip = "90001",
    CustomerEmail = "accounts@acmecorp.com",
    PaymentTerms = "Net 30",
    TaxRate = 8.5m,
    Items = new List<InvoiceItem>
    {
        new() { Description = "Professional Services - March 2024", Quantity = 40, UnitPrice = 125.00m },
        new() { Description = "Software License (Annual)", Quantity = 1, UnitPrice = 2400.00m },
        new() { Description = "Technical Support", Quantity = 10, UnitPrice = 150.00m }
    }
};

generator.CreateInvoice(invoice);
using IronPDF;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;

public class InvoiceGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public InvoiceGenerator()
    {
        _renderer = new ChromePdfRenderer();
        ConfigureRenderer();
    }

    private void ConfigureRenderer()
    {
        // Professional page setup
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        _renderer.RenderingOptions.MarginTop = 25;
        _renderer.RenderingOptions.MarginBottom = 25;
        _renderer.RenderingOptions.MarginLeft = 25;
        _renderer.RenderingOptions.MarginRight = 25;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;

        // Add footer with page numbers
        _renderer.RenderingOptions.TextFooter = new TextHeaderFooter
        {
            Text = "Page {page} of {total-pages} | Invoice generated on {date}",
            FontSize = 9,
            Font = "Arial",
            CenterText = true
        };
    }

    public void CreateInvoice(Invoice invoice)
    {
        var html = GenerateInvoiceHtml(invoice);
        var pdf = _renderer.RenderHtmlAsPdf(html);

        // Add metadata to the final document
        pdf.MetaData.Title = $"Invoice {invoice.Number}";
        pdf.MetaData.Author = "Your Company Name";
        pdf.MetaData.Subject = $"Invoice for {invoice.CustomerName}";
        pdf.MetaData.Keywords = "invoice, billing, payment";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Save the PDF document
        var fileName = $"Invoice-{invoice.Number}.pdf";
        pdf.SaveAs(fileName);

        Console.WriteLine($"PDF generated successfully: {fileName}");
    }

    private string GenerateInvoiceHtml(Invoice invoice)
    {
        var itemsHtml = string.Join("", invoice.Items.Select(item => @"
            <tr>
                <td style='padding: 12px; border-bottom: 1px solid #eee;'>{item.Description}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: center;'>{item.Quantity}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.UnitPrice:F2}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.Total:F2}</td>
            </tr>"));

        return @"
            <html>
            <head>
                <style>
                    * {{box-sizing: border-box;}}
                    body {{font-family: 'Segoe UI', Arial, sans-serif; 
                        line-height: 1.6;
                        color: #333;
                        margin: 0;
                        padding: 0;}}
                    .invoice-container {{max-width: 800px;
                        margin: 0 auto;
                        padding: 40px;}}
                    .invoice-header {{display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;
                        padding-bottom: 20px;
                        border-bottom: 3px solid #0066cc;}}
                    .company-details {{flex: 1;}}
                    .company-details h1 {{color: #0066cc;
                        margin: 0 0 10px 0;
                        font-size: 28px;}}
                    .invoice-details {{flex: 1;
                        text-align: right;}}
                    .invoice-details h2 {{margin: 0 0 10px 0;
                        color: #666;
                        font-size: 24px;}}
                    .invoice-number {{font-size: 18px;
                        color: #0066cc;
                        font-weight: bold;}}
                    .billing-section {{display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;}}
                    .billing-box {{flex: 1;
                        padding: 20px;
                        background: #f8f9fa;
                        border-radius: 8px;
                        margin-right: 20px;}}
                    .billing-box:last-child {{margin-right: 0;}}
                    .billing-box h3 {{margin: 0 0 15px 0;
                        color: #0066cc;
                        font-size: 16px;
                        text-transform: uppercase;
                        letter-spacing: 1px;}}
                    .items-table {{width: 100%;
                        border-collapse: collapse;
                        margin-bottom: 40px;}}
                    .items-table th {{background: #0066cc;
                        color: white;
                        padding: 12px;
                        text-align: left;
                        font-weight: 600;}}
                    .items-table th:last-child {{text-align: right;}}
                    .totals-section {{display: flex;
                        justify-content: flex-end;
                        margin-bottom: 40px;}}
                    .totals-box {{width: 300px;}}
                    .total-row {{display: flex;
                        justify-content: space-between;
                        padding: 8px 0;
                        border-bottom: 1px solid #eee;}}
                    .total-row.final {{border-bottom: none;
                        border-top: 2px solid #0066cc;
                        margin-top: 10px;
                        padding-top: 15px;
                        font-size: 20px;
                        font-weight: bold;
                        color: #0066cc;}}
                    .payment-terms {{background: #f8f9fa;
                        padding: 20px;
                        border-radius: 8px;
                        margin-bottom: 30px;}}
                    .payment-terms h3 {{margin: 0 0 10px 0;
                        color: #0066cc;}}
                    .footer-note {{text-align: center;
                        color: #666;
                        font-size: 14px;
                        margin-top: 40px;
                        padding-top: 20px;
                        border-top: 1px solid #eee;}}
                </style>
            </head>
            <body>
                <div class='invoice-container'>
                    <div class='invoice-header'>
                        <div class='company-details'>
                            <h1>{invoice.CompanyName}</h1>
                            <p>{invoice.CompanyAddress}<br>
                            {invoice.CompanyCity}, {invoice.CompanyState} {invoice.CompanyZip}<br>
                            Phone: {invoice.CompanyPhone}<br>
                            Email: {invoice.CompanyEmail}</p>
                        </div>
                        <div class='invoice-details'>
                            <h2>INVOICE</h2>
                            <p class='invoice-number'>#{invoice.Number}</p>
                            <p><strong>Date:</strong> {invoice.Date:MMMM dd, yyyy}<br>
                            <strong>Due Date:</strong> {invoice.DueDate:MMMM dd, yyyy}</p>
                        </div>
                    </div>

                    <div class='billing-section'>
                        <div class='billing-box'>
                            <h3>Bill To</h3>
                            <p><strong>{invoice.CustomerName}</strong><br>
                            {invoice.CustomerAddress}<br>
                            {invoice.CustomerCity}, {invoice.CustomerState} {invoice.CustomerZip}<br>
                            {invoice.CustomerEmail}</p>
                        </div>
                        <div class='billing-box'>
                            <h3>Payment Information</h3>
                            <p><strong>Payment Terms:</strong> {invoice.PaymentTerms}<br>
                            <strong>Invoice Status:</strong> <span style='color: #ff6b6b;'>Unpaid</span><br>
                            <strong>Amount Due:</strong> ${invoice.Total:F2}</p>
                        </div>
                    </div>

                    <table class='items-table'>
                        <thead>
                            <tr>
                                <th>Description</th>
                                <th style='text-align: center;'>Quantity</th>
                                <th style='text-align: right;'>Unit Price</th>
                                <th style='text-align: right;'>Total</th>
                            </tr>
                        </thead>
                        <tbody>
                            {itemsHtml}
                        </tbody>
                    </table>

                    <div class='totals-section'>
                        <div class='totals-box'>
                            <div class='total-row'>
                                <span>Subtotal:</span>
                                <span>${invoice.Subtotal:F2}</span>
                            </div>
                            <div class='total-row'>
                                <span>Tax ({invoice.TaxRate:F0}%):</span>
                                <span>${invoice.Tax:F2}</span>
                            </div>
                            <div class='total-row final'>
                                <span>Total Due:</span>
                                <span>${invoice.Total:F2}</span>
                            </div>
                        </div>
                    </div>

                    <div class='payment-terms'>
                        <h3>Payment Terms & Conditions</h3>
                        <p>Payment is due within {invoice.PaymentTerms}. Late payments are subject to a 1.5% monthly service charge.
                        Please make checks payable to {invoice.CompanyName} or pay online at {invoice.CompanyWebsite}.</p>
                    </div>

                    <div class='footer-note'>
                        <p>Thank you for your business! This invoice was generated automatically using our C# PDF generation system.</p>
                        <p>Questions? Contact us at {invoice.CompanyEmail} or {invoice.CompanyPhone}</p>
                    </div>
                </div>
            </body>
            </html>";
    }
}

// Invoice model classes
public class Invoice
{
    public string Number { get; set; }
    public DateTime Date { get; set; }
    public DateTime DueDate { get; set; }
    public string CompanyName { get; set; }
    public string CompanyAddress { get; set; }
    public string CompanyCity { get; set; }
    public string CompanyState { get; set; }
    public string CompanyZip { get; set; }
    public string CompanyPhone { get; set; }
    public string CompanyEmail { get; set; }
    public string CompanyWebsite { get; set; }
    public string CustomerName { get; set; }
    public string CustomerAddress { get; set; }
    public string CustomerCity { get; set; }
    public string CustomerState { get; set; }
    public string CustomerZip { get; set; }
    public string CustomerEmail { get; set; }
    public string PaymentTerms { get; set; }
    public List<InvoiceItem> Items { get; set; }
    public decimal Subtotal => Items.Sum(i => i.Total);
    public decimal TaxRate { get; set; }
    public decimal Tax => Subtotal * (TaxRate / 100);
    public decimal Total => Subtotal + Tax;
}

public class InvoiceItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal Total => Quantity * UnitPrice;
}

// Usage example
var generator = new InvoiceGenerator();
var invoice = new Invoice
{
    Number = "INV-2024-001",
    Date = DateTime.Now,
    DueDate = DateTime.Now.AddDays(30),
    CompanyName = "Your Company Name",
    CompanyAddress = "123 Business Street",
    CompanyCity = "New York",
    CompanyState = "NY",
    CompanyZip = "10001",
    CompanyPhone = "(555) 123-4567",
    CompanyEmail = "billing@yourcompany.com",
    CompanyWebsite = "www.yourcompany.com",
    CustomerName = "Acme Corporation",
    CustomerAddress = "456 Client Avenue",
    CustomerCity = "Los Angeles",
    CustomerState = "CA",
    CustomerZip = "90001",
    CustomerEmail = "accounts@acmecorp.com",
    PaymentTerms = "Net 30",
    TaxRate = 8.5m,
    Items = new List<InvoiceItem>
    {
        new() { Description = "Professional Services - March 2024", Quantity = 40, UnitPrice = 125.00m },
        new() { Description = "Software License (Annual)", Quantity = 1, UnitPrice = 2400.00m },
        new() { Description = "Technical Support", Quantity = 10, UnitPrice = 150.00m }
    }
};

generator.CreateInvoice(invoice);
Imports IronPDF
Imports System
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Linq

Public Class InvoiceGenerator
    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        ConfigureRenderer()
    End Sub

    Private Sub ConfigureRenderer()
        ' Professional page setup
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        _renderer.RenderingOptions.MarginTop = 25
        _renderer.RenderingOptions.MarginBottom = 25
        _renderer.RenderingOptions.MarginLeft = 25
        _renderer.RenderingOptions.MarginRight = 25
        _renderer.RenderingOptions.PrintHtmlBackgrounds = True

        ' Add footer with page numbers
        _renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
            .Text = "Page {page} of {total-pages} | Invoice generated on {date}",
            .FontSize = 9,
            .Font = "Arial",
            .CenterText = True
        }
    End Sub

    Public Sub CreateInvoice(invoice As Invoice)
        Dim html = GenerateInvoiceHtml(invoice)
        Dim pdf = _renderer.RenderHtmlAsPdf(html)

        ' Add metadata to the final document
        pdf.MetaData.Title = $"Invoice {invoice.Number}"
        pdf.MetaData.Author = "Your Company Name"
        pdf.MetaData.Subject = $"Invoice for {invoice.CustomerName}"
        pdf.MetaData.Keywords = "invoice, billing, payment"
        pdf.MetaData.CreationDate = DateTime.Now

        ' Save the PDF document
        Dim fileName = $"Invoice-{invoice.Number}.pdf"
        pdf.SaveAs(fileName)

        Console.WriteLine($"PDF generated successfully: {fileName}")
    End Sub

    Private Function GenerateInvoiceHtml(invoice As Invoice) As String
        Dim itemsHtml = String.Join("", invoice.Items.Select(Function(item) $"
            <tr>
                <td style='padding: 12px; border-bottom: 1px solid #eee;'>{item.Description}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: center;'>{item.Quantity}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.UnitPrice:F2}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.Total:F2}</td>
            </tr>"))

        Return $"
            <html>
            <head>
                <style>
                    * {{box-sizing: border-box;}}
                    body {{font-family: 'Segoe UI', Arial, sans-serif; 
                        line-height: 1.6;
                        color: #333;
                        margin: 0;
                        padding: 0;}}
                    .invoice-container {{max-width: 800px;
                        margin: 0 auto;
                        padding: 40px;}}
                    .invoice-header {{display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;
                        padding-bottom: 20px;
                        border-bottom: 3px solid #0066cc;}}
                    .company-details {{flex: 1;}}
                    .company-details h1 {{color: #0066cc;
                        margin: 0 0 10px 0;
                        font-size: 28px;}}
                    .invoice-details {{flex: 1;
                        text-align: right;}}
                    .invoice-details h2 {{margin: 0 0 10px 0;
                        color: #666;
                        font-size: 24px;}}
                    .invoice-number {{font-size: 18px;
                        color: #0066cc;
                        font-weight: bold;}}
                    .billing-section {{display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;}}
                    .billing-box {{flex: 1;
                        padding: 20px;
                        background: #f8f9fa;
                        border-radius: 8px;
                        margin-right: 20px;}}
                    .billing-box:last-child {{margin-right: 0;}}
                    .billing-box h3 {{margin: 0 0 15px 0;
                        color: #0066cc;
                        font-size: 16px;
                        text-transform: uppercase;
                        letter-spacing: 1px;}}
                    .items-table {{width: 100%;
                        border-collapse: collapse;
                        margin-bottom: 40px;}}
                    .items-table th {{background: #0066cc;
                        color: white;
                        padding: 12px;
                        text-align: left;
                        font-weight: 600;}}
                    .items-table th:last-child {{text-align: right;}}
                    .totals-section {{display: flex;
                        justify-content: flex-end;
                        margin-bottom: 40px;}}
                    .totals-box {{width: 300px;}}
                    .total-row {{display: flex;
                        justify-content: space-between;
                        padding: 8px 0;
                        border-bottom: 1px solid #eee;}}
                    .total-row.final {{border-bottom: none;
                        border-top: 2px solid #0066cc;
                        margin-top: 10px;
                        padding-top: 15px;
                        font-size: 20px;
                        font-weight: bold;
                        color: #0066cc;}}
                    .payment-terms {{background: #f8f9fa;
                        padding: 20px;
                        border-radius: 8px;
                        margin-bottom: 30px;}}
                    .payment-terms h3 {{margin: 0 0 10px 0;
                        color: #0066cc;}}
                    .footer-note {{text-align: center;
                        color: #666;
                        font-size: 14px;
                        margin-top: 40px;
                        padding-top: 20px;
                        border-top: 1px solid #eee;}}
                </style>
            </head>
            <body>
                <div class='invoice-container'>
                    <div class='invoice-header'>
                        <div class='company-details'>
                            <h1>{invoice.CompanyName}</h1>
                            <p>{invoice.CompanyAddress}<br>
                            {invoice.CompanyCity}, {invoice.CompanyState} {invoice.CompanyZip}<br>
                            Phone: {invoice.CompanyPhone}<br>
                            Email: {invoice.CompanyEmail}</p>
                        </div>
                        <div class='invoice-details'>
                            <h2>INVOICE</h2>
                            <p class='invoice-number'>#{invoice.Number}</p>
                            <p><strong>Date:</strong> {invoice.Date:MMMM dd, yyyy}<br>
                            <strong>Due Date:</strong> {invoice.DueDate:MMMM dd, yyyy}</p>
                        </div>
                    </div>

                    <div class='billing-section'>
                        <div class='billing-box'>
                            <h3>Bill To</h3>
                            <p><strong>{invoice.CustomerName}</strong><br>
                            {invoice.CustomerAddress}<br>
                            {invoice.CustomerCity}, {invoice.CustomerState} {invoice.CustomerZip}<br>
                            {invoice.CustomerEmail}</p>
                        </div>
                        <div class='billing-box'>
                            <h3>Payment Information</h3>
                            <p><strong>Payment Terms:</strong> {invoice.PaymentTerms}<br>
                            <strong>Invoice Status:</strong> <span style='color: #ff6b6b;'>Unpaid</span><br>
                            <strong>Amount Due:</strong> ${invoice.Total:F2}</p>
                        </div>
                    </div>

                    <table class='items-table'>
                        <thead>
                            <tr>
                                <th>Description</th>
                                <th style='text-align: center;'>Quantity</th>
                                <th style='text-align: right;'>Unit Price</th>
                                <th style='text-align: right;'>Total</th>
                            </tr>
                        </thead>
                        <tbody>
                            {itemsHtml}
                        </tbody>
                    </table>

                    <div class='totals-section'>
                        <div class='totals-box'>
                            <div class='total-row'>
                                <span>Subtotal:</span>
                                <span>${invoice.Subtotal:F2}</span>
                            </div>
                            <div class='total-row'>
                                <span>Tax ({invoice.TaxRate:F0}%):</span>
                                <span>${invoice.Tax:F2}</span>
                            </div>
                            <div class='total-row final'>
                                <span>Total Due:</span>
                                <span>${invoice.Total:F2}</span>
                            </div>
                        </div>
                    </div>

                    <div class='payment-terms'>
                        <h3>Payment Terms & Conditions</h3>
                        <p>Payment is due within {invoice.PaymentTerms}. Late payments are subject to a 1.5% monthly service charge.
                        Please make checks payable to {invoice.CompanyName} or pay online at {invoice.CompanyWebsite}.</p>
                    </div>

                    <div class='footer-note'>
                        <p>Thank you for your business! This invoice was generated automatically using our C# PDF generation system.</p>
                        <p>Questions? Contact us at {invoice.CompanyEmail} or {invoice.CompanyPhone}</p>
                    </div>
                </div>
            </body>
            </html>"
    End Function
End Class

' Invoice model classes
Public Class Invoice
    Public Property Number As String
    Public Property [Date] As DateTime
    Public Property DueDate As DateTime
    Public Property CompanyName As String
    Public Property CompanyAddress As String
    Public Property CompanyCity As String
    Public Property CompanyState As String
    Public Property CompanyZip As String
    Public Property CompanyPhone As String
    Public Property CompanyEmail As String
    Public Property CompanyWebsite As String
    Public Property CustomerName As String
    Public Property CustomerAddress As String
    Public Property CustomerCity As String
    Public Property CustomerState As String
    Public Property CustomerZip As String
    Public Property CustomerEmail As String
    Public Property PaymentTerms As String
    Public Property Items As List(Of InvoiceItem)
    Public ReadOnly Property Subtotal As Decimal
        Get
            Return Items.Sum(Function(i) i.Total)
        End Get
    End Property
    Public Property TaxRate As Decimal
    Public ReadOnly Property Tax As Decimal
        Get
            Return Subtotal * (TaxRate / 100)
        End Get
    End Property
    Public ReadOnly Property Total As Decimal
        Get
            Return Subtotal + Tax
        End Get
    End Property
End Class

Public Class InvoiceItem
    Public Property Description As String
    Public Property Quantity As Integer
    Public Property UnitPrice As Decimal
    Public ReadOnly Property Total As Decimal
        Get
            Return Quantity * UnitPrice
        End Get
    End Property
End Class

' Usage example
Dim generator As New InvoiceGenerator()
Dim invoice As New Invoice With {
    .Number = "INV-2024-001",
    .[Date] = DateTime.Now,
    .DueDate = DateTime.Now.AddDays(30),
    .CompanyName = "Your Company Name",
    .CompanyAddress = "123 Business Street",
    .CompanyCity = "New York",
    .CompanyState = "NY",
    .CompanyZip = "10001",
    .CompanyPhone = "(555) 123-4567",
    .CompanyEmail = "billing@yourcompany.com",
    .CompanyWebsite = "www.yourcompany.com",
    .CustomerName = "Acme Corporation",
    .CustomerAddress = "456 Client Avenue",
    .CustomerCity = "Los Angeles",
    .CustomerState = "CA",
    .CustomerZip = "90001",
    .CustomerEmail = "accounts@acmecorp.com",
    .PaymentTerms = "Net 30",
    .TaxRate = 8.5D,
    .Items = New List(Of InvoiceItem) From {
        New InvoiceItem With {.Description = "Professional Services - March 2024", .Quantity = 40, .UnitPrice = 125.0D},
        New InvoiceItem With {.Description = "Software License (Annual)", .Quantity = 1, .UnitPrice = 2400.0D},
        New InvoiceItem With {.Description = "Technical Support", .Quantity = 10, .UnitPrice = 150.0D}
    }
}

generator.CreateInvoice(invoice)
$vbLabelText   $csharpLabel

Welche erweiterten PDF-Funktionen bietet IronPDF?

IronPDF geht über die grundlegende PDF-Erstellung in C# hinaus, um anspruchsvolle Funktionen zu bieten, die komplexe Dokument-Workflows und Enterprise-fähige Funktionen ermöglichen. Diese erweiterten Fähigkeiten ermöglichen es Ihnen, interaktive Formulare zu erstellen, vertrauliche Dokumente zu sichern und bestehende PDFs mit Präzision zu manipulieren, wenn Sie PDFs in .NET erstellen. Diese Funktionen sind der Grund, warum über 14 Millionen Entwickler weltweit IronPDF für ihre mission-critical PDF-Erstellungsanforderungen vertrauen. Das Verständnis dieser Funktionen hilft Ihnen, umfassende PDF-Lösungen zu erstellen, die selbst die anspruchsvollsten Anforderungen erfüllen - von der Erstellung ausfüllbarer Formulare bis zur Umsetzung von Enterprise-Sicherheitsfunktionen in Ihren C# PDF-Erstellungsprojekten.

Interaktive PDF-Formulare generieren

Ausfüllbare PDF-Formulare programmatisch zu erstellen, eröffnet Möglichkeiten zur Automatisierung der Datensammlung und der Dokument-Workflows. IronPDF kann HTML-Formulare in interaktive PDF-Formulare umwandeln, die Benutzer in jedem PDF-Reader ausfüllen können:

// Namespace: IronPDF
using IronPDF;
// Namespace: System
using System;

var renderer = new ChromePdfRenderer();

// Enable form creation from HTML
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

// Create an interactive form with various input types
var formHtml = @"
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; padding: 40px; }
            .form-group { margin-bottom: 20px; }
            label { display: block; margin-bottom: 5px; font-weight: bold; }
            input[type='text'], input[type='email'], select, textarea {
                width: 100%;
                padding: 8px;
                border: 1px solid #ccc;
                border-radius: 4px;
                font-size: 14px;
            }
            .checkbox-group { margin: 10px 0; }
            .submit-section { 
                margin-top: 30px; 
                padding-top: 20px; 
                border-top: 2px solid #0066cc; 
            }
        </style>
    </head>
    <body>
        <h1>Application Form</h1>
        <form>
            <div class='form-group'>
                <label for='fullName'>Full Name:</label>
                <input type='text' id='fullName' name='fullName' required />
            </div>

            <div class='form-group'>
                <label for='email'>Email Address:</label>
                <input type='email' id='email' name='email' required />
            </div>

            <div class='form-group'>
                <label for='department'>Department:</label>
                <select id='department' name='department'>
                    <option value=''>Select Department</option>
                    <option value='sales'>Sales</option>
                    <option value='marketing'>Marketing</option>
                    <option value='engineering'>Engineering</option>
                    <option value='hr'>Human Resources</option>
                </select>
            </div>

            <div class='form-group'>
                <label>Interests:</label>
                <div class='checkbox-group'>
                    <label><input type='checkbox' name='interests' value='training' /> Professional Training</label>
                    <label><input type='checkbox' name='interests' value='conferences' /> Industry Conferences</label>
                    <label><input type='checkbox' name='interests' value='certification' /> Certification Programs</label>
                </div>
            </div>

            <div class='form-group'>
                <label for='comments'>Additional Comments:</label>
                <textarea id='comments' name='comments' rows='4'></textarea>
            </div>

            <div class='submit-section'>
                <p><em>Please save this form and email to hr@company.com</em></p>
            </div>
        </form>
    </body>
    </html>";

// Create the PDF with form fields
var formPdf = renderer.RenderHtmlAsPdf(formHtml);

// Optionally pre-fill form fields programmatically
formPdf.Form.FindFormField("fullName").Value = "John Smith";
formPdf.Form.FindFormField("email").Value = "john.smith@example.com";
formPdf.Form.FindFormField("department").Value = "engineering";

// Save the interactive form
formPdf.SaveAs("application-form.pdf");

// You can also read and process submitted forms
var submittedPdf = PdfDocument.FromFile("submitted-form.pdf");
var name = submittedPdf.Form.FindFormField("fullName").Value;
var email = submittedPdf.Form.FindFormField("email").Value;
Console.WriteLine($"Form submitted by: {name} ({email})");
// Namespace: IronPDF
using IronPDF;
// Namespace: System
using System;

var renderer = new ChromePdfRenderer();

// Enable form creation from HTML
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

// Create an interactive form with various input types
var formHtml = @"
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; padding: 40px; }
            .form-group { margin-bottom: 20px; }
            label { display: block; margin-bottom: 5px; font-weight: bold; }
            input[type='text'], input[type='email'], select, textarea {
                width: 100%;
                padding: 8px;
                border: 1px solid #ccc;
                border-radius: 4px;
                font-size: 14px;
            }
            .checkbox-group { margin: 10px 0; }
            .submit-section { 
                margin-top: 30px; 
                padding-top: 20px; 
                border-top: 2px solid #0066cc; 
            }
        </style>
    </head>
    <body>
        <h1>Application Form</h1>
        <form>
            <div class='form-group'>
                <label for='fullName'>Full Name:</label>
                <input type='text' id='fullName' name='fullName' required />
            </div>

            <div class='form-group'>
                <label for='email'>Email Address:</label>
                <input type='email' id='email' name='email' required />
            </div>

            <div class='form-group'>
                <label for='department'>Department:</label>
                <select id='department' name='department'>
                    <option value=''>Select Department</option>
                    <option value='sales'>Sales</option>
                    <option value='marketing'>Marketing</option>
                    <option value='engineering'>Engineering</option>
                    <option value='hr'>Human Resources</option>
                </select>
            </div>

            <div class='form-group'>
                <label>Interests:</label>
                <div class='checkbox-group'>
                    <label><input type='checkbox' name='interests' value='training' /> Professional Training</label>
                    <label><input type='checkbox' name='interests' value='conferences' /> Industry Conferences</label>
                    <label><input type='checkbox' name='interests' value='certification' /> Certification Programs</label>
                </div>
            </div>

            <div class='form-group'>
                <label for='comments'>Additional Comments:</label>
                <textarea id='comments' name='comments' rows='4'></textarea>
            </div>

            <div class='submit-section'>
                <p><em>Please save this form and email to hr@company.com</em></p>
            </div>
        </form>
    </body>
    </html>";

// Create the PDF with form fields
var formPdf = renderer.RenderHtmlAsPdf(formHtml);

// Optionally pre-fill form fields programmatically
formPdf.Form.FindFormField("fullName").Value = "John Smith";
formPdf.Form.FindFormField("email").Value = "john.smith@example.com";
formPdf.Form.FindFormField("department").Value = "engineering";

// Save the interactive form
formPdf.SaveAs("application-form.pdf");

// You can also read and process submitted forms
var submittedPdf = PdfDocument.FromFile("submitted-form.pdf");
var name = submittedPdf.Form.FindFormField("fullName").Value;
var email = submittedPdf.Form.FindFormField("email").Value;
Console.WriteLine($"Form submitted by: {name} ({email})");
Imports IronPDF
Imports System

Dim renderer As New ChromePdfRenderer()

' Enable form creation from HTML
renderer.RenderingOptions.CreatePdfFormsFromHtml = True

' Create an interactive form with various input types
Dim formHtml As String = "
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; padding: 40px; }
            .form-group { margin-bottom: 20px; }
            label { display: block; margin-bottom: 5px; font-weight: bold; }
            input[type='text'], input[type='email'], select, textarea {
                width: 100%;
                padding: 8px;
                border: 1px solid #ccc;
                border-radius: 4px;
                font-size: 14px;
            }
            .checkbox-group { margin: 10px 0; }
            .submit-section { 
                margin-top: 30px; 
                padding-top: 20px; 
                border-top: 2px solid #0066cc; 
            }
        </style>
    </head>
    <body>
        <h1>Application Form</h1>
        <form>
            <div class='form-group'>
                <label for='fullName'>Full Name:</label>
                <input type='text' id='fullName' name='fullName' required />
            </div>

            <div class='form-group'>
                <label for='email'>Email Address:</label>
                <input type='email' id='email' name='email' required />
            </div>

            <div class='form-group'>
                <label for='department'>Department:</label>
                <select id='department' name='department'>
                    <option value=''>Select Department</option>
                    <option value='sales'>Sales</option>
                    <option value='marketing'>Marketing</option>
                    <option value='engineering'>Engineering</option>
                    <option value='hr'>Human Resources</option>
                </select>
            </div>

            <div class='form-group'>
                <label>Interests:</label>
                <div class='checkbox-group'>
                    <label><input type='checkbox' name='interests' value='training' /> Professional Training</label>
                    <label><input type='checkbox' name='interests' value='conferences' /> Industry Conferences</label>
                    <label><input type='checkbox' name='interests' value='certification' /> Certification Programs</label>
                </div>
            </div>

            <div class='form-group'>
                <label for='comments'>Additional Comments:</label>
                <textarea id='comments' name='comments' rows='4'></textarea>
            </div>

            <div class='submit-section'>
                <p><em>Please save this form and email to hr@company.com</em></p>
            </div>
        </form>
    </body>
    </html>"

' Create the PDF with form fields
Dim formPdf = renderer.RenderHtmlAsPdf(formHtml)

' Optionally pre-fill form fields programmatically
formPdf.Form.FindFormField("fullName").Value = "John Smith"
formPdf.Form.FindFormField("email").Value = "john.smith@example.com"
formPdf.Form.FindFormField("department").Value = "engineering"

' Save the interactive form
formPdf.SaveAs("application-form.pdf")

' You can also read and process submitted forms
Dim submittedPdf = PdfDocument.FromFile("submitted-form.pdf")
Dim name = submittedPdf.Form.FindFormField("fullName").Value
Dim email = submittedPdf.Form.FindFormField("email").Value
Console.WriteLine($"Form submitted by: {name} ({email})")
$vbLabelText   $csharpLabel

Sichern Sie Ihre erzeugten PDFs

Sicherheit ist entscheidend, wenn es um den Umgang mit vertraulichen Dokumenten geht. IronPDF bietet umfassende Sicherheitsfunktionen, um Ihre PDFs vor unbefugtem Zugriff oder Änderungen zu schützen:

// Namespace: IronPDF
using IronPDF;
// Namespace: IronPdf.Editing
using IronPdf.Editing;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1><p>Sensitive information...</p>");

// Apply password protection
pdf.SecuritySettings.UserPassword = "user123";      // Required to open
pdf.SecuritySettings.OwnerPassword = "owner456";    // Required to modify

// Set detailed permissions
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;

// Add digital signature for authenticity
pdf.SignWithFile(
    certificatePath: "certificate.pfx",
    certificatePassword: "certpass123",
    signingReason: "Document Approval",
    signingLocation: "New York, NY",
    signatureImage: new Signature("signature.png")
    {
        Width = 150,
        Height = 50
    }
);

// Apply redaction to hide sensitive information
pdf.RedactTextOnPage(
    pageIndex: 0,
    searchText: "SSN: ***-**-****",
    replacementText: "[REDACTED]",
    caseSensitive: false
);

// Save the secured PDF
pdf.SaveAs("secure-confidential.pdf");
// Namespace: IronPDF
using IronPDF;
// Namespace: IronPdf.Editing
using IronPdf.Editing;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1><p>Sensitive information...</p>");

// Apply password protection
pdf.SecuritySettings.UserPassword = "user123";      // Required to open
pdf.SecuritySettings.OwnerPassword = "owner456";    // Required to modify

// Set detailed permissions
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;

// Add digital signature for authenticity
pdf.SignWithFile(
    certificatePath: "certificate.pfx",
    certificatePassword: "certpass123",
    signingReason: "Document Approval",
    signingLocation: "New York, NY",
    signatureImage: new Signature("signature.png")
    {
        Width = 150,
        Height = 50
    }
);

// Apply redaction to hide sensitive information
pdf.RedactTextOnPage(
    pageIndex: 0,
    searchText: "SSN: ***-**-****",
    replacementText: "[REDACTED]",
    caseSensitive: false
);

// Save the secured PDF
pdf.SaveAs("secure-confidential.pdf");
Imports IronPDF
Imports IronPdf.Editing

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1><p>Sensitive information...</p>")

' Apply password protection
pdf.SecuritySettings.UserPassword = "user123"      ' Required to open
pdf.SecuritySettings.OwnerPassword = "owner456"    ' Required to modify

' Set detailed permissions
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserFormData = True
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint

' Add digital signature for authenticity
pdf.SignWithFile(
    certificatePath:="certificate.pfx",
    certificatePassword:="certpass123",
    signingReason:="Document Approval",
    signingLocation:="New York, NY",
    signatureImage:=New Signature("signature.png") With {
        .Width = 150,
        .Height = 50
    }
)

' Apply redaction to hide sensitive information
pdf.RedactTextOnPage(
    pageIndex:=0,
    searchText:="SSN: ***-**-****",
    replacementText:="[REDACTED]",
    caseSensitive:=False
)

' Save the secured PDF
pdf.SaveAs("secure-confidential.pdf")
$vbLabelText   $csharpLabel

PDFs zusammenführen und teilen

Das Kombinieren mehrerer PDFs oder das Extrahieren bestimmter Seiten ist essentiell für Dokumentenverwaltungs-Workflows:

// Namespace: IronPDF
using IronPDF;
// Namespace: System
using System;

// Merge multiple PDFs into one document
var coverPage = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Annual Report 2024</h1>");
var introduction = PdfDocument.FromFile("introduction.pdf");
var financials = PdfDocument.FromFile("financials.pdf");
var appendix = PdfDocument.FromFile("appendix.pdf");

// Merge all documents
var completeReport = PdfDocument.Merge(coverPage, introduction, financials, appendix);

// Add page numbers to the merged document
for (int i = 0; i < completeReport.PageCount; i++)
{
    completeReport.AddTextFooterToPage(i,
        $"Page {i + 1} of {completeReport.PageCount}",
        IronPdf.Font.FontTypes.Arial,
        10);
}

completeReport.SaveAs("annual-report-complete.pdf");

// Extract specific pages
var executiveSummary = completeReport.CopyPages(0, 4); // First 5 pages
executiveSummary.SaveAs("executive-summary.pdf");

// Split a large PDF into chapters
var sourcePdf = PdfDocument.FromFile("large-document.pdf");
var chaptersPerFile = 50;

for (int i = 0; i < sourcePdf.PageCount; i += chaptersPerFile)
{
    var endPage = Math.Min(i + chaptersPerFile - 1, sourcePdf.PageCount - 1);
    var chapter = sourcePdf.CopyPages(i, endPage);
    chapter.SaveAs($"chapter-{(i / chaptersPerFile) + 1}.pdf");
}
// Namespace: IronPDF
using IronPDF;
// Namespace: System
using System;

// Merge multiple PDFs into one document
var coverPage = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Annual Report 2024</h1>");
var introduction = PdfDocument.FromFile("introduction.pdf");
var financials = PdfDocument.FromFile("financials.pdf");
var appendix = PdfDocument.FromFile("appendix.pdf");

// Merge all documents
var completeReport = PdfDocument.Merge(coverPage, introduction, financials, appendix);

// Add page numbers to the merged document
for (int i = 0; i < completeReport.PageCount; i++)
{
    completeReport.AddTextFooterToPage(i,
        $"Page {i + 1} of {completeReport.PageCount}",
        IronPdf.Font.FontTypes.Arial,
        10);
}

completeReport.SaveAs("annual-report-complete.pdf");

// Extract specific pages
var executiveSummary = completeReport.CopyPages(0, 4); // First 5 pages
executiveSummary.SaveAs("executive-summary.pdf");

// Split a large PDF into chapters
var sourcePdf = PdfDocument.FromFile("large-document.pdf");
var chaptersPerFile = 50;

for (int i = 0; i < sourcePdf.PageCount; i += chaptersPerFile)
{
    var endPage = Math.Min(i + chaptersPerFile - 1, sourcePdf.PageCount - 1);
    var chapter = sourcePdf.CopyPages(i, endPage);
    chapter.SaveAs($"chapter-{(i / chaptersPerFile) + 1}.pdf");
}
Imports IronPDF
Imports System

' Merge multiple PDFs into one document
Dim coverPage = New ChromePdfRenderer().RenderHtmlAsPdf("<h1>Annual Report 2024</h1>")
Dim introduction = PdfDocument.FromFile("introduction.pdf")
Dim financials = PdfDocument.FromFile("financials.pdf")
Dim appendix = PdfDocument.FromFile("appendix.pdf")

' Merge all documents
Dim completeReport = PdfDocument.Merge(coverPage, introduction, financials, appendix)

' Add page numbers to the merged document
For i As Integer = 0 To completeReport.PageCount - 1
    completeReport.AddTextFooterToPage(i, $"Page {i + 1} of {completeReport.PageCount}", IronPdf.Font.FontTypes.Arial, 10)
Next

completeReport.SaveAs("annual-report-complete.pdf")

' Extract specific pages
Dim executiveSummary = completeReport.CopyPages(0, 4) ' First 5 pages
executiveSummary.SaveAs("executive-summary.pdf")

' Split a large PDF into chapters
Dim sourcePdf = PdfDocument.FromFile("large-document.pdf")
Dim chaptersPerFile As Integer = 50

For i As Integer = 0 To sourcePdf.PageCount - 1 Step chaptersPerFile
    Dim endPage = Math.Min(i + chaptersPerFile - 1, sourcePdf.PageCount - 1)
    Dim chapter = sourcePdf.CopyPages(i, endPage)
    chapter.SaveAs($"chapter-{(i \ chaptersPerFile) + 1}.pdf")
Next
$vbLabelText   $csharpLabel

Wasserzeichen und Stempel hinzufügen

Wasserzeichen auf PDFs aufzubringen ist entscheidend für Dokumentenkontrolle und Branding. IronPDF unterstützt sowohl Text- als auch Bildwasserzeichen:

// Namespace: IronPDF
using IronPDF;
// Namespace: System
using System;

var pdf = PdfDocument.FromFile("document.pdf");

// Add text watermark
pdf.ApplyWatermark(
    html: "<h1 style='color: #ff0000; opacity: 0.5; font-size: 100px;'>DRAFT</h1>",
    rotation: 45,
    opacity: 50,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center
);

// Add image watermark (company logo)
pdf.ApplyWatermark(
    html: "<img src='logo-watermark.png' style='width: 300px;' />",
    rotation: 0,
    opacity: 30,
    verticalAlignment: VerticalAlignment.Bottom,
    horizontalAlignment: HorizontalAlignment.Right
);

// Add stamps for document status
pdf.StampHtml(
    Html: @"<div style='border: 3px solid green; padding: 10px;
            background: white; font-weight: bold; color: green;'>
            APPROVED<br/>
            " + DateTime.Now.ToString("MM/dd/yyyy") + @"
            </div>",
    X: 400,
    Y: 100,
    Width: 150,
    Height: 60,
    PageIndex: 0
);

pdf.SaveAs("watermarked-document.pdf");
// Namespace: IronPDF
using IronPDF;
// Namespace: System
using System;

var pdf = PdfDocument.FromFile("document.pdf");

// Add text watermark
pdf.ApplyWatermark(
    html: "<h1 style='color: #ff0000; opacity: 0.5; font-size: 100px;'>DRAFT</h1>",
    rotation: 45,
    opacity: 50,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center
);

// Add image watermark (company logo)
pdf.ApplyWatermark(
    html: "<img src='logo-watermark.png' style='width: 300px;' />",
    rotation: 0,
    opacity: 30,
    verticalAlignment: VerticalAlignment.Bottom,
    horizontalAlignment: HorizontalAlignment.Right
);

// Add stamps for document status
pdf.StampHtml(
    Html: @"<div style='border: 3px solid green; padding: 10px;
            background: white; font-weight: bold; color: green;'>
            APPROVED<br/>
            " + DateTime.Now.ToString("MM/dd/yyyy") + @"
            </div>",
    X: 400,
    Y: 100,
    Width: 150,
    Height: 60,
    PageIndex: 0
);

pdf.SaveAs("watermarked-document.pdf");
Imports IronPDF
Imports System

Dim pdf = PdfDocument.FromFile("document.pdf")

' Add text watermark
pdf.ApplyWatermark(
    html:="<h1 style='color: #ff0000; opacity: 0.5; font-size: 100px;'>DRAFT</h1>",
    rotation:=45,
    opacity:=50,
    verticalAlignment:=VerticalAlignment.Middle,
    horizontalAlignment:=HorizontalAlignment.Center
)

' Add image watermark (company logo)
pdf.ApplyWatermark(
    html:="<img src='logo-watermark.png' style='width: 300px;' />",
    rotation:=0,
    opacity:=30,
    verticalAlignment:=VerticalAlignment.Bottom,
    horizontalAlignment:=HorizontalAlignment.Right
)

' Add stamps for document status
pdf.StampHtml(
    Html:="<div style='border: 3px solid green; padding: 10px;
            background: white; font-weight: bold; color: green;'>
            APPROVED<br/>" & DateTime.Now.ToString("MM/dd/yyyy") & "
            </div>",
    X:=400,
    Y:=100,
    Width:=150,
    Height:=60,
    PageIndex:=0
)

pdf.SaveAs("watermarked-document.pdf")
$vbLabelText   $csharpLabel

Wie kann ich die Leistung bei der Generierung von PDFs in großem Maßstab optimieren?

Wenn Sie PDFs in großem Maßstab generieren, wird die Leistung entscheidend. Ganz gleich, ob Sie Tausende von Rechnungen erstellen oder große Batch-Jobs verarbeiten, die Optimierung Ihres PDF-Erstellungscode kann den Durchsatz drastisch verbessern und den Ressourcenverbrauch reduzieren. Moderne Anwendungen erfordern eine effiziente PDF-Erstellung in C#, die keine Threads blockiert oder übermäßigen Speicher verbraucht. Hier sind bewährte Strategien, um die Leistung in Ihren verschiedenen PDF-Erstellungsaufgaben zu maximieren, wenn Sie PDFs in .NET effizient produzieren müssen.

Asynchrone PDF-Erzeugung

Moderne Anwendungen erfordern nicht blockierende Operationen, um die Reaktionsfähigkeit aufrechtzuerhalten. IronPDF bietet asynchrone Methoden für alle wichtigen Operationen:

// Namespace: IronPDF
using IronPDF;
// Namespace: System.Threading.Tasks
using System.Threading.Tasks;
// Namespace: System.Collections.Generic
using System.Collections.Generic;
// Namespace: System.Linq
using System.Linq;
// Namespace: System
using System;
// Namespace: System.Threading
using System.Threading;

public class AsyncPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public AsyncPdfService()
    {
        _renderer = new ChromePdfRenderer();
        // Configure renderer once for reuse
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        // Non-blocking PDF generation
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task GenerateBatchAsync(List<string> htmlDocuments)
    {
        // Process multiple PDFs concurrently
        var tasks = htmlDocuments.Select(async (html, index) =>
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
            await pdf.SaveAsAsync($"document-{index}.pdf");
        });

        await Task.WhenAll(tasks);
    }

    // Async with cancellation support
    public async Task<PdfDocument> GenerateWithTimeoutAsync(string html, int timeoutSeconds)
    {
        using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(timeoutSeconds));

        try
        {
            return await _renderer.RenderHtmlAsPdfAsync(html, cts.Token);
        }
        catch (OperationCanceledException)
        {
            throw new TimeoutException("PDF generation exceeded timeout");
        }
    }
}
// Namespace: IronPDF
using IronPDF;
// Namespace: System.Threading.Tasks
using System.Threading.Tasks;
// Namespace: System.Collections.Generic
using System.Collections.Generic;
// Namespace: System.Linq
using System.Linq;
// Namespace: System
using System;
// Namespace: System.Threading
using System.Threading;

public class AsyncPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public AsyncPdfService()
    {
        _renderer = new ChromePdfRenderer();
        // Configure renderer once for reuse
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        // Non-blocking PDF generation
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task GenerateBatchAsync(List<string> htmlDocuments)
    {
        // Process multiple PDFs concurrently
        var tasks = htmlDocuments.Select(async (html, index) =>
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
            await pdf.SaveAsAsync($"document-{index}.pdf");
        });

        await Task.WhenAll(tasks);
    }

    // Async with cancellation support
    public async Task<PdfDocument> GenerateWithTimeoutAsync(string html, int timeoutSeconds)
    {
        using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(timeoutSeconds));

        try
        {
            return await _renderer.RenderHtmlAsPdfAsync(html, cts.Token);
        }
        catch (OperationCanceledException)
        {
            throw new TimeoutException("PDF generation exceeded timeout");
        }
    }
}
Imports IronPDF
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports System.Linq
Imports System
Imports System.Threading

Public Class AsyncPdfService
    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        ' Configure renderer once for reuse
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
    End Sub

    Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
        ' Non-blocking PDF generation
        Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
        Return pdf.BinaryData
    End Function

    Public Async Function GenerateBatchAsync(htmlDocuments As List(Of String)) As Task
        ' Process multiple PDFs concurrently
        Dim tasks = htmlDocuments.Select(Async Function(html, index)
                                             Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
                                             Await pdf.SaveAsAsync($"document-{index}.pdf")
                                         End Function)

        Await Task.WhenAll(tasks)
    End Function

    ' Async with cancellation support
    Public Async Function GenerateWithTimeoutAsync(html As String, timeoutSeconds As Integer) As Task(Of PdfDocument)
        Using cts As New CancellationTokenSource(TimeSpan.FromSeconds(timeoutSeconds))
            Try
                Return Await _renderer.RenderHtmlAsPdfAsync(html, cts.Token)
            Catch ex As OperationCanceledException
                Throw New TimeoutException("PDF generation exceeded timeout")
            End Try
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Bewährte Praktiken der Stapelverarbeitung

Wenn Sie mehrere PDFs verarbeiten, kann ein ordnungsgemäßes Ressourcenmanagement und parallelisierende Verarbeitung die Leistung erheblich verbessern:

using IronPDF;
using System.Threading.Tasks.Dataflow;

public class BatchPdfProcessor
{
    private readonly ChromePdfRenderer _renderer;
    private readonly ActionBlock<PdfJob> _processingBlock;

    public BatchPdfProcessor(int maxConcurrency = 4)
    {
        _renderer = new ChromePdfRenderer();

        // Create a processing pipeline with controlled concurrency
        _processingBlock = new ActionBlock<PdfJob>(
            async job => await ProcessPdfAsync(job),
            new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = maxConcurrency,
                BoundedCapacity = maxConcurrency * 2
            });
    }

    private async Task ProcessPdfAsync(PdfJob job)
    {
        try
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(job.Html);
            await pdf.SaveAsAsync(job.OutputPath);
            job.OnSuccess?.Invoke();
        }
        catch (Exception ex)
        {
            job.OnError?.Invoke(ex);
        }
    }

    public async Task<bool> QueuePdfAsync(PdfJob job)
    {
        return await _processingBlock.SendAsync(job);
    }

    public async Task CompleteAsync()
    {
        _processingBlock.Complete();
        await _processingBlock.Completion;
    }
}

public class PdfJob
{
    public string Html { get; set; }
    public string OutputPath { get; set; }
    public Action OnSuccess { get; set; }
    public Action<Exception> OnError { get; set; }
}
using IronPDF;
using System.Threading.Tasks.Dataflow;

public class BatchPdfProcessor
{
    private readonly ChromePdfRenderer _renderer;
    private readonly ActionBlock<PdfJob> _processingBlock;

    public BatchPdfProcessor(int maxConcurrency = 4)
    {
        _renderer = new ChromePdfRenderer();

        // Create a processing pipeline with controlled concurrency
        _processingBlock = new ActionBlock<PdfJob>(
            async job => await ProcessPdfAsync(job),
            new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = maxConcurrency,
                BoundedCapacity = maxConcurrency * 2
            });
    }

    private async Task ProcessPdfAsync(PdfJob job)
    {
        try
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(job.Html);
            await pdf.SaveAsAsync(job.OutputPath);
            job.OnSuccess?.Invoke();
        }
        catch (Exception ex)
        {
            job.OnError?.Invoke(ex);
        }
    }

    public async Task<bool> QueuePdfAsync(PdfJob job)
    {
        return await _processingBlock.SendAsync(job);
    }

    public async Task CompleteAsync()
    {
        _processingBlock.Complete();
        await _processingBlock.Completion;
    }
}

public class PdfJob
{
    public string Html { get; set; }
    public string OutputPath { get; set; }
    public Action OnSuccess { get; set; }
    public Action<Exception> OnError { get; set; }
}
Imports IronPDF
Imports System.Threading.Tasks.Dataflow

Public Class BatchPdfProcessor
    Private ReadOnly _renderer As ChromePdfRenderer
    Private ReadOnly _processingBlock As ActionBlock(Of PdfJob)

    Public Sub New(Optional maxConcurrency As Integer = 4)
        _renderer = New ChromePdfRenderer()

        ' Create a processing pipeline with controlled concurrency
        _processingBlock = New ActionBlock(Of PdfJob)(
            Async Function(job) Await ProcessPdfAsync(job),
            New ExecutionDataflowBlockOptions With {
                .MaxDegreeOfParallelism = maxConcurrency,
                .BoundedCapacity = maxConcurrency * 2
            })
    End Sub

    Private Async Function ProcessPdfAsync(job As PdfJob) As Task
        Try
            Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(job.Html)
            Await pdf.SaveAsAsync(job.OutputPath)
            job.OnSuccess?.Invoke()
        Catch ex As Exception
            job.OnError?.Invoke(ex)
        End Try
    End Function

    Public Async Function QueuePdfAsync(job As PdfJob) As Task(Of Boolean)
        Return Await _processingBlock.SendAsync(job)
    End Function

    Public Async Function CompleteAsync() As Task
        _processingBlock.Complete()
        Await _processingBlock.Completion
    End Function
End Class

Public Class PdfJob
    Public Property Html As String
    Public Property OutputPath As String
    Public Property OnSuccess As Action
    Public Property OnError As Action(Of Exception)
End Class
$vbLabelText   $csharpLabel

Speicher-Optimierungstechniken

Bei großen PDFs oder einem hohen Verarbeitungsaufkommen ist das Speicher-Management entscheidend:

using IronPDF;

public class MemoryEfficientPdfGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public MemoryEfficientPdfGenerator()
    {
        _renderer = new ChromePdfRenderer();

        // Optimize for memory usage
        _renderer.RenderingOptions.RenderQuality = 90; // Slightly lower quality for smaller size
        _renderer.RenderingOptions.ImageQuality = 85; // Compress images
    }

    // Stream large PDFs instead of loading into memory
    public async Task GenerateLargePdfToStreamAsync(string html, Stream outputStream)
    {
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Write directly to stream without keeping in memory
        using (pdf)
        {
            var bytes = pdf.BinaryData;
            await outputStream.WriteAsync(bytes, 0, bytes.Length);
        }
    }

    // Process large HTML in chunks
    public async Task<PdfDocument> GenerateFromChunksAsync(List<string> htmlChunks)
    {
        var pdfs = new List<PdfDocument>();

        try
        {
            // Generate each chunk separately
            foreach (var chunk in htmlChunks)
            {
                var chunkPdf = await _renderer.RenderHtmlAsPdfAsync(chunk);
                pdfs.Add(chunkPdf);
            }

            // Merge all chunks
            return PdfDocument.Merge(pdfs.ToArray());
        }
        finally
        {
            // Ensure all temporary PDFs are disposed
            foreach (var pdf in pdfs)
            {
                pdf?.Dispose();
            }
        }
    }
}
using IronPDF;

public class MemoryEfficientPdfGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public MemoryEfficientPdfGenerator()
    {
        _renderer = new ChromePdfRenderer();

        // Optimize for memory usage
        _renderer.RenderingOptions.RenderQuality = 90; // Slightly lower quality for smaller size
        _renderer.RenderingOptions.ImageQuality = 85; // Compress images
    }

    // Stream large PDFs instead of loading into memory
    public async Task GenerateLargePdfToStreamAsync(string html, Stream outputStream)
    {
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Write directly to stream without keeping in memory
        using (pdf)
        {
            var bytes = pdf.BinaryData;
            await outputStream.WriteAsync(bytes, 0, bytes.Length);
        }
    }

    // Process large HTML in chunks
    public async Task<PdfDocument> GenerateFromChunksAsync(List<string> htmlChunks)
    {
        var pdfs = new List<PdfDocument>();

        try
        {
            // Generate each chunk separately
            foreach (var chunk in htmlChunks)
            {
                var chunkPdf = await _renderer.RenderHtmlAsPdfAsync(chunk);
                pdfs.Add(chunkPdf);
            }

            // Merge all chunks
            return PdfDocument.Merge(pdfs.ToArray());
        }
        finally
        {
            // Ensure all temporary PDFs are disposed
            foreach (var pdf in pdfs)
            {
                pdf?.Dispose();
            }
        }
    }
}
Imports IronPDF

Public Class MemoryEfficientPdfGenerator
    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()

        ' Optimize for memory usage
        _renderer.RenderingOptions.RenderQuality = 90 ' Slightly lower quality for smaller size
        _renderer.RenderingOptions.ImageQuality = 85 ' Compress images
    End Sub

    ' Stream large PDFs instead of loading into memory
    Public Async Function GenerateLargePdfToStreamAsync(html As String, outputStream As Stream) As Task
        Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)

        ' Write directly to stream without keeping in memory
        Using pdf
            Dim bytes = pdf.BinaryData
            Await outputStream.WriteAsync(bytes, 0, bytes.Length)
        End Using
    End Function

    ' Process large HTML in chunks
    Public Async Function GenerateFromChunksAsync(htmlChunks As List(Of String)) As Task(Of PdfDocument)
        Dim pdfs = New List(Of PdfDocument)()

        Try
            ' Generate each chunk separately
            For Each chunk In htmlChunks
                Dim chunkPdf = Await _renderer.RenderHtmlAsPdfAsync(chunk)
                pdfs.Add(chunkPdf)
            Next

            ' Merge all chunks
            Return PdfDocument.Merge(pdfs.ToArray())
        Finally
            ' Ensure all temporary PDFs are disposed
            For Each pdf In pdfs
                pdf?.Dispose()
            Next
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

Caching und Optimierung von Vorlagen

Reduzieren Sie die Rendering-Zeit, indem Sie häufige Elemente im Cache speichern und Templates optimieren:

using IronPDF;
using Microsoft.Extensions.Caching.Memory;

public class CachedPdfService
{
    private readonly ChromePdfRenderer _renderer;
    private readonly IMemoryCache _cache;
    private readonly Dictionary<string, string> _compiledTemplates;

    public CachedPdfService(IMemoryCache cache)
    {
        _renderer = new ChromePdfRenderer();
        _cache = cache;
        _compiledTemplates = new Dictionary<string, string>();

        // Pre-compile common templates
        PrecompileTemplates();
    }

    private void PrecompileTemplates()
    {
        // Load and cache common CSS
        var commonCss = File.ReadAllText("Templates/common.css");
        _compiledTemplates["commonCss"] = commonCss;

        // Cache logo as Base64
        var logoBytes = File.ReadAllBytes("Assets/logo.png");
        var logoBase64 = Convert.ToBase64String(logoBytes);
        _compiledTemplates["logoData"] = $"data:image/png;base64,{logoBase64}";
    }

    public async Task<byte[]> GenerateInvoicePdfAsync(string invoiceId, InvoiceData data)
    {
        // Check cache first
        var cacheKey = $"invoice_{invoiceId}";
        if (_cache.TryGetValue<byte[]>(cacheKey, out var cachedPdf))
        {
            return cachedPdf;
        }

        // Generate PDF with cached templates
        var html = BuildHtmlWithCache(data);
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        var pdfBytes = pdf.BinaryData;

        // Cache for 1 hour
        _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1));

        return pdfBytes;
    }

    private string BuildHtmlWithCache(InvoiceData data)
    {
        return @"
            <html>
            <head>
                <style>{_compiledTemplates["commonCss"]}</style>
            </head>
            <body>
                <img src='{_compiledTemplates["logoData"]}' />

            </body>
            </html>";
    }
}
using IronPDF;
using Microsoft.Extensions.Caching.Memory;

public class CachedPdfService
{
    private readonly ChromePdfRenderer _renderer;
    private readonly IMemoryCache _cache;
    private readonly Dictionary<string, string> _compiledTemplates;

    public CachedPdfService(IMemoryCache cache)
    {
        _renderer = new ChromePdfRenderer();
        _cache = cache;
        _compiledTemplates = new Dictionary<string, string>();

        // Pre-compile common templates
        PrecompileTemplates();
    }

    private void PrecompileTemplates()
    {
        // Load and cache common CSS
        var commonCss = File.ReadAllText("Templates/common.css");
        _compiledTemplates["commonCss"] = commonCss;

        // Cache logo as Base64
        var logoBytes = File.ReadAllBytes("Assets/logo.png");
        var logoBase64 = Convert.ToBase64String(logoBytes);
        _compiledTemplates["logoData"] = $"data:image/png;base64,{logoBase64}";
    }

    public async Task<byte[]> GenerateInvoicePdfAsync(string invoiceId, InvoiceData data)
    {
        // Check cache first
        var cacheKey = $"invoice_{invoiceId}";
        if (_cache.TryGetValue<byte[]>(cacheKey, out var cachedPdf))
        {
            return cachedPdf;
        }

        // Generate PDF with cached templates
        var html = BuildHtmlWithCache(data);
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        var pdfBytes = pdf.BinaryData;

        // Cache for 1 hour
        _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1));

        return pdfBytes;
    }

    private string BuildHtmlWithCache(InvoiceData data)
    {
        return @"
            <html>
            <head>
                <style>{_compiledTemplates["commonCss"]}</style>
            </head>
            <body>
                <img src='{_compiledTemplates["logoData"]}' />

            </body>
            </html>";
    }
}
Imports IronPDF
Imports Microsoft.Extensions.Caching.Memory
Imports System.IO
Imports System.Threading.Tasks

Public Class CachedPdfService
    Private ReadOnly _renderer As ChromePdfRenderer
    Private ReadOnly _cache As IMemoryCache
    Private ReadOnly _compiledTemplates As Dictionary(Of String, String)

    Public Sub New(cache As IMemoryCache)
        _renderer = New ChromePdfRenderer()
        _cache = cache
        _compiledTemplates = New Dictionary(Of String, String)()

        ' Pre-compile common templates
        PrecompileTemplates()
    End Sub

    Private Sub PrecompileTemplates()
        ' Load and cache common CSS
        Dim commonCss As String = File.ReadAllText("Templates/common.css")
        _compiledTemplates("commonCss") = commonCss

        ' Cache logo as Base64
        Dim logoBytes As Byte() = File.ReadAllBytes("Assets/logo.png")
        Dim logoBase64 As String = Convert.ToBase64String(logoBytes)
        _compiledTemplates("logoData") = $"data:image/png;base64,{logoBase64}"
    End Sub

    Public Async Function GenerateInvoicePdfAsync(invoiceId As String, data As InvoiceData) As Task(Of Byte())
        ' Check cache first
        Dim cacheKey As String = $"invoice_{invoiceId}"
        Dim cachedPdf As Byte() = Nothing
        If _cache.TryGetValue(cacheKey, cachedPdf) Then
            Return cachedPdf
        End If

        ' Generate PDF with cached templates
        Dim html As String = BuildHtmlWithCache(data)
        Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
        Dim pdfBytes As Byte() = pdf.BinaryData

        ' Cache for 1 hour
        _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1))

        Return pdfBytes
    End Function

    Private Function BuildHtmlWithCache(data As InvoiceData) As String
        Return $"
            <html>
            <head>
                <style>{_compiledTemplates("commonCss")}</style>
            </head>
            <body>
                <img src='{_compiledTemplates("logoData")}' />
            </body>
            </html>"
    End Function
End Class
$vbLabelText   $csharpLabel

Was sind häufige Probleme bei der Erstellung von PDFs und wie kann ich sie beheben?

Selbst mit einer robusten .NET PDF-Bibliothek wie IronPDF können Sie während der Entwicklung oder Bereitstellung auf Herausforderungen stoßen, wenn Sie PDFs in C# erstellen. Das Verständnis der häufigen Probleme und ihrer Lösungen hilft Ihnen, Probleme schnell zu lösen und reibungslose PDF-Erstellung zu gewährleisten. Die gute Nachricht ist, dass über 14 Millionen Entwickler IronPDF als ihren C# PDF Generator verwenden und die meisten Probleme bereits erkannt und gelöst wurden. Dieser Leitfaden zur Fehlerbehebung deckt die häufigsten Probleme ab, mit denen Entwickler konfrontiert sind, wenn sie PDFs in .NET erstellen, und bietet praktische Lösungen auf Grundlage von realen Erfahrungen. Denken Sie daran, dass 24/7 Support jederzeit verfügbar ist, wenn Sie sofortige Hilfe bei Ihren PDF-Erstellungsproblemen benötigen.

Problem 1: Fehlerhaftes Rendering oder leere PDFs

Eines der häufigsten Probleme sind PDFs, die leer erscheinen oder nicht richtig gerendert werden. Dies tritt typischerweise auf, wenn Ressourcen nicht rechtzeitig geladen werden oder wenn es Probleme mit dem JavaScript Timing gibt:

// Namespace: IronPDF
using IronPDF;
// Namespace: System.IO
using System.IO;
// Namespace: System
using System;

// Problem: PDF is blank or missing content
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(complexHtml); // Results in blank PDF

// Solution 1: Add render delay for JavaScript-heavy content
renderer.RenderingOptions.RenderDelay = 3000; // Wait 3 seconds
renderer.RenderingOptions.EnableJavaScript = true;

// Solution 2: Wait for specific elements
renderer.RenderingOptions.WaitFor = new WaitFor()
{
    JavaScriptQuery = "document.querySelector('#chart-loaded') !== null",
    WaitForType = WaitForType.JavaScript,
    Timeout = 30000 // 30 second timeout
};

// Solution 3: Use base path for local assets
var basePath = Path.GetFullPath("Assets");
var pdf = renderer.RenderHtmlAsPdf(htmlWithImages, basePath);

// Solution 4: Embed assets as Base64
var imageBase64 = Convert.ToBase64String(File.ReadAllBytes("logo.png"));
var htmlWithEmbedded = $@"<img src='data:image/png;base64,{imageBase64}' />";
// Namespace: IronPDF
using IronPDF;
// Namespace: System.IO
using System.IO;
// Namespace: System
using System;

// Problem: PDF is blank or missing content
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(complexHtml); // Results in blank PDF

// Solution 1: Add render delay for JavaScript-heavy content
renderer.RenderingOptions.RenderDelay = 3000; // Wait 3 seconds
renderer.RenderingOptions.EnableJavaScript = true;

// Solution 2: Wait for specific elements
renderer.RenderingOptions.WaitFor = new WaitFor()
{
    JavaScriptQuery = "document.querySelector('#chart-loaded') !== null",
    WaitForType = WaitForType.JavaScript,
    Timeout = 30000 // 30 second timeout
};

// Solution 3: Use base path for local assets
var basePath = Path.GetFullPath("Assets");
var pdf = renderer.RenderHtmlAsPdf(htmlWithImages, basePath);

// Solution 4: Embed assets as Base64
var imageBase64 = Convert.ToBase64String(File.ReadAllBytes("logo.png"));
var htmlWithEmbedded = $@"<img src='data:image/png;base64,{imageBase64}' />";
Imports IronPDF
Imports System.IO
Imports System

' Problem: PDF is blank or missing content
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(complexHtml) ' Results in blank PDF

' Solution 1: Add render delay for JavaScript-heavy content
renderer.RenderingOptions.RenderDelay = 3000 ' Wait 3 seconds
renderer.RenderingOptions.EnableJavaScript = True

' Solution 2: Wait for specific elements
renderer.RenderingOptions.WaitFor = New WaitFor() With {
    .JavaScriptQuery = "document.querySelector('#chart-loaded') !== null",
    .WaitForType = WaitForType.JavaScript,
    .Timeout = 30000 ' 30 second timeout
}

' Solution 3: Use base path for local assets
Dim basePath As String = Path.GetFullPath("Assets")
pdf = renderer.RenderHtmlAsPdf(htmlWithImages, basePath)

' Solution 4: Embed assets as Base64
Dim imageBase64 As String = Convert.ToBase64String(File.ReadAllBytes("logo.png"))
Dim htmlWithEmbedded As String = $"<img src='data:image/png;base64,{imageBase64}' />"
$vbLabelText   $csharpLabel

Für persistent rendering issues, aktivieren Sie das Logging, um das Problem zu diagnostizieren:

// Enable detailed logging
IronPdf.Logging.Logger.EnableDebugging = true;
IronPdf.Logging.Logger.LogFilePath = "IronPdf.log";
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Enable detailed logging
IronPdf.Logging.Logger.EnableDebugging = true;
IronPdf.Logging.Logger.LogFilePath = "IronPdf.log";
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
' Enable detailed logging
IronPdf.Logging.Logger.EnableDebugging = True
IronPdf.Logging.Logger.LogFilePath = "IronPdf.log"
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All
$vbLabelText   $csharpLabel

Erfahren Sie mehr über die Fehlerbehebung bei Rendering-Problemen

Problem 2: Langsames erstes Rendern

Die erste PDF-Erstellung kann aufgrund des Initialisierungs-Overheads langsamer sein. IronPDFs Initial-Render kann 2-3 Sekunden dauern, was normale Startzeit ähnlich wie beim Öffnen von Chrome in einer Desktop-Umgebung ist:

// Problem: First PDF takes too long to generate
public class PdfService
{
    private ChromePdfRenderer _renderer;

    // Solution 1: Initialize renderer at startup
    public void Initialize()
    {
        _renderer = new ChromePdfRenderer();

        // Warm up the renderer
        _ = _renderer.RenderHtmlAsPdf("<p>Warm up</p>");
    }

    // Solution 2: Use IronPdf.Native packages for faster initialization
    // `Install-Package IronPdf.Native.Windows.X64`
    // This includes pre-loaded binaries for your platform

    // Solution 3: For cloud deployments, use appropriate packages
    // For Linux: `Install-Package IronPdf.Linux`
    // For Docker: Use IronPdf.Linux with proper dependencies
}

// Solution 4: Skip initialization checks in production
IronPdf.Installation.SkipInitialization = true; // Use only with persistent storage
// Problem: First PDF takes too long to generate
public class PdfService
{
    private ChromePdfRenderer _renderer;

    // Solution 1: Initialize renderer at startup
    public void Initialize()
    {
        _renderer = new ChromePdfRenderer();

        // Warm up the renderer
        _ = _renderer.RenderHtmlAsPdf("<p>Warm up</p>");
    }

    // Solution 2: Use IronPdf.Native packages for faster initialization
    // `Install-Package IronPdf.Native.Windows.X64`
    // This includes pre-loaded binaries for your platform

    // Solution 3: For cloud deployments, use appropriate packages
    // For Linux: `Install-Package IronPdf.Linux`
    // For Docker: Use IronPdf.Linux with proper dependencies
}

// Solution 4: Skip initialization checks in production
IronPdf.Installation.SkipInitialization = true; // Use only with persistent storage
Imports IronPdf

' Problem: First PDF takes too long to generate
Public Class PdfService
    Private _renderer As ChromePdfRenderer

    ' Solution 1: Initialize renderer at startup
    Public Sub Initialize()
        _renderer = New ChromePdfRenderer()

        ' Warm up the renderer
        Dim unused = _renderer.RenderHtmlAsPdf("<p>Warm up</p>")
    End Sub

    ' Solution 2: Use IronPdf.Native packages for faster initialization
    ' `Install-Package IronPdf.Native.Windows.X64`
    ' This includes pre-loaded binaries for your platform

    ' Solution 3: For cloud deployments, use appropriate packages
    ' For Linux: `Install-Package IronPdf.Linux`
    ' For Docker: Use IronPdf.Linux with proper dependencies
End Class

' Solution 4: Skip initialization checks in production
IronPdf.Installation.SkipInitialization = True ' Use only with persistent storage
$vbLabelText   $csharpLabel

Lesen Sie mehr über die Optimierung der Start-Up-Performance

Ausgabe 3: Bereitstellungsprobleme unter Linux/Docker

IronPDF erfordert bestimmte Linux-Abhängigkeiten, die in minimalen Docker-Images möglicherweise nicht vorhanden sind. So lösen Sie häufige Bereitstellungsprobleme:

# Dockerfile for IronPDF on Linux
FROM mcr.microsoft.com/dotnet/aspnet:8.0

# Install required dependencies
RUN apt-get update && apt-get install -y \
    libglib2.0-0 \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxrandr2 \
    libgbm1 \
    libpango-1.0-0 \
    libcairo2 \
    libasound2 \
    libxshmfence1 \
    libx11-xcb1

# Copy and run your application
WORKDIR /app
COPY . .
ENTRYPOINT [".NET", "YourApp.dll"]

Speziell für Google Cloud Run:

// Use 2nd generation execution environment
// Deploy with: gcloud run deploy --execution-environment gen2

// In your code, ensure compatibility
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Use 2nd generation execution environment
// Deploy with: gcloud run deploy --execution-environment gen2

// In your code, ensure compatibility
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
' Use 2nd generation execution environment
' Deploy with: gcloud run deploy --execution-environment gen2

' In your code, ensure compatibility
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
$vbLabelText   $csharpLabel

Erfahren Sie mehr über die Docker-Bereitstellung

Ausgabe 4: Speicher- und Leistungsprobleme

Für eine hohe Anzahl von PDF-Erstellungen optimieren Sie die Speichernutzung und Leistung:

// Problem: High memory usage or slow batch processing
public class OptimizedPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public OptimizedPdfService()
    {
        _renderer = new ChromePdfRenderer();

        // Optimize for performance
        _renderer.RenderingOptions.RenderQuality = 90;
        _renderer.RenderingOptions.ImageQuality = 85;

        // Disable features you don't need
        _renderer.RenderingOptions.EnableJavaScript = false; // If not needed
        _renderer.RenderingOptions.RenderDelay = 0; // If content is static
    }

    // Solution 1: Process large documents in chunks
    public async Task<PdfDocument> GenerateLargeReportAsync(List<ReportSection> sections)
    {
        var pdfs = new List<PdfDocument>();

        foreach (var section in sections)
        {
            var sectionHtml = GenerateSectionHtml(section);
            var sectionPdf = await _renderer.RenderHtmlAsPdfAsync(sectionHtml);
            pdfs.Add(sectionPdf);

            // Force garbage collection after each section
            if (pdfs.Count % 10 == 0)
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }

        return PdfDocument.Merge(pdfs.ToArray());
    }

    // Solution 2: Use streaming for large files
    public async Task StreamLargePdfAsync(string html, HttpResponse response)
    {
        response.ContentType = "application/pdf";
        response.Headers.Add("Content-Disposition", "attachment; filename=report.pdf");

        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        var bytes = pdf.BinaryData;

        await response.Body.WriteAsync(bytes, 0, bytes.Length);
        await response.Body.FlushAsync();
    }
}
// Problem: High memory usage or slow batch processing
public class OptimizedPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public OptimizedPdfService()
    {
        _renderer = new ChromePdfRenderer();

        // Optimize for performance
        _renderer.RenderingOptions.RenderQuality = 90;
        _renderer.RenderingOptions.ImageQuality = 85;

        // Disable features you don't need
        _renderer.RenderingOptions.EnableJavaScript = false; // If not needed
        _renderer.RenderingOptions.RenderDelay = 0; // If content is static
    }

    // Solution 1: Process large documents in chunks
    public async Task<PdfDocument> GenerateLargeReportAsync(List<ReportSection> sections)
    {
        var pdfs = new List<PdfDocument>();

        foreach (var section in sections)
        {
            var sectionHtml = GenerateSectionHtml(section);
            var sectionPdf = await _renderer.RenderHtmlAsPdfAsync(sectionHtml);
            pdfs.Add(sectionPdf);

            // Force garbage collection after each section
            if (pdfs.Count % 10 == 0)
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }

        return PdfDocument.Merge(pdfs.ToArray());
    }

    // Solution 2: Use streaming for large files
    public async Task StreamLargePdfAsync(string html, HttpResponse response)
    {
        response.ContentType = "application/pdf";
        response.Headers.Add("Content-Disposition", "attachment; filename=report.pdf");

        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        var bytes = pdf.BinaryData;

        await response.Body.WriteAsync(bytes, 0, bytes.Length);
        await response.Body.FlushAsync();
    }
}
' Problem: High memory usage or slow batch processing
Public Class OptimizedPdfService
	Private ReadOnly _renderer As ChromePdfRenderer

	Public Sub New()
		_renderer = New ChromePdfRenderer()

		' Optimize for performance
		_renderer.RenderingOptions.RenderQuality = 90
		_renderer.RenderingOptions.ImageQuality = 85

		' Disable features you don't need
		_renderer.RenderingOptions.EnableJavaScript = False ' If not needed
		_renderer.RenderingOptions.RenderDelay = 0 ' If content is static
	End Sub

	' Solution 1: Process large documents in chunks
	Public Async Function GenerateLargeReportAsync(ByVal sections As List(Of ReportSection)) As Task(Of PdfDocument)
		Dim pdfs = New List(Of PdfDocument)()

		For Each section In sections
			Dim sectionHtml = GenerateSectionHtml(section)
			Dim sectionPdf = Await _renderer.RenderHtmlAsPdfAsync(sectionHtml)
			pdfs.Add(sectionPdf)

			' Force garbage collection after each section
			If pdfs.Count Mod 10 = 0 Then
				GC.Collect()
				GC.WaitForPendingFinalizers()
			End If
		Next section

		Return PdfDocument.Merge(pdfs.ToArray())
	End Function

	' Solution 2: Use streaming for large files
	Public Async Function StreamLargePdfAsync(ByVal html As String, ByVal response As HttpResponse) As Task
		response.ContentType = "application/pdf"
		response.Headers.Add("Content-Disposition", "attachment; filename=report.pdf")

		Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
		Dim bytes = pdf.BinaryData

		Await response.Body.WriteAsync(bytes, 0, bytes.Length)
		Await response.Body.FlushAsync()
	End Function
End Class
$vbLabelText   $csharpLabel

Lesen Sie den vollständigen Leitfaden zur Leistungsoptimierung

Ausgabe 5: Probleme mit Schriftarten und Kodierung

Wenn Sie mit internationalen Inhalten oder benutzerdefinierten Schriften arbeiten:

// Problem: Fonts not rendering correctly
var renderer = new ChromePdfRenderer();

// Solution 1: Install fonts on the server
// For Linux/Docker, add to Dockerfile:
// RUN apt-get install -y fonts-liberation fonts-noto

// Solution 2: Embed fonts in HTML
var html = @"
<html>
<head>
    <style>
        @font-face {
            font-family: 'CustomFont';
            src: url('data:font/woff2;base64,[base64-encoded-font]') format('woff2');
        }
        body { font-family: 'CustomFont', Arial, sans-serif; }
    </style>
</head>
<body>
    <p>Content with custom font</p>
</body>
</html>";

// Solution 3: Use web fonts
var htmlWithWebFont = @"
<html>
<head>
    <link href='https://fonts.googleapis.com/css2?family=Noto+Sans+JP' rel='stylesheet'>
    <style>
        body { font-family: 'Noto Sans JP', sans-serif; }
    </style>
</head>
<body>
    <p>日本語のテキスト</p>
</body>
</html>";

// Ensure proper encoding
renderer.RenderingOptions.InputEncoding = Encoding.UTF8;
// Problem: Fonts not rendering correctly
var renderer = new ChromePdfRenderer();

// Solution 1: Install fonts on the server
// For Linux/Docker, add to Dockerfile:
// RUN apt-get install -y fonts-liberation fonts-noto

// Solution 2: Embed fonts in HTML
var html = @"
<html>
<head>
    <style>
        @font-face {
            font-family: 'CustomFont';
            src: url('data:font/woff2;base64,[base64-encoded-font]') format('woff2');
        }
        body { font-family: 'CustomFont', Arial, sans-serif; }
    </style>
</head>
<body>
    <p>Content with custom font</p>
</body>
</html>";

// Solution 3: Use web fonts
var htmlWithWebFont = @"
<html>
<head>
    <link href='https://fonts.googleapis.com/css2?family=Noto+Sans+JP' rel='stylesheet'>
    <style>
        body { font-family: 'Noto Sans JP', sans-serif; }
    </style>
</head>
<body>
    <p>日本語のテキスト</p>
</body>
</html>";

// Ensure proper encoding
renderer.RenderingOptions.InputEncoding = Encoding.UTF8;
' Problem: Fonts not rendering correctly
Dim renderer = New ChromePdfRenderer()

' Solution 1: Install fonts on the server
' For Linux/Docker, add to Dockerfile:
' RUN apt-get install -y fonts-liberation fonts-noto

' Solution 2: Embed fonts in HTML
Dim html = "
<html>
<head>
    <style>
        @font-face {
            font-family: 'CustomFont';
            src: url('data:font/woff2;base64,[base64-encoded-font]') format('woff2');
        }
        body { font-family: 'CustomFont', Arial, sans-serif; }
    </style>
</head>
<body>
    <p>Content with custom font</p>
</body>
</html>"

' Solution 3: Use web fonts
Dim htmlWithWebFont = "
<html>
<head>
    <link href='https://fonts.googleapis.com/css2?family=Noto+Sans+JP' rel='stylesheet'>
    <style>
        body { font-family: 'Noto Sans JP', sans-serif; }
    </style>
</head>
<body>
    <p>日本語のテキスト</p>
</body>
</html>"

' Ensure proper encoding
renderer.RenderingOptions.InputEncoding = Encoding.UTF8
$vbLabelText   $csharpLabel

Hilfe erhalten

Wenn Sie auf Probleme stoßen, die hier nicht behandelt werden, bietet IronPDF hervorragende Support-Ressourcen:

  1. 24/7 Live-Chat-Unterstützung - Sprechen Sie in Echtzeit mit Ingenieuren in 30 Sekunden Antwortzeit
  2. Umfassende Dokumentation - Detaillierte API-Referenzen und Leitfäden
  3. Wissensbasis - Lösungen zu häufigen Problemen
  4. Code-Beispiele - Fertige Code-Snippets

Wenn Sie Support anfordern, geben Sie an:

  • IronPDF-Version
  • .NET-Version und Plattform
  • Minimaler Code-Beweis zur Reproduktion des Problems
  • Protokolldateien (sofern verfügbar)
  • Stack-Trace oder Fehlermeldungen

Welche Plattformen unterstützen IronPDF für die PDF-Erstellung?

Die plattformübergreifende Unterstützung von IronPDF sorgt dafür, dass Ihr PDF-Erstellungscode konsistent über verschiedene Umgebungen funktioniert. Egal, ob Sie auf Windows-Server, Linux-Container oder Cloud-Plattformen bereitstellen, IronPDF bietet die Flexibilität und Zuverlässigkeit, die für Produktionsbereitstellungen Ihres C# PDF Generators benötigt werden. Diese universelle Kompatibilität ist ein Grund, warum Organisationen in über 50 Ländern IronPDF nutzen, um täglich Millionen von PDFs zu erstellen. Von Fortune 500-Unternehmen, die Finanzberichte erstellen, bis zu Startups, die Kundenrechnungen erstellen, skaliert IronPDF, um jede Nachfrage nach PDF-Erstellung in .NET zu erfüllen. Das Verständnis plattformspezifischer Überlegungen sorgt für reibungslose Bereitstellungen in Ihrer Infrastruktur - ob On-Premise-Servern oder Cloud-Umgebungen, in denen Sie PDFs mit C# erstellen müssen.

.NET-Versionskompatibilität

IronPDF unterstützt alle modernen .NET-Versionen und wird kontinuierlich aktualisiert, um die neuesten Releases zu unterstützen:

  • .NET 8 - Vollständiger Support mit allen Funktionen
  • .NET 9 - Vollständig unterstützt (aktuell neueste Version)
  • .NET 10 - Vorab-Support verfügbar (IronPDF ist bereits konform für die Veröffentlichung im November 2025)
  • .NET 7, 6, 5 - Voll unterstützt
  • .NET Core 3.1+ - Unterstützt mit allen Funktionen
  • .NET Framework 4.6.2+ - Wartung des Legacy-Supports

Unterstützung für das Betriebssystem

Setzen Sie Ihre PDF-Generierungslösung auf jedem gängigen Betriebssystem ein:

Windows

  • Windows 11, 10, 8, 7
  • Windows Server 2022, 2019, 2016, 2012

Linux

  • Ubuntu 20.04, 22.04, 24.04
  • Debian 10, 11, 12
  • CentOS 7, 8
  • Red Hat Enterprise Linux
  • Alpine Linux (mit zusätzlicher Konfiguration)

macOS

  • macOS 13 (Ventura) und höher
  • Apple Silicon (M1/M2/M3) native Unterstützung
  • Intel-basierte Macs vollständig unterstützt

Bereitstellung von Cloud-Plattformen

IronPDF funktioniert nahtlos mit allen großen Cloud-Plattformen:

Microsoft Azure

// Azure App Service configuration
// Use at least B1 tier for optimal performance
// Enable 64-bit platform in Configuration settings

// For Azure Functions
public static class PdfFunction
{
    [FunctionName("GeneratePdf")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req)
    {
        var renderer = new ChromePdfRenderer();
        var html = await new StreamReader(req.Body).ReadToEndAsync();
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        return new FileContentResult(pdf.BinaryData, "application/pdf");
    }
}
// Azure App Service configuration
// Use at least B1 tier for optimal performance
// Enable 64-bit platform in Configuration settings

// For Azure Functions
public static class PdfFunction
{
    [FunctionName("GeneratePdf")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req)
    {
        var renderer = new ChromePdfRenderer();
        var html = await new StreamReader(req.Body).ReadToEndAsync();
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        return new FileContentResult(pdf.BinaryData, "application/pdf");
    }
}
' Azure App Service configuration
' Use at least B1 tier for optimal performance
' Enable 64-bit platform in Configuration settings

' For Azure Functions
Public Module PdfFunction
	<FunctionName("GeneratePdf")>
	Public Async Function Run(<HttpTrigger(AuthorizationLevel.Function, "post")> ByVal req As HttpRequest) As Task(Of IActionResult)
		Dim renderer = New ChromePdfRenderer()
		Dim html = Await (New StreamReader(req.Body)).ReadToEndAsync()
		Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)

		Return New FileContentResult(pdf.BinaryData, "application/pdf")
	End Function
End Module
$vbLabelText   $csharpLabel

Amazon Web Services (AWS)

// AWS Lambda configuration
// Use custom runtime or container deployment
// Ensure Lambda has at least 512MB memory

public class PdfLambdaFunction
{
    private readonly ChromePdfRenderer _renderer;

    public PdfLambdaFunction()
    {
        _renderer = new ChromePdfRenderer();
        // Configure for Lambda environment
        IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    }

    public async Task<APIGatewayProxyResponse> FunctionHandler(
        APIGatewayProxyRequest request,
        ILambdaContext context)
    {
        var pdf = await _renderer.RenderHtmlAsPdfAsync(request.Body);

        return new APIGatewayProxyResponse
        {
            StatusCode = 200,
            Headers = new Dictionary<string, string>
            {
                { "Content-Type", "application/pdf" }
            },
            Body = Convert.ToBase64String(pdf.BinaryData),
            IsBase64Encoded = true
        };
    }
}
// AWS Lambda configuration
// Use custom runtime or container deployment
// Ensure Lambda has at least 512MB memory

public class PdfLambdaFunction
{
    private readonly ChromePdfRenderer _renderer;

    public PdfLambdaFunction()
    {
        _renderer = new ChromePdfRenderer();
        // Configure for Lambda environment
        IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    }

    public async Task<APIGatewayProxyResponse> FunctionHandler(
        APIGatewayProxyRequest request,
        ILambdaContext context)
    {
        var pdf = await _renderer.RenderHtmlAsPdfAsync(request.Body);

        return new APIGatewayProxyResponse
        {
            StatusCode = 200,
            Headers = new Dictionary<string, string>
            {
                { "Content-Type", "application/pdf" }
            },
            Body = Convert.ToBase64String(pdf.BinaryData),
            IsBase64Encoded = true
        };
    }
}
Imports System.Collections.Generic
Imports System.Threading.Tasks
Imports Amazon.Lambda.APIGatewayEvents
Imports Amazon.Lambda.Core
Imports IronPdf

' AWS Lambda configuration
' Use custom runtime or container deployment
' Ensure Lambda has at least 512MB memory

Public Class PdfLambdaFunction
    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        ' Configure for Lambda environment
        IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
    End Sub

    Public Async Function FunctionHandler(
        request As APIGatewayProxyRequest,
        context As ILambdaContext) As Task(Of APIGatewayProxyResponse)

        Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(request.Body)

        Return New APIGatewayProxyResponse With {
            .StatusCode = 200,
            .Headers = New Dictionary(Of String, String) From {
                {"Content-Type", "application/pdf"}
            },
            .Body = Convert.ToBase64String(pdf.BinaryData),
            .IsBase64Encoded = True
        }
    End Function
End Class
$vbLabelText   $csharpLabel

Google Cloud-Plattform

# app.yaml for App Engine
runtime: aspnetcore
env: flex

# Use 2nd generation for Cloud Run
# Deploy with: gcloud run deploy --execution-environment gen2
# app.yaml for App Engine
runtime: aspnetcore
env: flex

# Use 2nd generation for Cloud Run
# Deploy with: gcloud run deploy --execution-environment gen2
YAML

Bereitstellung von Containern (Docker/Kubernetes)

IronPDF ist containerbereit mit voller Docker und Kubernetes-Unterstützung:

# Multi-stage Dockerfile for optimal size
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["YourApp.csproj", "./"]
RUN .NET restore
COPY . .
RUN .NET publish -c Release -o /app/publish

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
WORKDIR /app

# Install IronPDF dependencies
RUN apt-get update && apt-get install -y \
    libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
    libcups2 libxkbcommon0 libxcomposite1 libxdamage1 \
    libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2

COPY --from=build /app/publish .
ENTRYPOINT [".NET", "YourApp.dll"]

Unterstützung von Desktop-Anwendungen

IronPDF funktioniert mit allen wichtigen .NET Desktop-Frameworks:

WPF (Windows Presentation Foundation)

public partial class MainWindow : Window
{
    private async void GeneratePdfButton_Click(object sender, RoutedEventArgs e)
    {
        var renderer = new ChromePdfRenderer();
        var html = HtmlEditor.Text;

        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        var saveDialog = new SaveFileDialog
        {
            Filter = "PDF files (*.pdf)|*.pdf",
            DefaultExt = "pdf"
        };

        if (saveDialog.ShowDialog() == true)
        {
            pdf.SaveAs(saveDialog.FileName);
            MessageBox.Show("PDF saved successfully!");
        }
    }
}
public partial class MainWindow : Window
{
    private async void GeneratePdfButton_Click(object sender, RoutedEventArgs e)
    {
        var renderer = new ChromePdfRenderer();
        var html = HtmlEditor.Text;

        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        var saveDialog = new SaveFileDialog
        {
            Filter = "PDF files (*.pdf)|*.pdf",
            DefaultExt = "pdf"
        };

        if (saveDialog.ShowDialog() == true)
        {
            pdf.SaveAs(saveDialog.FileName);
            MessageBox.Show("PDF saved successfully!");
        }
    }
}
Partial Public Class MainWindow
	Inherits Window

	Private Async Sub GeneratePdfButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
		Dim renderer = New ChromePdfRenderer()
		Dim html = HtmlEditor.Text

		Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)

		Dim saveDialog = New SaveFileDialog With {
			.Filter = "PDF files (*.pdf)|*.pdf",
			.DefaultExt = "pdf"
		}

		If saveDialog.ShowDialog() = True Then
			pdf.SaveAs(saveDialog.FileName)
			MessageBox.Show("PDF saved successfully!")
		End If
	End Sub
End Class
$vbLabelText   $csharpLabel

Windows Formulare

public partial class PdfGeneratorForm : Form
{
    private void btnGeneratePdf_Click(object sender, EventArgs e)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(txtHtml.Text);

        using (var saveDialog = new SaveFileDialog())
        {
            saveDialog.Filter = "PDF files|*.pdf";
            if (saveDialog.ShowDialog() == DialogResult.OK)
            {
                pdf.SaveAs(saveDialog.FileName);
                MessageBox.Show($"PDF saved to {saveDialog.FileName}");
            }
        }
    }
}
public partial class PdfGeneratorForm : Form
{
    private void btnGeneratePdf_Click(object sender, EventArgs e)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(txtHtml.Text);

        using (var saveDialog = new SaveFileDialog())
        {
            saveDialog.Filter = "PDF files|*.pdf";
            if (saveDialog.ShowDialog() == DialogResult.OK)
            {
                pdf.SaveAs(saveDialog.FileName);
                MessageBox.Show($"PDF saved to {saveDialog.FileName}");
            }
        }
    }
}
Partial Public Class PdfGeneratorForm
	Inherits Form

	Private Sub btnGeneratePdf_Click(ByVal sender As Object, ByVal e As EventArgs)
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(txtHtml.Text)

		Using saveDialog = New SaveFileDialog()
			saveDialog.Filter = "PDF files|*.pdf"
			If saveDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
				pdf.SaveAs(saveDialog.FileName)
				MessageBox.Show($"PDF saved to {saveDialog.FileName}")
			End If
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

MAUI (Multiplattform-App UI)

public partial class MainPage : ContentPage
{
    public async Task GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync(HtmlContent);

        // Save to app's document directory
        var documentsPath = FileSystem.Current.AppDataDirectory;
        var filePath = Path.Combine(documentsPath, "output.pdf");

        await File.WriteAllBytesAsync(filePath, pdf.BinaryData);

        await DisplayAlert("Success", $"PDF saved to {filePath}", "OK");
    }
}
public partial class MainPage : ContentPage
{
    public async Task GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync(HtmlContent);

        // Save to app's document directory
        var documentsPath = FileSystem.Current.AppDataDirectory;
        var filePath = Path.Combine(documentsPath, "output.pdf");

        await File.WriteAllBytesAsync(filePath, pdf.BinaryData);

        await DisplayAlert("Success", $"PDF saved to {filePath}", "OK");
    }
}
Partial Public Class MainPage
	Inherits ContentPage

	Public Async Function GeneratePdfAsync() As Task
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = Await renderer.RenderHtmlAsPdfAsync(HtmlContent)

		' Save to app's document directory
		Dim documentsPath = FileSystem.Current.AppDataDirectory
		Dim filePath = Path.Combine(documentsPath, "output.pdf")

		Await File.WriteAllBytesAsync(filePath, pdf.BinaryData)

		Await DisplayAlert("Success", $"PDF saved to {filePath}", "OK")
	End Function
End Class
$vbLabelText   $csharpLabel

Einstieg in die PDF-Erstellung

Bereit, PDFs in Ihrer C#-Anwendung zu erstellen? Folgen Sie diesem Schritt-für-Schritt-Leitfaden, um von der Installation bis zu Ihrem ersten generierten PDF zu gelangen. IronPDF macht es einfach anzufangen, mit umfassenden Ressourcen und Support, die jeden Schritt unterstützen.

Schritt 1: Installieren Sie IronPDF

Wählen Sie die Installationsmethode, die am besten zu Ihrer Entwicklungsumgebung passt:

Visual Studio Package Manager** (Empfohlen)

  1. Öffnen Sie Ihr Projekt in Visual Studio Bereitstellung Ihrer PDF-Erstellungslösung auf allen gängigen Betriebssystemen:
  2. Wählen Sie "NuGet-Pakete verwalten"
  3. Suchen Sie nach "IronPDF"
  4. Klicken Sie auf Installieren auf dem IronPDF-Paket von Iron Software

Paket-Manager-Konsole**

Install-Package IronPdf

.NET CLI

.NET add package IronPDF

Das NuGet-Paket enthält alles, was für PDF-Generierung auf Windows, Linux und macOS benötigt wird. Für spezialisierte Bereitstellungen sollten Sie diese plattformspezifischen Pakete in Betracht ziehen, die Größe und Leistung optimieren:

  • IronPdf.Linux - Optimiert für Linux-Umgebungen
  • IronPdf.MacOs - Unterstützung für native Apple Silicon
  • IronPdf.Slim - Minimalpaket, das Abhängigkeiten zur Laufzeit herunterlädt

Schritt 2: Erstellen Sie Ihre erste PDF-Datei

Beginnen Sie mit einem einfachen Beispiel, um zu prüfen, ob alles funktioniert:

using IronPDF;

class Program
{
    static void Main()
    {
        // Create a new PDF generator instance
        var renderer = new ChromePdfRenderer();

        // Generate PDF from HTML
        var pdf = renderer.RenderHtmlAsPdf(@"
            # Welcome to IronPDF!
            <p>This is your first generated PDF document.</p>
            <p>Created on: " + DateTime.Now + "</p>"
        );

        // Save the PDF
        pdf.SaveAs("my-first-pdf.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
using IronPDF;

class Program
{
    static void Main()
    {
        // Create a new PDF generator instance
        var renderer = new ChromePdfRenderer();

        // Generate PDF from HTML
        var pdf = renderer.RenderHtmlAsPdf(@"
            # Welcome to IronPDF!
            <p>This is your first generated PDF document.</p>
            <p>Created on: " + DateTime.Now + "</p>"
        );

        // Save the PDF
        pdf.SaveAs("my-first-pdf.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
Imports IronPDF

Class Program
    Shared Sub Main()
        ' Create a new PDF generator instance
        Dim renderer = New ChromePdfRenderer()

        ' Generate PDF from HTML
        Dim pdf = renderer.RenderHtmlAsPdf("
            # Welcome to IronPDF!
            <p>This is your first generated PDF document.</p>
            <p>Created on: " & DateTime.Now & "</p>"
        )

        ' Save the PDF
        pdf.SaveAs("my-first-pdf.pdf")

        Console.WriteLine("PDF created successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

Schritt 3: Beispiele und Tutorials erkunden

IronPDF bietet umfassende Ressourcen, um Sie bei der Beherrschung der PDF-Erstellung zu unterstützen:

  1. Code-Beispiele - Fertige Code-Snippets für gängige Szenarien
  2. Tutorials - Schritt-für-Schritt-Anleitungen für spezifische Funktionen
  3. Anleitungen - Praxislösungen für reale Probleme
  4. API-Referenz - Umfassende Dokumentation aller Klassen und Methoden

Schritt 4: Bei Bedarf Hilfe in Anspruch nehmen

IronPDF bietet mehrere Supportkanäle, um Ihren Erfolg zu gewährleisten:

Schritt 5: Entwicklung und Einsatz

Kostenlose Entwicklungslizenz

IronPDF ist für die Entwicklung und das Testen kostenlos. Sie können alle Funktionen ohne Einschränkungen während der Entwicklung erkunden. Wasserzeichen erscheinen auf generierten PDFs im Entwicklungsmodus, beeinträchtigen jedoch nicht die Funktionalität.

Produktionseinsatzoptionen

Wenn Sie bereit für den Einsatz in der Produktion sind, bietet IronPDF flexible Lizenzierungsoptionen:

  1. Kostenlose Testversion - Erhalten Sie eine 30-tägige Testlizenz, um in der Produktion ohne Wasserzeichen zu testen
  2. Kommerzielle Lizenzen - Beginnend bei $999 für den Einsatz in einem einzelnen Projekt
  3. Unternehmenslösungen - Individuelle Pakete für große Organisationen

Um eine Lizenz in Ihrem Code anzuwenden:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Schritt 6: Auf dem Laufenden bleiben

Halten Sie Ihre PDF-Generierungsfähigkeiten aktuell:

Regelmäßige Updates sorgen für Kompatibilität mit den neuesten .NET-Versionen und beinhalten Leistungsverbesserungen, neue Funktionen und Sicherheitsupdates.

Warum IronPDF für die PDF-Erstellung in C#35?

Nach der Erkundung verschiedener Ansätze für die Erstellung von PDFs in C# fragen Sie sich vielleicht, warum IronPDF die bevorzugte Wahl für viele Entwickler ist. Es geht nicht nur um Funktionen - es geht um die gesamte Entwicklererfahrung, von der anfänglichen Implementierung bis zur langfristigen Wartung, wenn Sie PDFs in .NET generieren müssen. Mit über 14 Millionen Entwicklern, die IronPDF weltweit als ihren C# PDF-Generator verwenden, ist es zum de facto Standard für die PDF-Generierung in .NET-Anwendungen geworden. Lassen Sie uns untersuchen, warum Entwickler IronPDF für ihre Anforderungen zur PDF-Erstellung in C# wählen.

Pixelgenaues Rendering

Im Gegensatz zu anderen PDF-Bibliotheken, die Annäherungen an Ihre HTML-Designs erzeugen, verwendet IronPDF eine echte Chromium-Engine, um sicherzustellen, dass Ihre PDFs genau so aussehen, wie sie in einem modernen Webbrowser aussehen würden. Diese Fähigkeit zur pixelgenauen Wiedergabe ist der Grund, warum Finanzinstitute IronPDF vertrauen, um behördliche Berichte zu generieren, bei denen Präzision zählt. Ihre CSS-Grid-Layouts, Flexbox-Designs und JavaScript-gerenderten Inhalte funktionieren alle perfekt. Keine Kämpfe mehr mit proprietären Layout-Engines oder das Akzeptieren von 'nahezu genug' Ergebnissen, wenn Sie PDF-Dokumente erstellen.

Entwicklerfreundliches API

Die API von IronPDF ist von Entwicklern für Entwickler konzipiert. Die Einfachheit der API ist der Grund, warum Startups ihre PDF-Generierung in Stunden und nicht in Tagen zum Laufen bringen können. Statt komplexe PDF-Spezifikationen zu erlernen, arbeiten Sie mit vertrauten Konzepten:


using IronPDF;

// Other libraries might require this:
// document.Add(new Paragraph("Hello World"));
// document.Add(new Table(3, 2));
// cell.SetBackgroundColor(ColorConstants.LIGHT_GRAY);

// With IronPDF, just use HTML:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
    # Hello World
    <table>
        <tr style='background: lightgray;'>
            <td>Simple</td>
            <td>Intuitive</td>
        </tr>
    </table>
");

### Enterprise-Ready Features

IronPDF includes features that **enterprise applications demand**, which is why Fortune 500 companies rely on it for mission-critical *document generation*:

- **Security:** Encryption, digital signatures, and permission controls protect sensitive documents
- **Compliance:** [PDF/A](/how-to/pdfa/) and [PDF/UA](/how-to/pdfua/) support ensures your *generated PDFs* meet regulatory requirements
- **Performance:** Async operations and batch processing handle millions of documents efficiently
- **Reliability:** Extensive error handling and logging help maintain uptime in production

### Outstanding Support

When you need help, IronPDF's support team consists of **actual engineers** who understand your challenges. With **24/7 live chat support** and typical response times **under 30 seconds**, you're never stuck waiting for answers. This level of support is why developers consistently rate IronPDF as having the best support in the industry. The support team can help with everything from basic questions to complex implementation challenges, ensuring your *PDF generation* projects succeed.

### Transparent Pricing

**No hidden fees**, **no surprise costs**, **no per-server licensing complications**. IronPDF's straightforward licensing model means you know exactly what you're paying for. Development is **always free**, and production licenses are **perpetual** - you own them forever. This transparency is refreshing in an industry known for complex licensing schemes.

### Active Development

IronPDF is **continuously improved** with monthly updates that add features, enhance performance, and ensure compatibility with the latest .NET releases. The team actively monitors customer feedback and implements requested features regularly. Recent additions include [enhanced form handling](/examples/form-data/), improved [PDF editing capabilities](/examples/editing-pdfs/), and optimizations for cloud deployments.

### Real-World Success Stories

**Thousands of companies** across industries trust IronPDF for mission-critical ***PDF generation*:

- **Finance:** Banks *generate millions of statements* and reports monthly using IronPDF's secure document features
- **Healthcare:** Hospitals ***create patient records*** and lab results with HIPAA-compliant security settings
- **E-commerce:** Online retailers produce invoices and shipping labels at scale, handling peak loads effortlessly
- **Government:** Agencies ***generate official documents*** and forms with digital signatures and encryption

These organizations choose IronPDF because it delivers consistent results at scale - whether *generating* a single invoice or processing millions of documents daily.

## How Does IronPDF Compare to Other C&#35; PDF Libraries?

Choosing the right **PDF library** is crucial for your project's success when you need to ***generate PDFs in C#***. Let's look at how IronPDF compares to other popular options in the **.NET ecosystem** for **PDF creation**. This comparison is based on real-world usage, developer feedback, and technical capabilities for those looking to **build PDFs in .NET**. Understanding these differences helps you choose the best **C# PDF generator** for your specific needs.

### Comparison Table

<div class='comparison-platform-pricing-table'>
<div class="card">
<div class="scroll">
<table id="t">
<colgroup>
  <col class="c0"/>
  <col class="c1"/>
  <col class="cx"/><col class="cx"/><col class="cx"/>
  <col class="cx"/><col class="cx"/><col class="cx"/>
  <col class="cx"/><col class="cx"/><col class="cx"/>
  <col class="cx"/>
</colgroup>
<thead id="thead"></thead>
<tbody id="tbody"></tbody>
</table>
</div>
</div>

</div>

### Detaillierte Vergleiche

#### IronPDF vs wkhtmltopdf

- wkhtmltopdf ist kostenlos, wurde aber 2020 eingestellt und erzeugt veraltet wirkende PDFs
- Erfordert plattformspezifische ausführbare Dateien, die die Bereitstellung erschweren
- Fehlende JavaScript-Unterstützung bedeutet, dass moderne Webanwendungen nicht korrekt dargestellt werden
- IronPDF bietet modernes Rendering ohne externe Abhängigkeiten

#### IronPDF vs QuestPDF

- QuestPDF erfordert den vollständigen Aufbau von PDFs in C#-Code ohne HTML-Unterstützung
- Gut für die programmatische PDF-Erstellung, aber zeitaufwendig bei komplexen Layouts
- Kürzlich von einer MIT-Lizenz auf eine kommerzielle Lizenzierung umgestellt
- Mit IronPDF nutzen Sie die HTML-/CSS-Kenntnisse, die Sie bereits haben

#### IronPDF vs iText

- iText verwendet eine AGPL-Lizenz, die Ihre gesamte Codebasis „infizieren" kann
- Kommerzielle Lizenzen beginnen bei 1.999 $ bei komplexer Preisgestaltung
- Eingeschränkte HTML-zu-PDF-Funktionen mit schwacher CSS-Unterstützung
- IronPDF bietet ein besseres HTML-Rendering zu einem niedrigeren Preis

#### IronPDF vs PDFSharp

- PDFSharp eignet sich hervorragend für die PDF-Bearbeitung auf niedriger Ebene, bietet aber keinerlei HTML-Unterstützung
- Erfordert die manuelle Positionierung jedes einzelnen Elements auf der Seite
- Kostenlos und Open Source, aber funktional sehr eingeschränkt
- IronPDF beherrscht sowohl High-Level-HTML- als auch Low-Level-PDF-Operationen

#### IronPDF vs Syncfusion/Aspose.PDF

- Beide sind Enterprise-Lösungen mit guten Funktionen, aber höheren Preisen
- Syncfusion startet bei 2.995 $, Aspose bei 2.499 $
- Keines der beiden erreicht das gleiche pixelgenaue HTML-Rendering wie IronPDF
- IronPDF bietet ein besseres Preis-Leistungs-Verhältnis bei vergleichbaren Enterprise-Funktionen

### Migrationspfade

Viele Entwickler wechseln von anderen Bibliotheken zu IronPDF. Hier ist der Grund:

#### Von wkhtmltopdf

- „Wir hatten es satt, mit plattformspezifischen Binärdateien und veraltetem Rendering zu kämpfen"
- „IronPDF brachte uns moderne CSS-Unterstützung und beseitigte unsere Docker-Probleme"

#### Von iText/iText 7

- „Die Lernkurve hat unsere Produktivität ausgebremst – mit IronPDF konnten wir stattdessen HTML verwenden"
- „Die AGPL-Lizenzierung war für unser kommerzielles Produkt ein Ausschlusskriterium"

#### Von PDFSharp

- „Wir brauchten eine HTML-zu-PDF-Konvertierung, die PDFSharp schlicht nicht bietet"
- „Jedes Element manuell zu positionieren, hat ewig gedauert"

#### Von QuestPDF

- „Layouts in C#-Code zu erstellen war mühsam im Vergleich zur Verwendung von HTML/CSS"
- „Die jüngste Lizenzänderung brachte uns dazu, unsere Optionen zu überdenken"

## Fazit

***PDFs in C# zu erstellen*** muss nicht kompliziert sein. Mit IronPDF können Sie **professionelle PDF-Dokumente generieren** – mit den HTML- und CSS-Kenntnissen, die Sie bereits haben. Ob Sie einfache Berichte oder komplexe Dokumente mit Diagrammen und Formularen erstellen: IronPDF übernimmt die Schwerarbeit, sodass Sie sich **auf Ihre Anwendungslogik konzentrieren** können. Schließen Sie sich den **14 Millionen Entwicklern weltweit** an, die IronPDF als ihren **C#-PDF-Generator** vertrauen, um ***PDFs*** zuverlässig und effizient ***zu erzeugen***.

In diesem Leitfaden haben wir untersucht, wie Sie ***PDF-Dokumente erstellen*** können – mit mehreren Ansätzen, von HTML-Strings und URLs bis hin zur Konvertierung bestehender Dateien wie Word-Dokumente und Markdown. Wir haben gesehen, wie die **moderne Chromium-basierte Rendering-Engine** von IronPDF **pixelgenaue Ergebnisse** liefert, die tatsächlich wie Ihre Webdesigns aussehen – nicht wie veraltete Druckerausgaben. Die Möglichkeit, **PDF-Dokumente** programmatisch **zu bearbeiten**, Sicherheitsfunktionen hinzuzufügen und die Leistung zu optimieren, macht IronPDF zu einer **umfassenden Lösung** für alle Ihre ***PDF-Generierungsaufgaben*** in .NET.

Was IronPDF auszeichnet, ist sein **entwicklerorientierter Ansatz**. Mit nur drei Codezeilen können Sie ***Ihr erstes PDF generieren***. Die intuitive API bedeutet, dass Sie **weniger Zeit mit dem Erlernen** proprietärer PDF-Syntax verbringen und **mehr Zeit mit dem Entwickeln von Funktionen**. In Kombination mit **exzellentem Support** von [echten Ingenieuren](#live-chat-support), **transparenter Preisgestaltung** und **kontinuierlichen Updates** (einschließlich Vorab-Unterstützung für .NET 10) gibt Ihnen IronPDF die Gewissheit, dass Ihre ***PDF-Erstellung in C#*** heute und in Zukunft funktioniert.

Beginnen Sie noch heute mit dem ***Erstellen von PDFs*** – **[holen Sie sich Ihre kostenlose Testlizenz](trial-license)** und erleben Sie, wie einfach ***PDF-Generierung in .NET*** in Ihren Anwendungen sein kann. Mit IronPDF werden Sie in wenigen Minuten ***professionelle PDFs generieren*** – nicht in Stunden.

**Bereit, Ihr erstes PDF zu erstellen?** **[Jetzt mit IronPDF starten](trial-license)** – die Nutzung ist für die Entwicklung kostenlos, und Sie werden in wenigen Minuten ***PDFs mit C# erstellen***.

Hinweis:Aspose, iText, wkhtmltopdf, QuestPDF, PDFSharp und Syncfusion sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Website steht in keiner Verbindung zu Aspose, iText, wkhtmltopdf, QuestPDF, PDFSharp oder Syncfusion und wird von diesen weder unterstützt noch gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. Vergleiche dienen ausschließlich Informationszwecken und basieren auf öffentlich zugänglichen Informationen zum Zeitpunkt der Erstellung.

using IronPDF;

// Other libraries might require this:
// document.Add(new Paragraph("Hello World"));
// document.Add(new Table(3, 2));
// cell.SetBackgroundColor(ColorConstants.LIGHT_GRAY);

// With IronPDF, just use HTML:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
    # Hello World
    <table>
        <tr style='background: lightgray;'>
            <td>Simple</td>
            <td>Intuitive</td>
        </tr>
    </table>
");

### Enterprise-Ready Features

IronPDF includes features that **enterprise applications demand**, which is why Fortune 500 companies rely on it for mission-critical *document generation*:

- **Security:** Encryption, digital signatures, and permission controls protect sensitive documents
- **Compliance:** [PDF/A](/how-to/pdfa/) and [PDF/UA](/how-to/pdfua/) support ensures your *generated PDFs* meet regulatory requirements
- **Performance:** Async operations and batch processing handle millions of documents efficiently
- **Reliability:** Extensive error handling and logging help maintain uptime in production

### Outstanding Support

When you need help, IronPDF's support team consists of **actual engineers** who understand your challenges. With **24/7 live chat support** and typical response times **under 30 seconds**, you're never stuck waiting for answers. This level of support is why developers consistently rate IronPDF as having the best support in the industry. The support team can help with everything from basic questions to complex implementation challenges, ensuring your *PDF generation* projects succeed.

### Transparent Pricing

**No hidden fees**, **no surprise costs**, **no per-server licensing complications**. IronPDF's straightforward licensing model means you know exactly what you're paying for. Development is **always free**, and production licenses are **perpetual** - you own them forever. This transparency is refreshing in an industry known for complex licensing schemes.

### Active Development

IronPDF is **continuously improved** with monthly updates that add features, enhance performance, and ensure compatibility with the latest .NET releases. The team actively monitors customer feedback and implements requested features regularly. Recent additions include [enhanced form handling](/examples/form-data/), improved [PDF editing capabilities](/examples/editing-pdfs/), and optimizations for cloud deployments.

### Real-World Success Stories

**Thousands of companies** across industries trust IronPDF for mission-critical ***PDF generation*:

- **Finance:** Banks *generate millions of statements* and reports monthly using IronPDF's secure document features
- **Healthcare:** Hospitals ***create patient records*** and lab results with HIPAA-compliant security settings
- **E-commerce:** Online retailers produce invoices and shipping labels at scale, handling peak loads effortlessly
- **Government:** Agencies ***generate official documents*** and forms with digital signatures and encryption

These organizations choose IronPDF because it delivers consistent results at scale - whether *generating* a single invoice or processing millions of documents daily.

## How Does IronPDF Compare to Other C&#35; PDF Libraries?

Choosing the right **PDF library** is crucial for your project's success when you need to ***generate PDFs in C#***. Let's look at how IronPDF compares to other popular options in the **.NET ecosystem** for **PDF creation**. This comparison is based on real-world usage, developer feedback, and technical capabilities for those looking to **build PDFs in .NET**. Understanding these differences helps you choose the best **C# PDF generator** for your specific needs.

### Comparison Table

<div class='comparison-platform-pricing-table'>
<div class="card">
<div class="scroll">
<table id="t">
<colgroup>
  <col class="c0"/>
  <col class="c1"/>
  <col class="cx"/><col class="cx"/><col class="cx"/>
  <col class="cx"/><col class="cx"/><col class="cx"/>
  <col class="cx"/><col class="cx"/><col class="cx"/>
  <col class="cx"/>
</colgroup>
<thead id="thead"></thead>
<tbody id="tbody"></tbody>
</table>
</div>
</div>

</div>

### Detaillierte Vergleiche

#### IronPDF vs wkhtmltopdf

- wkhtmltopdf ist kostenlos, wurde aber 2020 eingestellt und erzeugt veraltet wirkende PDFs
- Erfordert plattformspezifische ausführbare Dateien, die die Bereitstellung erschweren
- Fehlende JavaScript-Unterstützung bedeutet, dass moderne Webanwendungen nicht korrekt dargestellt werden
- IronPDF bietet modernes Rendering ohne externe Abhängigkeiten

#### IronPDF vs QuestPDF

- QuestPDF erfordert den vollständigen Aufbau von PDFs in C#-Code ohne HTML-Unterstützung
- Gut für die programmatische PDF-Erstellung, aber zeitaufwendig bei komplexen Layouts
- Kürzlich von einer MIT-Lizenz auf eine kommerzielle Lizenzierung umgestellt
- Mit IronPDF nutzen Sie die HTML-/CSS-Kenntnisse, die Sie bereits haben

#### IronPDF vs iText

- iText verwendet eine AGPL-Lizenz, die Ihre gesamte Codebasis „infizieren" kann
- Kommerzielle Lizenzen beginnen bei 1.999 $ bei komplexer Preisgestaltung
- Eingeschränkte HTML-zu-PDF-Funktionen mit schwacher CSS-Unterstützung
- IronPDF bietet ein besseres HTML-Rendering zu einem niedrigeren Preis

#### IronPDF vs PDFSharp

- PDFSharp eignet sich hervorragend für die PDF-Bearbeitung auf niedriger Ebene, bietet aber keinerlei HTML-Unterstützung
- Erfordert die manuelle Positionierung jedes einzelnen Elements auf der Seite
- Kostenlos und Open Source, aber funktional sehr eingeschränkt
- IronPDF beherrscht sowohl High-Level-HTML- als auch Low-Level-PDF-Operationen

#### IronPDF vs Syncfusion/Aspose.PDF

- Beide sind Enterprise-Lösungen mit guten Funktionen, aber höheren Preisen
- Syncfusion startet bei 2.995 $, Aspose bei 2.499 $
- Keines der beiden erreicht das gleiche pixelgenaue HTML-Rendering wie IronPDF
- IronPDF bietet ein besseres Preis-Leistungs-Verhältnis bei vergleichbaren Enterprise-Funktionen

### Migrationspfade

Viele Entwickler wechseln von anderen Bibliotheken zu IronPDF. Hier ist der Grund:

#### Von wkhtmltopdf

- „Wir hatten es satt, mit plattformspezifischen Binärdateien und veraltetem Rendering zu kämpfen"
- „IronPDF brachte uns moderne CSS-Unterstützung und beseitigte unsere Docker-Probleme"

#### Von iText/iText 7

- „Die Lernkurve hat unsere Produktivität ausgebremst – mit IronPDF konnten wir stattdessen HTML verwenden"
- „Die AGPL-Lizenzierung war für unser kommerzielles Produkt ein Ausschlusskriterium"

#### Von PDFSharp

- „Wir brauchten eine HTML-zu-PDF-Konvertierung, die PDFSharp schlicht nicht bietet"
- „Jedes Element manuell zu positionieren, hat ewig gedauert"

#### Von QuestPDF

- „Layouts in C#-Code zu erstellen war mühsam im Vergleich zur Verwendung von HTML/CSS"
- „Die jüngste Lizenzänderung brachte uns dazu, unsere Optionen zu überdenken"

## Fazit

***PDFs in C# zu erstellen*** muss nicht kompliziert sein. Mit IronPDF können Sie **professionelle PDF-Dokumente generieren** – mit den HTML- und CSS-Kenntnissen, die Sie bereits haben. Ob Sie einfache Berichte oder komplexe Dokumente mit Diagrammen und Formularen erstellen: IronPDF übernimmt die Schwerarbeit, sodass Sie sich **auf Ihre Anwendungslogik konzentrieren** können. Schließen Sie sich den **14 Millionen Entwicklern weltweit** an, die IronPDF als ihren **C#-PDF-Generator** vertrauen, um ***PDFs*** zuverlässig und effizient ***zu erzeugen***.

In diesem Leitfaden haben wir untersucht, wie Sie ***PDF-Dokumente erstellen*** können – mit mehreren Ansätzen, von HTML-Strings und URLs bis hin zur Konvertierung bestehender Dateien wie Word-Dokumente und Markdown. Wir haben gesehen, wie die **moderne Chromium-basierte Rendering-Engine** von IronPDF **pixelgenaue Ergebnisse** liefert, die tatsächlich wie Ihre Webdesigns aussehen – nicht wie veraltete Druckerausgaben. Die Möglichkeit, **PDF-Dokumente** programmatisch **zu bearbeiten**, Sicherheitsfunktionen hinzuzufügen und die Leistung zu optimieren, macht IronPDF zu einer **umfassenden Lösung** für alle Ihre ***PDF-Generierungsaufgaben*** in .NET.

Was IronPDF auszeichnet, ist sein **entwicklerorientierter Ansatz**. Mit nur drei Codezeilen können Sie ***Ihr erstes PDF generieren***. Die intuitive API bedeutet, dass Sie **weniger Zeit mit dem Erlernen** proprietärer PDF-Syntax verbringen und **mehr Zeit mit dem Entwickeln von Funktionen**. In Kombination mit **exzellentem Support** von [echten Ingenieuren](#live-chat-support), **transparenter Preisgestaltung** und **kontinuierlichen Updates** (einschließlich Vorab-Unterstützung für .NET 10) gibt Ihnen IronPDF die Gewissheit, dass Ihre ***PDF-Erstellung in C#*** heute und in Zukunft funktioniert.

Beginnen Sie noch heute mit dem ***Erstellen von PDFs*** – **[holen Sie sich Ihre kostenlose Testlizenz](trial-license)** und erleben Sie, wie einfach ***PDF-Generierung in .NET*** in Ihren Anwendungen sein kann. Mit IronPDF werden Sie in wenigen Minuten ***professionelle PDFs generieren*** – nicht in Stunden.

**Bereit, Ihr erstes PDF zu erstellen?** **[Jetzt mit IronPDF starten](trial-license)** – die Nutzung ist für die Entwicklung kostenlos, und Sie werden in wenigen Minuten ***PDFs mit C# erstellen***.

Hinweis:Aspose, iText, wkhtmltopdf, QuestPDF, PDFSharp und Syncfusion sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Website steht in keiner Verbindung zu Aspose, iText, wkhtmltopdf, QuestPDF, PDFSharp oder Syncfusion und wird von diesen weder unterstützt noch gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. Vergleiche dienen ausschließlich Informationszwecken und basieren auf öffentlich zugänglichen Informationen zum Zeitpunkt der Erstellung.
Imports IronPDF

' Other libraries might require this:
' document.Add(New Paragraph("Hello World"))
' document.Add(New Table(3, 2))
' cell.SetBackgroundColor(ColorConstants.LIGHT_GRAY)

' With IronPDF, just use HTML:
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("
    # Hello World
    <table>
        <tr style='background: lightgray;'>
            <td>Simple</td>
            <td>Intuitive</td>
        </tr>
    </table>
")
$vbLabelText   $csharpLabel

Häufig gestellte Fragen

Wie kann ich eine PDF aus HTML-Inhalt in C# erstellen?

Sie können ein PDF aus HTML-Inhalten in C# erstellen, indem Sie die RenderHtmlAsPdf-Methode von IronPDF verwenden. Dies ermöglicht es Ihnen, HTML-Strings oder URLs direkt in PDF-Dokumente zu konvertieren.

Was sind die Vorteile der Verwendung einer kommerziellen PDF-Bibliothek gegenüber einer kostenlosen?

Kommerzielle PDF-Bibliotheken wie IronPDF bieten robuste Funktionen wie volle Unterstützung for JavaScript, CSS3 und reaktionsfähige Layouts. Sie bieten zuverlässige Leistung, regelmäßige Updates, umfassenden Support und sind für die Erstellung hochwertiger PDFs optimiert.

Kann IronPDF zur Generierung von PDFs in ASP.NET MVC-Anwendungen verwendet werden?

Ja, IronPDF kann in ASP.NET MVC-Anwendungen verwendet werden, um Razor-Ansichten oder HTML-Vorlagen in PDFs zu konvertieren, sodass Sie die PDF-Erstellung nahtlos in Ihre Webanwendungen integrieren können.

Wie kann ich Bilder und CSS in meine PDF-Dokumente mit C# integrieren?

Mit IronPDF können Sie Bilder und CSS ganz einfach in Ihre PDF-Dokumente integrieren. Dies kann erreicht werden, indem Sie Bild-Tags und CSS-Stile in Ihrem HTML-Inhalt platzieren, bevor Sie es mit den Rendering-Fähigkeiten von IronPDF in PDF umwandeln.

Ist es möglich, Kopfzeilen, Fußzeilen und Seitenzahlen in PDFs in C# hinzuzufügen?

Ja, IronPDF bietet erweiterte Funktionen, mit denen Sie Kopfzeilen, Fußzeilen und Seitenzahlen zu Ihren PDF-Dokumenten hinzufügen können. Dies kann durch die Konfiguration der PDF-Einstellungen erfolgen, bevor Sie Ihren HTML-Inhalt rendern.

Wie kann ich XML-Daten bei der Erstellung von PDFs in C# handhaben?

Mit IronPDF können Sie XML-Daten verarbeiten, indem Sie Ihr XML in HTML umwandeln oder XSLT verwenden, um das XML zu formatieren, das dann mit der RenderHtmlAsPdf-Methode von IronPDF in ein PDF-Dokument konvertiert werden kann.

Was sind die häufigsten Herausforderungen bei der Erstellung von PDFs in C#?

Häufige Herausforderungen umfassen die Aufrechterhaltung der Layout-Konsistenz, die Handhabung komplexer CSS und JavaScript sowie die Sicherstellung einer genauen Wiedergabe von Webtechnologien. IronPDF adressiert diese Herausforderungen mit seiner modernen Chromium-Engine und umfangreicher Unterstützung für HTML5- und CSS3-Standards.

Wie kann ich große PDFs effizient mit C# generieren?

IronPDF ist so konzipiert, dass es die Erstellung großer PDFs effizient handhaben kann. Es verwendet eine leistungsstarke Render-Engine und unterstützt asynchrone Operationen, um große Dokumente mühelos zu verwalten.

Kann ich IronPDF ohne kommerzielle Lizenz testen?

Ja, IronPDF bietet eine kostenlose Lizenz für Entwicklungs- und Testzwecke an, sodass Sie seine Funktionen vor dem Kauf einer kommerziellen Lizenz für die Produktionsnutzung evaluieren können.

.NET 10-Kompatibilität: Kann ich IronPDF mit .NET 10 verwenden, und gibt es dabei besondere Überlegungen?

Ja, IronPDF ist vollständig mit .NET 10 kompatibel. Es unterstützt .NET 10 standardmäßig, auch in Projekten für Windows, Linux, Containerumgebungen und Webframeworks. Es ist keine spezielle Konfiguration erforderlich – installieren Sie einfach das neueste IronPDF NuGet-Paket, und es funktioniert nahtlos mit .NET 10.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an