Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Wie man von WebView2 zu IronPDF in C# migriert

Migrieren von WebView2zu IronPDF: Ein komplettes C# Entwicklerhandbuch

WebView2, Microsofts einbettbares Edge/Chromium-Browser-Steuerelement, bietet Entwicklern eine Möglichkeit zur Anzeige von Webinhalten in Windows-Anwendungen. Wenn Entwicklungsteams jedoch versuchen, WebView2für die PDF-Generierung zu nutzen, stoßen sie auf gravierende architektonische Einschränkungen, die es für Produktionsumgebungen ungeeignet machen. WebView2ist ein Steuerelement zur Browsereinbettung, das für UI-Anwendungen entwickelt wurde, und keine Bibliothek zur PDF-Erzeugung.

Dieser Leitfaden bietet einen vollständigen Migrationspfad von WebView2zu IronPDF, mit Schritt-für-Schritt-Anleitungen, Code-Vergleichen und praktischen Beispielen für professionelle .NET-Entwickler, die eine zuverlässige PDF-Erzeugung in ihren Anwendungen benötigen.

Kritische Warnung: WebView2ist NICHT für die PDF-Erzeugung geeignet

Bevor der Migrationspfad untersucht wird, müssen Entwicklungsteams verstehen, warum WebView2bei der PDF-Erstellung erhebliche Probleme verursacht:

Problem Auswirkungen Schweregrad
Speicherlecks WebView2hat gut dokumentierte Speicherlecks in langlaufenden Prozessen. Ihr Server wird abstürzen. KRITISCH
Nur für Windows Keine Unterstützung für Linux, macOS, Docker oder Cloud-Umgebungen KRITISCH
UI Thread erforderlich Muss auf STA Thread mit Message Pump laufen. Kann nicht in Webservern oder APIs arbeiten. KRITISCH
Nicht für PDFs geeignet PrintToPdfAsync ist ein nachträglicher Einfall, keine Kernfunktion HOCH
Instabil in Dienstleistungen Häufige Abstürze und Hänger bei Windows-Diensten und Hintergrundarbeitern HOCH
Komplexer asynchroner Fluss Navigationsereignisse, Rückrufe zum Abschluss, Race Conditions HOCH
Edge Runtime-Abhängigkeit Erfordert die Installation von Edge WebView2Runtime auf dem Zielrechner MEDIUM
Kein Headless-Modus Erstellt immer UI-Elemente, auch wenn sie versteckt sind MEDIUM
Leistung Langsames Starten, hoher Ressourcenverbrauch MEDIUM
Keine professionelle Unterstützung Microsoft unterstützt den Anwendungsfall der PDF-Generierung nicht MEDIUM

Fehlerszenarien in der realen Welt

Diese Codemuster führen zu Produktionsfehlern:

// DANGER: This code WILL cause problems in production

// Problem1: Memory leak - creates new WebView2for each PDF
public async Task<byte[]> GeneratePdf(string html) // Called 1000x/day = server crash
{
    using var webView = new WebView2(); // Memory not fully released!
    await webView.EnsureCoreWebView2Async();
    webView.CoreWebView2.NavigateToString(html);
    // ... memory accumulates until OOM
}

// Problem2: UI thread requirement - crashes in ASP.NET
public IActionResult GenerateReport() // FAILS - no STA thread
{
    var webView = new WebView2(); // InvalidOperationException
}

// Problem3: Windows Service instability
public class PdfService : BackgroundService // Random crashes
{
    protected override async Task ExecuteAsync(CancellationToken token)
    {
        // WebView2+ no message pump = hangs, crashes, undefined behavior
    }
}
// DANGER: This code WILL cause problems in production

// Problem1: Memory leak - creates new WebView2for each PDF
public async Task<byte[]> GeneratePdf(string html) // Called 1000x/day = server crash
{
    using var webView = new WebView2(); // Memory not fully released!
    await webView.EnsureCoreWebView2Async();
    webView.CoreWebView2.NavigateToString(html);
    // ... memory accumulates until OOM
}

// Problem2: UI thread requirement - crashes in ASP.NET
public IActionResult GenerateReport() // FAILS - no STA thread
{
    var webView = new WebView2(); // InvalidOperationException
}

// Problem3: Windows Service instability
public class PdfService : BackgroundService // Random crashes
{
    protected override async Task ExecuteAsync(CancellationToken token)
    {
        // WebView2+ no message pump = hangs, crashes, undefined behavior
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFvs. WebView2: Funktionsvergleich

Das Verständnis der architektonischen Unterschiede hilft technischen Entscheidungsträgern, die Investition in die Migration zu bewerten:

Aspekt WebView2 IronPDF
Zweck Browser-Steuerung (UI) PDF-Bibliothek (entwickelt für PDF)
Produktionsreif NO YES
Speichermanagement Lecks in langlaufenden Stabil, ordnungsgemäß entsorgt
Windows, Linux, macOS, Docker, Azure, AWS. Nur für Windows Windows, Linux, macOS, Docker
Thread-Anforderungen STA + Message Pump Jedes Thema
Server/Cloud Nicht unterstützt Volle Unterstützung
Azure/AWS/GCP Problematisch Funktioniert perfekt
Docker Nicht möglich Offizielle Bilder verfügbar
ASP.NET Core Kann nicht arbeiten Erstklassige Unterstützung
Hintergrunddienste Unstabil Stabile
Unterstützte Kontexte Nur WinForms/WPF Jeder .NET-Kontext: Konsole, Web, Desktop
HTML zu PDF Basic Voll
URL zu PDF Basic Voll
Kopf-/Fußzeilen NO Ja (HTML)
Wasserzeichen NO Ja
PDFs zusammenführen NO Ja
PDFs aufteilen NO Ja
Digitale Signaturen NO Ja
Passwortschutz NO Ja
PDF/A-Konformität NO Ja
Professionelle Unterstützung Keine für PDF Ja
Dokumentation Beschränkt Umfangreiche

Schnellstart: WebView2zuIronPDFMigration

Mit diesen grundlegenden Schritten kann die Migration sofort beginnen.

Schritt 1: WebView2-Paket entfernen

dotnet remove package Microsoft.Web.WebView2
dotnet remove package Microsoft.Web.WebView2
SHELL

Oder aus Ihrer Projektdatei entfernen:

<!-- REMOVE these packages -->
<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />
<!-- REMOVE these packages -->
<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />
XML

Schritt 2:IronPDFinstallieren

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Schritt 3: Namespaces aktualisieren

Ersetzen Sie die WebView2-Namensräume durch den IronPdf-Namensraum:

// Before (WebView2)
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;

// After (IronPDF)
using IronPdf;
// Before (WebView2)
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Schritt 4: Lizenz initialisieren

Hinzufügen der Lizenzinitialisierung beim Start der Anwendung:

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

Beispiele für die Code-Migration

Konvertierung von HTML in PDF

Der grundlegendste Vorgang offenbart den Komplexitätsunterschied zwischen diesen .NET-PDF-Ansätzen.

WebView2 Ansatz:

// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;

class Program
{
    static async Task Main()
    {
        var webView = new WebView2();
        await webView.EnsureCoreWebView2Async();

        webView.CoreWebView2.NavigateToString("<html><body><h1>Hello World</h1></body></html>");
        await Task.Delay(2000);

        await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
            "Page.printToPDF",
            "{}"
        );
    }
}
// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;

class Program
{
    static async Task Main()
    {
        var webView = new WebView2();
        await webView.EnsureCoreWebView2Async();

        webView.CoreWebView2.NavigateToString("<html><body><h1>Hello World</h1></body></html>");
        await Task.Delay(2000);

        await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
            "Page.printToPDF",
            "{}"
        );
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die WebView2-Version erfordert asynchrone Initialisierung mit EnsureCoreWebView2Async(), Navigation über NavigateToString(), eine unzuverlässige Task.Delay(2000), um auf das Rendering zu warten, und Interaktion mit dem DevTools Protocol. MitIronPDFentfällt diese Zeremonie komplett: Renderer erstellen, HTML rendern, speichern.

Für fortgeschrittene HTML-zu-PDF-Szenarien siehe den HTML-zu-PDF-Konvertierungsleitfaden.

Konvertierung von URLs zu PDF

Die URL-zu-PDF-Konvertierung demonstriert den komplexen asynchronen Navigationsfluss von WebView2.

WebView2 Ansatz:

// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;

class Program
{
    static async Task Main()
    {
        var webView = new WebView2();
        await webView.EnsureCoreWebView2Async();

        var tcs = new TaskCompletionSource<bool>();
        webView.CoreWebView2.NavigationCompleted += (s, e) => tcs.SetResult(true);

        webView.CoreWebView2.Navigate("https://example.com");
        await tcs.Task;
        await Task.Delay(1000);

        var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
            "Page.printToPDF",
            "{\"printBackground\": true}"
        );

        var base64 = System.Text.Json.JsonDocument.Parse(result).RootElement.GetProperty("data").GetString();
        File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64));
    }
}
// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;

class Program
{
    static async Task Main()
    {
        var webView = new WebView2();
        await webView.EnsureCoreWebView2Async();

        var tcs = new TaskCompletionSource<bool>();
        webView.CoreWebView2.NavigationCompleted += (s, e) => tcs.SetResult(true);

        webView.CoreWebView2.Navigate("https://example.com");
        await tcs.Task;
        await Task.Delay(1000);

        var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
            "Page.printToPDF",
            "{\"printBackground\": true}"
        );

        var base64 = System.Text.Json.JsonDocument.Parse(result).RootElement.GetProperty("data").GetString();
        File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64));
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

WebView2 erfordert das Erstellen einer TaskCompletionSource, das Abonnieren von NavigationCompleted-Ereignissen, den Aufruf von CallDevToolsProtocolMethodAsync, das Parsen von JSON-Antworten und das Dekodieren von base64-Daten.IronPDFbietet eine eigene RenderUrlAsPdf-Methode, die die gesamte Komplexität intern behandelt.

In der URL zur PDF-Dokumentation finden Sie Informationen zur Authentifizierung und zu benutzerdefinierten Kopfzeilenoptionen.

Benutzerdefinierte PDF-Einstellungen aus HTML-Dateien

Die Konfiguration von Seitenausrichtung, Rändern und Papiergröße erfordert unterschiedliche Ansätze.

WebView2 Ansatz:

// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;

class Program
{
    static async Task Main()
    {
        var webView = new WebView2();
        await webView.EnsureCoreWebView2Async();

        string htmlFile = Path.Combine(Directory.GetCurrentDirectory(), "input.html");
        webView.CoreWebView2.Navigate(htmlFile);

        await Task.Delay(3000);

        var printSettings = webView.CoreWebView2.Environment.CreatePrintSettings();
        printSettings.Orientation = CoreWebView2PrintOrientation.Landscape;
        printSettings.MarginTop = 0.5;
        printSettings.MarginBottom = 0.5;

        using (var stream = await webView.CoreWebView2.PrintToPdfAsync("custom.pdf", printSettings))
        {
            Console.WriteLine("Custom PDF created");
        }
    }
}
// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;

class Program
{
    static async Task Main()
    {
        var webView = new WebView2();
        await webView.EnsureCoreWebView2Async();

        string htmlFile = Path.Combine(Directory.GetCurrentDirectory(), "input.html");
        webView.CoreWebView2.Navigate(htmlFile);

        await Task.Delay(3000);

        var printSettings = webView.CoreWebView2.Environment.CreatePrintSettings();
        printSettings.Orientation = CoreWebView2PrintOrientation.Landscape;
        printSettings.MarginTop = 0.5;
        printSettings.MarginBottom = 0.5;

        using (var stream = await webView.CoreWebView2.PrintToPdfAsync("custom.pdf", printSettings))
        {
            Console.WriteLine("Custom PDF created");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 50;
        renderer.RenderingOptions.MarginBottom = 50;

        string htmlFile = Path.Combine(Directory.GetCurrentDirectory(), "input.html");
        var pdf = renderer.RenderHtmlFileAsPdf(htmlFile);
        pdf.SaveAs("custom.pdf");

        Console.WriteLine("Custom PDF created");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 50;
        renderer.RenderingOptions.MarginBottom = 50;

        string htmlFile = Path.Combine(Directory.GetCurrentDirectory(), "input.html");
        var pdf = renderer.RenderHtmlFileAsPdf(htmlFile);
        pdf.SaveAs("custom.pdf");

        Console.WriteLine("Custom PDF created");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

WebView2 erfordert eine 3-sekündige Task.Delay (eine unzuverlässige Schätzung), die Erstellung von Druckeinstellungen über die Umgebung und die Verwendung von PrintToPdfAsync mit einem Stream.IronPDFbietet direkte RenderingOptions-Eigenschaften mit eindeutigen Namen und verwendet Millimeter für präzisere Messungen.

Erweiterte PDF-Optionen mit DevTools Protocol

Komplexe WebView2-Konfigurationen erfordern die Interaktion mit dem DevTools-Protokoll.

WebView2 Ansatz:

// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using System.Text.Json;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;

class Program
{
    static async Task Main()
    {
        var webView = new WebView2();
        await webView.EnsureCoreWebView2Async();

        var htmlPath = Path.GetFullPath("document.html");
        var tcs = new TaskCompletionSource<bool>();
        webView.CoreWebView2.NavigationCompleted += (s, e) => tcs.SetResult(true);

        webView.CoreWebView2.Navigate($"file:///{htmlPath}");
        await tcs.Task;
        await Task.Delay(1000);

        var options = new
        {
            landscape = false,
            printBackground = true,
            paperWidth = 8.5,
            paperHeight = 11,
            marginTop = 0.4,
            marginBottom = 0.4,
            marginLeft = 0.4,
            marginRight = 0.4
        };

        var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
            "Page.printToPDF",
            JsonSerializer.Serialize(options)
        );

        var base64 = JsonDocument.Parse(result).RootElement.GetProperty("data").GetString();
        File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64));
    }
}
// NuGet: Install-Package Microsoft.Web.WebView2.WinForms
using System;
using System.IO;
using System.Threading.Tasks;
using System.Text.Json;
using Microsoft.Web.WebView2.WinForms;
using Microsoft.Web.WebView2.Core;

class Program
{
    static async Task Main()
    {
        var webView = new WebView2();
        await webView.EnsureCoreWebView2Async();

        var htmlPath = Path.GetFullPath("document.html");
        var tcs = new TaskCompletionSource<bool>();
        webView.CoreWebView2.NavigationCompleted += (s, e) => tcs.SetResult(true);

        webView.CoreWebView2.Navigate($"file:///{htmlPath}");
        await tcs.Task;
        await Task.Delay(1000);

        var options = new
        {
            landscape = false,
            printBackground = true,
            paperWidth = 8.5,
            paperHeight = 11,
            marginTop = 0.4,
            marginBottom = 0.4,
            marginLeft = 0.4,
            marginRight = 0.4
        };

        var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
            "Page.printToPDF",
            JsonSerializer.Serialize(options)
        );

        var base64 = JsonDocument.Parse(result).RootElement.GetProperty("data").GetString();
        File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64));
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.MarginTop = 40;
        renderer.RenderingOptions.MarginBottom = 40;
        renderer.RenderingOptions.MarginLeft = 40;
        renderer.RenderingOptions.MarginRight = 40;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;

        var pdf = renderer.RenderHtmlFileAsPdf("document.html");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.MarginTop = 40;
        renderer.RenderingOptions.MarginBottom = 40;
        renderer.RenderingOptions.MarginLeft = 40;
        renderer.RenderingOptions.MarginRight = 40;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;

        var pdf = renderer.RenderHtmlFileAsPdf("document.html");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

WebView2 erfordert die Konstruktion anonymer Objekte, die Serialisierung zu JSON, den Aufruf von DevTools Protocol-Methoden, das Parsen von JSON-Antworten und die manuelle Dekodierung von base64.IronPDFbietet typisierte Eigenschaften mit eindeutigen Namen und Enum-Werten wie PdfPaperSize.Letter.

WebView2APIzuIronPDFMapping Referenz

Dieses Mapping beschleunigt die Migration, indem es direkte API-Entsprechungen aufzeigt:

WebView2API IronPDF-Äquivalent Notizen
new WebView2() new ChromePdfRenderer() Keine UI-Steuerung erforderlich
EnsureCoreWebView2Async() Nicht anwendbar Keine Initialisierung erforderlich
NavigateToString(html) + PrintToPdfAsync() RenderHtmlAsPdf(html) Einzelner Methodenaufruf
Navigate(url) + PrintToPdfAsync() RenderUrlAsPdf(url) Einzelner Methodenaufruf
PrintSettings.PageWidth RenderingOptions.PaperSize PdfPaperSize enum verwenden
PrintSettings.PageHeight RenderingOptions.PaperSize PdfPaperSize enum verwenden
PrintSettings.MarginTop RenderingOptions.MarginTop In mm und nicht in Zoll
DruckEinstellungen.Ausrichtung RenderingOptions.PaperOrientation Porträt/Landschaft
ExecuteScriptAsync() JavaScript in HTML Oder verwenden Sie WaitFor-Optionen
AddScriptToExecuteOnDocumentCreatedAsync() HTML <script>-Tags Volle JS-Unterstützung
Navigation Ereignisse WaitFor.JavaScript() Sauberer Wartemechanismus
CallDevToolsProtocolMethodAsync("Page.printToPDF") RenderHtmlAsPdf() Direktes Rendering

Gängige Migrationsprobleme und Lösungen

Ausgabe 1: Speicherlecks

WebView2 Problem: Der Speicher wird nicht vollständig freigegeben, wenn WebView2Instanzen gelöscht werden. Lang laufende Prozesse akkumulieren Speicher bis zum Absturz.

IronPDF-Lösung: Ordnungsgemäße Garbage Collection ohne Lecks:

//IronPDF- clean memory management
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
} // Properly disposed
//IronPDF- clean memory management
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
} // Properly disposed
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe 2: Kein UI-Thread in Webanwendungen

WebView2 Problem: Benötigt STA-Thread mit Message Pump. ASP.NET Core-Controller können keine WebView2-Instanzen erstellen.

IronPDF Lösung: Funktioniert auf jedem Thread:

// ASP.NET Core - just works
public async Task<IActionResult> GetPdf()
{
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
// ASP.NET Core - just works
public async Task<IActionResult> GetPdf()
{
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe 3: Komplexität von Navigationsereignissen

WebView2-Problem: Muss asynchrone Navigationsereignisse, Abschluss-Callbacks und Race Conditions mit TaskCompletionSource behandeln.

IronPDF Lösung: Synchroner oder asynchroner Einzelmethodenaufruf:

// Simple and predictable
var pdf = renderer.RenderHtmlAsPdf(html);
// or
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Simple and predictable
var pdf = renderer.RenderHtmlAsPdf(html);
// or
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe 4: Maßeinheiten

WebView2 verwendet Zoll für die Abmessungen (8,5 x 11 für Letter). IronPDF verwendet Millimeter für präzisere Messungen.

Umsetzungsansatz:

// WebView2: PageWidth = 8.27 (inches for A4)
// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

// Or custom size in mm
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(210, 297);
// WebView2: PageWidth = 8.27 (inches for A4)
// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

// Or custom size in mm
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(210, 297);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

WebView2-Migrations-Checkliste

Vor der Migration anfallende Aufgaben

Dokumentieren Sie den gesamten WebView2PDF-Generierungscode in Ihrer Codebasis. Identifizieren Sie, wo WebView2Probleme verursacht (Speicherlecks, Abstürze, Bereitstellungsprobleme). Lesen Sie die IronPDF Dokumentation, um sich mit den Funktionen vertraut zu machen.

Aufgaben der Code-Aktualisierung

  1. Microsoft.Web.WebView2 NuGet-Paket entfernen
  2. IronPdf NuGet-Paket installieren
  3. Entfernen Sie WinForms/WPF-Abhängigkeiten, wenn sie nur für die PDF-Erzeugung verwendet werden
  4. Ersetzen Sie den WebView2-Code durch ChromePdfRenderer
  5. STA-Thread-Anforderungen entfernen
  6. Entfernen Sie Navigations-Event-Handler und TaskCompletionSource-Muster
  7. Entfernen Sie Task.Delay-Hacks
  8. IronPDF-Lizenzinitialisierung beim Start hinzufügen

Post-Migrationstests

Überprüfen Sie diese Aspekte nach der Migration:

  • Test in der Zielumgebung (ASP.NET, Docker, Linux, falls zutreffend)
  • Überprüfung der PDF-Ausgabequalität auf Übereinstimmung mit den Erwartungen
  • Testen Sie die korrekte Darstellung von JavaScript-lastigen Seiten
  • Überprüfen, ob Kopf- und Fußzeilen mit den HTML-Funktionen vonIronPDFfunktionieren
  • Lasttest für Speicherstabilität bei längeren Operationen
  • Testen Sie langlaufende Szenarien ohne Speicheranhäufung

Aktualisierung der Bereitstellung

  • Aktualisieren von Docker-Images, falls zutreffend (Entfernen von Edge WebView2Runtime)
  • Edge WebView2Runtime-Abhängigkeit aus den Serveranforderungen entfernen
  • Aktualisierung der Dokumentation zu den Serveranforderungen
  • Überprüfen Sie, ob die plattformübergreifende Bereitstellung auf den Zielplattformen funktioniert

Die wichtigsten Vorteile der Migration zu IronPDF

Der Wechsel von WebView2zuIronPDFbietet mehrere entscheidende Vorteile:

Plattformübergreifende Unterstützung: Im Gegensatz zur Beschränkung von WebView2auf Windows funktioniertIronPDFunter Windows, Linux, macOS und Docker. Diese Flexibilität ermöglicht die Bereitstellung in Azure, AWS, GCP und jeder anderen Cloud-Umgebung ohne Plattformbeschränkungen.

Keine UI-Abhängigkeiten:IronPDFbenötigt keine STA-Threads, Message-Pumps oder WinForms/WPF-Kontexte. Sie funktioniert in Konsolenanwendungen, Web-APIs, Windows-Diensten und Background Workern.

Speicherstabilität: Eine ordnungsgemäße Garbage Collection beseitigt die Speicherlecks, die WebView2in lang laufenden Prozessen plagen. Die Produktionsserver bleiben stabil.

Einfache API: Einzelne Methodenaufrufe ersetzen komplexe Navigationsereignisse, Rückrufe zur Vervollständigung, DevTools-Protokoll-Interaktionen und Base64-Dekodierung.

Erweiterte PDF-Funktionen: Kopfzeilen, Fußzeilen, Wasserzeichen, Zusammenführen/Aufteilen, digitale Signaturen, Passwortschutz und PDF/A-Konformität - Funktionen, die WebView2nicht bieten kann.

Aktive Entwicklung: Da die Verbreitung von .NET 10 und C# 14 bis 2026 zunimmt, gewährleisten die regelmäßigen Updates vonIronPDFdie Kompatibilität mit aktuellen und zukünftigen .NET-Versionen.

Abschluss

WebView2 ist ein leistungsfähiges Browser-Embedding-Control zur Anzeige von Webinhalten in Windows-Anwendungen. Die Verwendung für die PDF-Generierung führt jedoch zu Speicherlecks, Plattformbeschränkungen, Threading-Problemen und Komplikationen bei der Bereitstellung, so dass sie für Produktionsumgebungen ungeeignet ist.

IronPDF bietet PDF-Generierung mit einer speziell entwickelten Architektur. HTML-zu-PDF- und URL-zu-PDF-Vorgänge werden zu einzelnen Methodenaufrufen. Die Speicherverwaltung ist stabil. Der plattformübergreifende Einsatz wird möglich. Der Migrationspfad ist einfach: Ersetzen Sie NuGet-Pakete, aktualisieren Sie Namespaces und vereinfachen Sie Ihren Code, indem Sie Navigationsereignisse und async-Zeremonien entfernen.

Beginnen Sie Ihre Migration noch heute mit einer kostenlosen Testversion von IronPDF und beseitigen Sie die Zuverlässigkeitsprobleme, die mit der browsergesteuerten PDF-Erzeugung einhergehen.

Eine umfassende Anleitung zur Implementierung finden Sie in der IronPDF-Dokumentation, den Tutorials und der API-Referenz.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen