Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de WebView2 à IronPDF en C#

Migrer de WebView2àIronPDF: Un guide complet du développeur C

WebView2, le contrôle de navigateur Edge/Chromium intégrable de Microsoft, offre aux développeurs un moyen d'afficher du contenu web dans les applications Windows. Cependant, lorsque les équipes de développement tentent d'utiliser WebView2pour la génération de PDF, elles se heurtent à de sérieuses limitations architecturales qui le rendent inadapté aux environnements de production. WebView2est un contrôle d'intégration au navigateur conçu pour les applications d'interface utilisateur, et non une bibliothèque de génération de PDF.

Ce guide fournit un chemin de migration complet de WebView2à IronPDF, avec des instructions étape par étape, des comparaisons de code et des exemples pratiques pour les développeurs .NET professionnels qui ont besoin d'une génération fiable de PDF dans leurs applications.

Avertissement critique : WebView2n'est PAS adapté à la génération de PDF

Avant d'examiner la voie de la migration, les équipes de développement doivent comprendre pourquoi WebView2pose d'importants problèmes lorsqu'il est utilisé pour la création de PDF :

Problématique Impact Sévérité
Fuites de mémoire WebView2présente des fuites de mémoire bien documentées dans les processus de longue durée. Votre serveur va tomber en panne. CRITIQUE
Fenêtres uniquement Aucune prise en charge de Linux, macOS, Docker ou des environnements en nuage CRITIQUE
Filière UI requise Doit être exécuté sur STA thread avec message pump. Ne peut pas fonctionner avec des serveurs web ou des API. CRITIQUE
Non conçu pour les PDF PrintToPdfAsync est une réflexion après coup, pas une fonctionnalité de base HAUT
Instable dans les services Crashs et blocages fréquents dans les services Windows et les travailleurs en arrière-plan HAUT
Flux asynchrone complexe Événements de navigation, rappels d'achèvement, conditions de course HAUT
Dépendance d'exécution Edge Nécessite l'installation de Edge WebView2Runtime sur la machine cible MOYEN
Pas de mode sans tête Crée toujours les éléments de l'interface utilisateur, même lorsqu'ils sont cachés MOYEN
Performance Démarrage lent, forte consommation de ressources MOYEN
Pas de support professionnel Microsoft ne prend pas en charge le cas d'utilisation de la génération de PDF MOYEN

Scénarios d'échec dans le monde réel

Ces modèles de code provoquent des échecs de production :

// DANGER: This code WILL cause problems in production

// Problématique1: 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
}

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

// Problématique3: 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

// Problématique1: 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
}

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

// Problématique3: 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: Comparaison des fonctionnalités

La compréhension des différences architecturales aide les décideurs techniques à évaluer l'investissement dans la migration :

Aspect WebView2 IronPDF
Objectif Contrôle du navigateur (UI) Bibliothèque PDF (conçue pour le format PDF)
<Prêt pour la production NON OUI
Gestion de la mémoire Fuites dans des projets de longue haleine Stable, bien disposé
Support de la plateforme Windows uniquement Windows, Linux, macOS, Docker
Exigences en matière de fil conducteur STA + Message Pump N'importe quel fil
Serveur/Cloud Non pris en charge Prise en charge complète
Azure/AWS/GCP Problématique Fonctionne parfaitement
Docker Pas possible Images officielles disponibles
ASP.NET Core Ne peut pas travailler Une assistance de premier ordre
Services d'arrière-plan Instable Stable
Contextes pris en charge WinForms/WPF uniquement Tout contexte .NET : console, web, bureau
HTML à PDF Basique Complet
URL vers PDF Basique Complet
En-têtes/Pieds de page NON Oui (HTML)
Marqueurs d'eau NON Oui
Fusionner des PDF NON Oui
Diviser les PDF NON Oui
Signatures numériques NON Oui
Protection des mots de passe NON Oui
Conformité PDF/A NON Oui
Support professionnel Aucune pour PDF Oui
Documentation Limité Une traduction

Démarrage rapide : Migration de WebView2vers IronPDF

La migration peut commencer immédiatement grâce à ces étapes fondamentales.

Étape 1 : Supprimer le paquet WebView2

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

Ou supprimez-la de votre fichier de projet :

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

Étape 2 : Installer IronPDF

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Étape 3 : Mise à jour des espaces de noms

Remplacer les espaces de noms WebView2par l'espace de noms IronPdf :

// 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

Étape 4 : initialisation de la licence

Ajouter l'initialisation de la licence au démarrage de l'application :

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

Exemples de migration de code

Conversion de HTML en PDF

L'opération la plus fondamentale révèle la différence de complexité entre ces approches PDF .NET.

Approche deWebView2:

// 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

Approche IronPDF:

// 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

La version WebView2nécessite une initialisation asynchrone avec EnsureCoreWebView2Async(), une navigation via NavigateToString(), un Task.Delay(2000) peu fiable pour attendre le rendu, et une interaction avec le protocole DevTools.IronPDFélimine entièrement cette cérémonie - créer un moteur de rendu, effectuer le rendu HTML, enregistrer.

Pour les scénarios avancés de conversion de HTML en PDF, voir le guide de conversion de HTML en PDF.

Conversion des URL en PDF

La conversion d'URL en PDF démontre le flux de navigation asynchrone complexe de WebView2.

Approche deWebView2:

// 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

Approche IronPDF:

// 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 nécessite la création d'une TaskCompletionSource, l'abonnement aux événements NavigationCompleted, l'appel à CallDevToolsProtocolMethodAsync, l'analyse des réponses JSON et le décodage des données base64.IronPDFfournit une méthode RenderUrlAsPdf dédiée qui gère toute la complexité en interne.

Explorez la URL vers la documentation PDF pour l'authentification et les options d'en-tête personnalisées.

Paramètres PDF personnalisés à partir de fichiers HTML

La configuration de l'orientation des pages, des marges et de la taille du papier nécessite différentes approches.

Approche deWebView2:

// 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

Approche IronPDF:

// 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 nécessite un Task.Delay de 3 secondes (une estimation peu fiable), la création de paramètres d'impression par le biais de l'environnement et l'utilisation de PrintToPdfAsync avec un flux.IronPDFfournit directement des propriétés RenderingOptions avec des noms clairs et utilise des millimètres pour des mesures plus précises.

Options PDF avancées avec DevTools Protocol

Les configurations complexes de WebView2nécessitent une interaction avec le protocole DevTools.

Approche deWebView2:

// 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

Approche IronPDF:

// 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 nécessite la construction d'objets anonymes, la sérialisation en JSON, l'appel aux méthodes du protocole DevTools, l'analyse des réponses JSON et le décodage manuel de base64.IronPDFfournit des propriétés typées avec des noms clairs et des valeurs d'énumération comme PdfPaperSize.Letter.

Référence de mappage de l'APIWebView2 vers IronPDF

Cette cartographie accélère la migration en indiquant les équivalents directs des API :

API WebView2 Équivalent d'IronPDF Notes
new WebView2() new ChromePdfRenderer() Aucun contrôle de l'interface utilisateur n'est nécessaire
EnsureCoreWebView2Async() N/A Aucune initialisation n'est requise
NavigateToString(html) + PrintToPdfAsync() RenderHtmlAsPdf(html) Appel de méthode unique
Navigate(url) + PrintToPdfAsync() RenderUrlAsPdf(url) Appel de méthode unique
PrintSettings.PageWidth RenderingOptions.PaperSize Utiliser l'énumération PdfPaperSize
PrintSettings.PageHeight RenderingOptions.PaperSize Utiliser l'énumération PdfPaperSize
PrintSettings.MarginTop RenderingOptions.MarginTop En mm et non en pouces
PrintSettings.Orientation RenderingOptions.PaperOrientation Portrait/paysage
ExecuteScriptAsync() JavaScript en HTML Ou utilisez les options WaitFor
AddScriptToExecuteOnDocumentCreatedAsync() HTML <script> tags Prise en charge complète de JS
Événements de navigation WaitFor.JavaScript() Mécanisme d'attente propre
CallDevToolsProtocolMethodAsync("Page.printToPDF") RenderHtmlAsPdf() Rendu direct

Problèmes de migration courants et solutions

Édition 1 : Fuites de mémoire

Problème WebView2: La mémoire n'est pas entièrement libérée lors de l'élimination des instances WebView2. Les processus en cours d'exécution accumulent de la mémoire jusqu'à ce qu'ils se bloquent.

La solutionIronPDF: Une collecte des déchets correcte et sans fuites :

//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

Édition 2 : Pas de fil d'Ariane dans les applications web

ProblèmeWebView2: Requiert un thread STA avec une pompe à messages. Les contrôleurs ASP.NET Core ne peuvent pas créer d'instances de WebView2.

La solution IronPDF: Fonctionne sur n'importe quel fil :

// 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

Édition 3 : Complexité des événements de navigation

WebView2 Problem: Doit gérer les événements de navigation asynchrones, les rappels d'achèvement et les conditions de course avec TaskCompletionSource.

SolutionIronPDF: Appel de méthode unique synchrone ou asynchrone :

// 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

Edition 4 : Unités de mesure

WebView2 utilise les pouces pour les dimensions (8.5 x 11 pour Letter). IronPDF utilise des millimètres pour des mesures plus précises.

Approche de conversion:

// 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

Liste de contrôle pour la migration versWebView2

Tâches préalables à la migration

Documentez tout le code de génération de PDF WebView2dans votre base de code. Identifier où WebView2pose des problèmes (fuites de mémoire, plantages, problèmes de déploiement). Consultez la documentation IronPDF pour vous familiariser avec les capacités.

Tâches de mise à jour du code

  1. Supprimer le paquet NuGet Microsoft.Web.WebView2
  2. Installer le paquet NuGet IronPdf
  3. Supprimer les dépendances WinForms/WPF si elles ne sont utilisées que pour la génération de PDF
  4. Remplacer le code WebView2par ChromePdfRenderer
  5. Supprimer les exigences relatives aux fils STA
  6. Supprimer les gestionnaires d'événements de navigation et les modèles TaskCompletionSource
  7. Supprimer les hacks Task.Delay (en anglais)
  8. Ajouter l'initialisation de la licenceIronPDFau démarrage

Test de post-migration

Après la migration, vérifiez ces aspects :

  • Test dans l'environnement cible (ASP.NET, Docker, Linux le cas échéant)
  • Vérifier que la qualité de la sortie PDF correspond aux attentes
  • Tester le bon rendu des pages contenant beaucoup de JavaScript
  • Vérifier que les en-têtes et les pieds de page fonctionnent avec les capacités HTML d'IronPDF
  • Test de charge pour la stabilité de la mémoire lors d'opérations prolongées
  • Tester des scénarios de longue durée sans accumulation de mémoire

Mises à jour du déploiement

  • Mettre à jour les images Docker le cas échéant (supprimer Edge WebView2Runtime)
  • Supprimer la dépendance Edge WebView2Runtime des exigences du serveur
  • Mise à jour de la documentation sur les exigences du serveur
  • Vérifier que le déploiement multiplateforme fonctionne sur les plateformes cibles

Avantages clés de la migration vers IronPDF

Le passage de WebView2àIronPDFprésente plusieurs avantages décisifs :

<Prise en charge multiplateforme : Contrairement à la limitation à Windows de WebView2, IronPdf fonctionne sur Windows, Linux, macOS et Docker. Cette flexibilité permet un déploiement sur Azure, AWS, GCP et tout autre environnement cloud sans contrainte de plateforme.

Aucune dépendance à l'interface utilisateur :IronPDFne nécessite pas de threads STA, de pompes à messages ou de contextes WinForms/WPF. Elle fonctionne dans les applications en console, les API web, les services Windows et les travailleurs en arrière-plan.

<Stabilité de la mémoire : Une collecte des déchets appropriée élimine les fuites de mémoire qui affectent WebView2dans les processus de longue durée. Les serveurs de production doivent rester stables.

A API simple : des appels de méthode uniques remplacent les événements de navigation complexes, les rappels d'achèvement, les interactions du protocole DevTools et le décodage base64.

Fonctionnalités PDF étendues : En-têtes, pieds de page, filigranes, fusion/séparation, signatures numériques, protection par mot de passe et conformité PDF/A - des fonctionnalités que WebView2ne peut pas fournir.

Développement actif : Alors que l'adoption de .NET 10 et C# 14 augmente jusqu'en 2026, les mises à jour régulières d'IronPDF garantissent la compatibilité avec les versions .NET actuelles et futures.

Conclusion

WebView2 est un contrôle d'intégration au navigateur capable d'afficher du contenu web dans les applications Windows. Cependant, son utilisation pour la génération de PDF entraîne des fuites de mémoire, des limitations de plateforme, des problèmes de threading et des complications de déploiement qui le rendent inadapté aux environnements de production.

IronPDF permet de générer des fichiers PDF à l'aide d'une architecture conçue à cet effet. Les opérations HTML-to-PDF et URL-to-PDF deviennent des appels de méthode uniques. La gestion de la mémoire est stable. Le déploiement multiplateforme devient possible. Le chemin de migration est simple : remplacez les packages NuGet, mettez à jour les espaces de noms et simplifiez votre code en supprimant les événements de navigation et la cérémonie asynchrone.

Commencez votre migration dès aujourd'hui avec un essai gratuit d'IronPDF et éliminez les problèmes de fiabilité inhérents à la génération de PDF basée sur le contrôle du navigateur.

Pour des conseils de mise en œuvre complets, explorez la documentation IronPDF, tutoriels, et référence API.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite