Altbilgi içeriğine atla
GEçIş KıLAVUZLARı

C#'ta WebView2'den IronPDF'ye Nasıl Geçilir

WebView2, Microsoft'un gömülebilir Edge/Chromium tarayıcı kontrolü, geliştiricilere Windows uygulamaları içinde web içeriği görüntüleme imkanı sunar. Ancak, geliştirme ekipleri PDF oluşturma için WebView2'yi kullanmaya çalıştıklarında, üretim ortamları için uygun olmayan ciddi mimari sınırlamalarla karşılaşırlar. WebView2, UI uygulamaları için tasarlanmış bir tarayıcı yerleştirme kontrolüdür—bir PDF oluşturma kütüphanesi değil.

Bu kılavuz, uygulamalarında güvenilir PDF oluşturma ihtiyaçı olan profesyonel .NET geliştiricileri için, WebView2'den IronPDF'e adım adım talimatlar, kod karşılaştırmaları ve pratik örneklerle tamamlanmış bir geçiş yolu sağlar.

Önemli Uyarı:WebView2PDF Oluşturma İçin Uygun Değildir

Geçiş yolunu incelemeden önce, geliştirme ekipleri WebView2'nin PDF oluşturma kullanıldığında neden önemli sorunlar yarattığını anlamalıdır:

Sorun Etkisi Ciddiyet
Hafıza Sızıntıları WebView2, uzun süre çalışan işlemlerde iyi belgelenmiş hafıza sızıntılarına sahiptir. Sunucunuz çökecek. KRİTİK
Sadece Windows Linux, macOS, Docker veya bulut ortamları için destek yok KRİTİK
UI Thread Gerektirir STA ileti pompası ile çalışmalıdır. Web sunucuları veya API'lerde çalışamaz. KRİTİK
PDF'ler İçin Tasarlanmamıştır PrintToPdfAsync bir sonradan düşünce, ana özellik değil HIGH
Servislerde Kararsız Windows Servislerinde ve arka plan çalışanlarında kazalar ve donmalar yaygındır HIGH
Karmaşık Async Akışı Gezinme olayları, tamamlanma geri çağrıları, yarış koşulları HIGH
Edge Çalışma Zamanı Bağımlılığı Hedef makinaya EdgeWebView2Çalışma Zamanı yüklenmesini gerektirir MEDIUM
Başsız Mod Yok Gizli olduğunda bile her zaman UI öğeleri oluşturur MEDIUM
Performans Yavaş başlangıç, yüksek kaynak tüketimi MEDIUM
Profesyonel Destek Yok Microsoft, PDF oluşturma kullanım durumu için destek sunmaz MEDIUM

Gerçek Dünya Arıza Senaryoları

Bu kod düzenleri üretim hatalarına neden olur:

// DANGER: This code WILL cause problems in production

// Sorun 1: Memory leak - creates newWebView2for 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
}

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

// Sorun 3: 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

// Sorun 1: Memory leak - creates newWebView2for 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
}

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

// Sorun 3: Windows Service instability
public class PdfService : BackgroundService // Random crashes
{
    protected override async Task ExecuteAsync(CancellationToken token)
    {
        //WebView2+ no message pump = hangs, crashes, undefined behavior
    }
}
$vbLabelText   $csharpLabel

IronPDF vs WebView2: Özellik Karşılaştırması

Mimari farklılıkları anlamak, teknik karar vericilerin geçiş yatırımını değerlendirmesine yardımcı olur:

Bağlam WebView2 IronPDF
Amacı Tarayıcı kontrolü (UI) PDF kütüphanesi (PDF için tasarlanmış)
Üretime Hazır HAYIR EVET
Bellek Yönetimi Uzun süreli işlemlerde sızıntılar Stabil, düzgün bir şekilde elden çıkarılmış
Platform Desteği Yalnızca Windows Windows, Linux, macOS, Docker
İş Parçacığı Gereksinimleri STA + Mesaj Pompası Herhangi bir iş parçacığı
Sunucu/Bulut Desteklenmiyor Desteklenir
Azure/AWS/GCP Problematik Mükemmel çalışır
Docker Mümkün değil Resmi görüntüler mevcut
ASP.NET Core Çalışamaz Birinci sınıf destek
Arka Plan Hizmetleri Kararsız Kararlı
Desteklenen Bağlamlar Sadece WinForms/WPF Herhangi bir .NET bağlamı: konsol, web, masaüstü
HTML to PDF Temel Tam
URL'den PDF'ye Temel Tam
Başlıklar/Altbilgiler HAYIR Evet (HTML)
Filigranlar HAYIR Evet
PDF'leri Birleştir HAYIR Evet
PDF'leri Böl HAYIR Evet
Dijital İmzalar HAYIR Evet
Şifre Koruması HAYIR Evet
PDF/A Uyumluluğu HAYIR Evet
Profesyonel Destek None for PDF Evet
Dokümantasyon Sınırlı Geniş kapsamlı

Hızlı Başlangıç: WebView2'den IronPDF'e Geçiş

Geçiş hemen bu temel adımlar ile başlatılabilir.

Adım 1:WebView2Paketini Kaldırın

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

Ya da proje dosyanızdan kaldırın:


<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />

<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />
XML

Adım 2: IronPDF'i Kurun

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Adım 3: Adalanları Güncelleyin

WebView2 ad alanlarını IronPdf ad alanı ile değiştirin:

// 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;
Imports Microsoft.Web.WebView2.Core
Imports Microsoft.Web.WebView2.WinForms

' After (IronPDF)
Imports IronPdf
$vbLabelText   $csharpLabel

Adim 4: Lisans Icin Yapisallastirma

Uygulama başlangıcında lisans başlatmasını ekleyin:

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

Kod Geçiş Örnekleri

HTML'i PDF'ye Dönüştürme

.NET PDF yaklaşımları arasındaki karmaşıklık farkını en temel işlem ortaya çıkarır.

WebView2 Yaklaşımı:

// 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",
            "{}"
        );
    }
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.Web.WebView2.WinForms
Imports Microsoft.Web.WebView2.Core

Module Program
    Async Function Main() As Task
        Dim webView As 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",
            "{}"
        )
    End Function
End Module
$vbLabelText   $csharpLabel

IronPDF Yaklaşımı:

// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

WebView2 sürümü EnsureCoreWebView2Async() ile asenkron başlatma gerektirir, NavigateToString() üzerinden gezinme, Task.Delay(2000) ile render işlemi beklemek için güvenilmez bir yöntem ve DevTools Protokolü ile etkileşim.IronPDFbu töreni tamamen ortadan kaldırır—bir oluşturucu yaratın, HTML'yi render edin, kaydedin.

Gelişmiş HTML-PDF senaryoları için HTML'den PDF'e dönüştürme kılavuzuna bakın.

URL'leri PDF'ye Dönüştürme

URL'den PDF'e dönüşüm, WebView2'nun karmaşık eşzamansız gezinme akışını gösterir.

WebView2 Yaklaşımı:

// 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));
    }
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.Web.WebView2.WinForms
Imports Microsoft.Web.WebView2.Core

Module Program
    Async Function Main() As Task
        Dim webView As New WebView2()
        Await webView.EnsureCoreWebView2Async()

        Dim tcs As New TaskCompletionSource(Of Boolean)()
        AddHandler webView.CoreWebView2.NavigationCompleted, Sub(s, e) tcs.SetResult(True)

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

        Dim result As String = Await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
            "Page.printToPDF",
            "{""printBackground"": true}"
        )

        Dim base64 As String = System.Text.Json.JsonDocument.Parse(result).RootElement.GetProperty("data").GetString()
        File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64))
    End Function
End Module
$vbLabelText   $csharpLabel

IronPDF Yaklaşımı:

// 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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

WebView2 bir TaskCompletionSource oluşturmayı, NavigationCompleted olaylarına abone olmayı, CallDevToolsProtocolMethodAsync çağırmayı, JSON yanıtlarını ayıklamayı ve base64 verilerini kod çözmeyi gerektirir. IronPDF, tüm karmaşıklığı dahili olarak yöneten özel bir RenderUrlAsPdf yöntemi sağlar.

Kimlik doğrulama ve ozellestirilmis baslik seçenekleri icin URL'den PDF'ye dokümantasyonu kesfedin.

HTML Dosyalarından Özel PDF Ayarları

Sayfa yönlendirmesi, kenar boşlukları ve kâğıt boyutunu yapılandırmak farklı yaklaşımlar gerektirir.

WebView2 Yaklaşımı:

// 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");
        }
    }
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.Web.WebView2.Core
Imports Microsoft.Web.WebView2.WinForms

Module Program
    Async Function Main() As Task
        Dim webView As New WebView2()
        Await webView.EnsureCoreWebView2Async()

        Dim htmlFile As String = Path.Combine(Directory.GetCurrentDirectory(), "input.html")
        webView.CoreWebView2.Navigate(htmlFile)

        Await Task.Delay(3000)

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

        Using stream = Await webView.CoreWebView2.PrintToPdfAsync("custom.pdf", printSettings)
            Console.WriteLine("Custom PDF created")
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

IronPDF Yaklaşımı:

// 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");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Imports System.IO

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()

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

        Dim htmlFile As String = Path.Combine(Directory.GetCurrentDirectory(), "input.html")
        Dim pdf = renderer.RenderHtmlFileAsPdf(htmlFile)
        pdf.SaveAs("custom.pdf")

        Console.WriteLine("Custom PDF created")
    End Sub
End Module
$vbLabelText   $csharpLabel

WebView2, ortam üzerinden üç saniyelik bir Task.Delay (güvenilmez bir tahmin), yazdırma ayarları oluşturmayı ve bir akış ile PrintToPdfAsync kullanmayı gerektirir. IronPDF, net isimlerle doğrudan RenderingOptions özellikleri sağlar ve daha kesin ölçümler için milimetre kullanır.

DevTools Protokolü ile Gelişmiş PDF Seçenekleri

KarmaşıkWebView2yapılandırmaları DevTools Protokolü ile etkileşim gerektirir.

WebView2 Yaklaşımı:

// 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));
    }
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports System.Text.Json
Imports Microsoft.Web.WebView2.WinForms
Imports Microsoft.Web.WebView2.Core

Module Program
    Async Function Main() As Task
        Dim webView As New WebView2()
        Await webView.EnsureCoreWebView2Async()

        Dim htmlPath As String = Path.GetFullPath("document.html")
        Dim tcs As New TaskCompletionSource(Of Boolean)()
        AddHandler webView.CoreWebView2.NavigationCompleted, Sub(s, e) tcs.SetResult(True)

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

        Dim options = New With {
            .landscape = False,
            .printBackground = True,
            .paperWidth = 8.5,
            .paperHeight = 11,
            .marginTop = 0.4,
            .marginBottom = 0.4,
            .marginLeft = 0.4,
            .marginRight = 0.4
        }

        Dim result As String = Await webView.CoreWebView2.CallDevToolsProtocolMethodAsync(
            "Page.printToPDF",
            JsonSerializer.Serialize(options)
        )

        Dim base64 As String = JsonDocument.Parse(result).RootElement.GetProperty("data").GetString()
        File.WriteAllBytes("output.pdf", Convert.FromBase64String(base64))
    End Function
End Module
$vbLabelText   $csharpLabel

IronPDF Yaklaşımı:

// 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");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Class Program
    Shared Sub Main()
        Dim 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

        Dim pdf = renderer.RenderHtmlFileAsPdf("document.html")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

WebView2, anonim nesneler oluşturmayı, JSON'a seri hale getirmeyi, DevTools Protokol yöntemlerini çağırmayı, JSON yanıtlarını ayıklamayı ve base64'ü elle çözmeyi gerektirir. IronPDF, net isimler ve PdfPaperSize.Letter gibi enum değerlerle tipli özellikler sağlar.

WebView2 API'sindenIronPDFHaritalama Referansı

Bu eşleme, doğrudan API eşdeğerlerini göstererek geçişi hızlandırır.

WebView2 API IronPDF Eşdeğeri
new WebView2() new ChromePdfRenderer()
EnsureCoreWebView2Async() N/A
NavigateToString(html) + PrintToPdfAsync() RenderHtmlAsPdf(html)
Navigate(url) + PrintToPdfAsync() RenderUrlAsPdf(url)
PrintSettings.PageWidth RenderingOptions.PaperSize
PrintSettings.PageHeight RenderingOptions.PaperSize
PrintSettings.MarginTop RenderingOptions.MarginTop
PrintSettings.Orientation RenderingOptions.PaperOrientation
ExecuteScriptAsync() HTML'deki JavaScript
AddScriptToExecuteOnDocumentCreatedAsync() HTML <script> etiketleri
Yonlendirme olaylari WaitFor.JavaScript()
CallDevToolsProtocolMethodAsync("Page.printToPDF") RenderHtmlAsPdf()

Yaygın Taşınma Sorunları ve Çözümleri

Konu 1: Bellek Sızıntıları

WebView2 Sorunu:WebView2örneklerini elden çıkarırken bellek tamamen serbest bırakılmaz. Uzun süreli süreçler bellek biriktirir ve çöker.

IronPDF Çözümü: Sızıntı olmadan düzgün çöp toplama:

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

Using pdf = renderer.RenderHtmlAsPdf(html)
    pdf.SaveAs("output.pdf")
End Using
$vbLabelText   $csharpLabel

Konu 2: Web Uygulamalarında UI İpliği Yok

WebView2 Sorunu: STA ipliği mesaj pompasıyla gerektirir. ASP.NET Core denetleyicileriWebView2örnekleri oluşturamaz.

IronPDF Çözümü: Herhangi bir iplikte çalışır:

// 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");
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Class YourController
    Inherits Controller

    Public Async Function GetPdf() As Task(Of IActionResult)
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
        Return File(pdf.BinaryData, "application/pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

Konu 3: Gezinme Olayı Karmaşıklığı

WebView2 Sorunu: Asenkron gezinti olaylarını, tamamlanma geri çağrılarını ve TaskCompletionSource ile yarış durumlarını yönetmek zorundasınız.

IronPDF Çözümü: Senkron veya eşzamansız tek bir yöntem çağrısı:

// 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);
$vbLabelText   $csharpLabel

Konu 4: Ölçüm Birimleri

WebView2, boyutlar için inç kullanır (Mektup için 8,5 x 11). IronPDF, daha hassas ölçümler için milimetre kullanır.

Dönüşüm yaklaşımı:

// 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);
' 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)
$vbLabelText   $csharpLabel

WebView2 Geçiş Kontrol Listesi

Ön Taşınma Görevleri

Kod tabanınızda tümWebView2PDF oluşturma kodunu belgeler. WebView2'nun sorun yarattığı yerleri belirleyin (bellek sızıntıları, çökmeler, dağıtım sorunları). IronPDF belgelerini inceleyerek yeteneklerine aşina olun.

Kod Güncelleme Görevleri

  1. Microsoft.Web.WebView2 NuGet paketini kaldırın
  2. IronPdf NuGet paketini kurun
  3. Yalnızca PDF oluşturma için kullanılan WinForms/WPF bağımlılıklarını kaldırın 4.WebView2kodunu ChromePdfRenderer ile değiştirin
  4. STA iplik gerekliliklerini kaldırın
  5. Gezinme olay işleyicilerini ve TaskCompletionSource desenlerini kaldırın
  6. Task.Delay hack'lerini kaldırın
  7. BaşlangıçtaIronPDFlisans başlatma işlemi ekleyin

Taşınım Sonrası Test

Geçiş sonrasında aşağıdaki yönleri doğrulayın:

  • Hedef ortamı deneyin (ASP.NET, Docker, Linux, uygunsa)
  • PDF çıktısının kalitesinin beklentilerle eşleştiğini doğrulayın
  • Yoğun JavaScript içeren sayfaların düzgün render edildiğini test edin
  • Başlıkların ve altbilgilerin IronPDF'in HTML yetenekleri ile çalıştığını doğrulayın
  • Uzun süreli işlemler sırasında bellek kararlılığını test edin
  • Bellek birikmeden uzun süreli senaryoları test edin

Dağıtım Güncellemeleri

  • Uygunsa Docker imajlarını güncelleyin (EdgeWebView2Çalışma Zamanı'nı kaldırın)
  • Sunucu gerekliliklerinden EdgeWebView2Çalışma Zamanı bağımlılığını kaldırın
  • Sunucu gereksinimleri belgelerini güncelleyin
  • Çok platformlu dağıtımın hedef platformlarda çalıştığını doğrulayın

IronPDF'e Geçişin Temel Avantajları

WebView2'den IronPDF'e geçiş birçok kritik avantaj sağlar:

Çapraz Platform Desteği: WebView2'nin yalnızca Windows kısıtlamasıdır,IronPDFise Windows, Linux, macOS ve Docker'de çalışır. Bu esneklik, platform kısıtlamaları olmaksızın Azure, AWS, GCP ve herhangi bir bulut ortamına dağıtıma olanak tanır.

UI Bağımlılıkları Yok: IronPDF, STA ipliklerine, mesaj pompalarına veya WinForms/WPF bağlamlarına ihtiyaç duymaz. Konsol uygulamalarında, web API'lerinde, Windows Hizmetleri'nde ve arka plan işçilerinde çalışır.

Bellek Kararlılığı: Uygun çöp toplama, uzun süreli işlemlerde WebView2'nu rahatsız eden bellek sızıntılarını ortadan kaldırır. Üretim sunucuları stabil kalır.

Basit API: Tek yöntem çağrıları, karmaşık gezinme olaylarını, tamamlanma geri çağrılarını, DevTools Protokolü etkileşimlerini ve base64 kodlamasını değiştirir.

Gelişmiş PDF Özellikleri: Başlıklar, altbilgiler, filigranlar, birleştirme/bölme, dijital imzalar, parola koruma ve PDF/A uyumluluğu—WebView2'nin sağlayamayacağı özellikler.

Aktif Geliştirme: 2026 boyunca .NET 10 ve C# 14 benimsenmesi arttıkça, IronPDF'in düzenli güncellemeleri mevcut ve gelecekteki .NET sürümleriyle uyumluluğu sağlar.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara