KARşıLAşTıRMA

WebView2 ve IronPDF Karşılaştırması: Teknik Kılavuz

.NET geliştiricileri HTML içeriğini PDF'e dönüştürmek gerektiğinde, Microsoft'unWebView2kontrolü bazen potansiyel bir çözüm olarak ortaya çıkar çünkü Chromium tabanlı bir işleme motoruna sahiptir. Ancak,WebView2esasen bir tarayıcı yerleştirme kontrolüdür ve UI uygulamaları için tasarlanmıştır, PDF oluşturma kütüphanesi değildir. Bu teknik karşılaştırma, PDF çıktısı için bir tarayıcı kontrolü yerleştirmenin ve hedefe yönelik bir PDF kütüphanesi kullanmanın temel farklarını anlamalarına yardımcı olmak için WebView2'yiIronPDFile birlikte inceler.

WebView2Anlamak

WebView2 (Microsoft Edge), yerli Windows uygulamalarına Edge/Chromium motorunu entegre eden çok yönlü bir gömülebilir tarayıcı kontrolüdür. Bu kontrol, Microsoft Edge tarayıcısının gezinme deneyimini kısıtlı bir ekosistem içinde destekler ve HTML5, CSS3 ve JavaScript içeriğinin modern web standartlarına uyumlu görüntülenmesini sağlar.

WebView2'nin PDF oluşturma yeteneği, PrintToPdfAsync yöntemi ve DevTools Protokol entegrasyonu aracılığıyla vardır. Ancak, bu işlevsellik, temel bir özellikten ziyade, akla sonradan gelen bir şey olarak kalır:

  • Tarayıcı Kontrol Mimarisi: Sunucu tarafında PDF üretimi için değil, UI uygulamalarında web içeriği gömülü olarak yerleştirmek için tasarlanmıştır
  • Sadece Windows Platformu: Linux, macOS, Docker veya bulut ortamları için sıfır destek
  • UI İş Parçacığı Gereksinimi: STA iş parçacığında mesaj pompası ile çalışmalıdır - web sunucuları veya API'lar ile çalışamaz
  • Edge Çalışma Zamanı Bağımlılığı: Hedef makinelerde EdgeWebView2Runtime yüklenmiş olmalıdır
  • Başsız Mod Yok: Gizli olduğunda bile UI öğeleri her zaman oluşturulur

PDF Üretimi içinWebView2Sınırlamaları

Geçiş rehber dokümantasyonu, WebView2'nin PDF üretimi için kullanılmasındaki kritik sorunları ortaya koyar:

SorunEtkiCiddiyet
Bellek SızıntılarıWebView2'nin uzun süre çalışan işlemlerde belgelenmiş bellek sızıntıları vardırKRİTİK
Sadece WindowsLinux, macOS, Docker veya bulut ortamları için sıfır destekKRİTİK
UI İş Parçacığı GerekliMesaj pompası ile STA iş parçacığında çalışılmalıdırKRİTİK
PDF'ler için TasarlanmadıPrintToPdfAsync sonradan akla gelen bir düşüncedirHIGH
Hizmetlerde KararsızWindows Hizmetlerinde çökme ve askıda kalma yaygındırHIGH
Karmaşık Asenkron AkışGezinme olayları, tamamlama geri aramaları, yarış koşullarıHIGH
Edge Çalışma Zamanı BağımlılığıHedef makinede EdgeWebView2Runtime gerektirirMEDIUM
Başsız Mod YokGizli olduğunda bile UI öğeleri her zaman oluşturulurMEDIUM

IronPDF'yi Anlamak

IronPDF, HTML ve web içeriğinden PDF üretimi için özel olarak tasarlanmış bir PDF kütüphanesidir. WebView2'nin tarayıcı yerleştirme yaklaşımının aksine, IronPDF, çapraz platform desteği ve sunucu tarafı yeteneklerle birlikte özel bir PDF oluşturma motoru sağlar.

Anahtar özellikler şunları içerir:

  • Amaçla Üretilmiş PDF Kütüphanesi: Başından itibaren PDF üretimi için tasarlanmıştır, UI yerleştirmek için değil
  • Çapraz Platform Desteği: Windows, Linux, macOS, Docker, iOS ve Android
  • Herhangi Bir İş Parçacığı İşlemi: STA iş parçacığı veya mesaj pompası gereksinimi yok
  • Sunucu/Bulut Hazır: ASP.NET Core, Azure, AWS, GCP ve Docker için desteklenir
  • Dış Bağımlılık Yok: Kendi içinde barındırılan, çalışma zamanı yüklemeleri gerektirmez
  • Kapsamlı PDF Özellikleri: Başlıklar/altbilgiler, filigranlar, birleştirme/ayırma, dijital imzalar, PDF/A uyumu

Özellik Karşılaştırması

Aşağıdaki tablo,WebView2veIronPDFarasında temeldeki farkları vurgular:

ÖzellikWebView2IronPDF
AmacıTarayıcı kontrolü (UI)PDF kütüphanesi (PDF için tasarlanmış)
Üretime HazırHAYIREVET
Bellek YönetimiUzun süre çalışanlarda sızıntılarKararlı, doğru şekilde atılır
Platform DesteğiSadece WindowsWindows, Linux, macOS, Docker
İş Parçacığı GereksinimleriSTA + Mesaj PompasıHerhangi bir iş parçacığı
Sunucu/BulutDesteklenmiyorDesteklenen
Azure/AWS/GCPProblematikMükemmel çalışır
DockerMümkün değilResmi görüntüler mevcut
ASP.NET CoreÇalışamazBirinci sınıf destek
Arka Plan HizmetleriKararsızKararlı
Konsol UygulamalarıKarmaşık hilelerEvet
WinForms/WPFEvetEvet
Başlıklar/AltbilgilerHAYIREvet (HTML)
FiligranlarHAYIREvet
PDF'leri BirleştirmeHAYIREvet
PDF'leri BölmeHAYIREvet
Dijital İmzalarHAYIREvet
Şifre KorumasıHAYIREvet
PDF/A UyumluHAYIREvet
Form DoldurmaHAYIREvet
Profesyonel DestekPDF kullanımı için yokEvet
DokümantasyonSınırlı PDF dokümanlarıKapsamlı

API Mimarisi Farklılıkları

WebView2 ve IronPDF'nin mimari farkları, PDF üretimini her birinin nasıl ele aldığına bakıldığında hemen ortaya çıkar.

WebView2Karmaşık Asenkron Desen

WebView2, tarayıcı başlatımı, gezinme, olay işleme ve DevTools Protokolü çağrılarını içeren çok adımlı bir asenkron işlem gerektirir:

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

Bu kod, EnsureCoreWebView2Async() yoluyla açık başlatma, NavigateToString() kullanarak gezinme, içerik yüklemeyi beklemek için keyfi gecikmeler ve düşük seviyeli DevTools Protokol aramaları gibi birkaçWebView2karmaşıklığını gösterir. Task.Delay, içeriğin hazır olduğuna dair güvenilmez bir tahmini temsil eder—yarış durumu yaşanmak üzere.

IronPDFBasitleştirilmiş Yaklaşımı

IronPDF, basit, tek-method'lu bir yaklaşım ile bu karmaşıklığı ortadan kaldırır:

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

ChromePdfRenderer sınıfı, tüm işleme karmaşıklığını dahili olarak ele alır. Başlatma töreni yok, gezinme olayları yok, zamanlama tahminleri yok. Kapsamlı HTML dönüşüm rehberliği için HTML'den PDF'e öğreticisini inceleyin.

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

Web sayfalarını PDF belgelerine dönüştürmek,WebView2veIronPDFarasında bulunan karmaşıklık farkını gösterir.

WebView2Uygulaması

WebView2, gezinme olayları işlemesi, tamamlama geri aramaları ve manuel PDF çıkarma gerektirir:

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

Bu uygulama, gezinmeyi izlemek için bir TaskCompletionSource oluşturmayı, NavigationCompleted olaylarına abone olmayı, DevTools Protokolünden JSON yanıtlarını ayrıştırmayı ve Base64 çözümlemeyi işlemesi gerektirir. Geçiş tamamlandıktan sonra eklenen Task.Delay(1000), JavaScript'in çalışmayı tamamladığından emin olmaya çalışır—bir başka güvenilmez zamanlama hilesi.

IronPDFUygulaması

IronPDF, tek method çağrısında doğrudan URL işleme sağlar:

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

RenderUrlAsPdf yöntemi, gezinmeyi, JavaScript yürütmesini ve içerik yüklemesini dahili olarak ele alır. Olay abonelikleri yok, zamanlama tahminleri yok, Base64 çözümü yok.

Özel PDF Ayarları ve Seçenekleri

Sayfa boyutlarını, sınırları ve yönlendirmeyi yapılandırmak, önemli API kullanılabilirlik farklarını ortaya koyar.

WebView2DevTools Protokol Yapılandırması

WebView2'nin JSON serileştirmesi ve DevTools Protokol parametreleri gerektirir:

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

WebView2, boyutlar için inç kullanır, anonim nesneler ve JSON serileştirme gerektirir ve olay işleyiciler ve zamanlama gecikmeleri ile karmaşık bir asenkron akışı korur.

IronPDFRenderingOptions Yapılandırması

IronPDF, RenderingOptions özelliği üzerinden güçlü yazım (strongly-typed) yapılandırma sağlar:

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

IronPDF, hassas ölçümler için milimetreleri kullanır, standart kağıt boyutları için PdfPaperSize enum'ları sağlar ve dosya tabanlı içerik için RenderHtmlFileAsPdf() gibi özel yöntemler sunar.

Yatay Yönlendirme ile HTML Dosyasını PDF'e Çevirme

Yatay yönlendirme ile HTML dosyalarını dönüştürmek, PrintSettings yaklaşımı ile RenderingOptions arasındaki farkı gösterir.

WebView2PrintSettings Yaklaşımı

WebView2, CoreWebView2PrintSettings ile alternatif bir PrintToPdfAsync yöntemi sunar:

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

3 saniyelik Task.Delay dikkate alın—içeriğin yazdırılmadan önce yüklendiğinden emin olmaya çalışan daha uzun bir keyfi bekleme.

IronPDFKolaylaştırılmış Yapılandırma

IronPDF, açık ayarlar ve zamanlama tahminleri olmadan aynı görevi ele alır:

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

API Eşleme Başvurusu

WebView2'den IronPDF'e geçişi değerlendiren ekipler, kavramsal eşdeğerlikleri anlamak için bu haritayı faydalı bulacaklar:

WebView2 APIIronPDF Eşdeğeri
new WebView2()new ChromePdfRenderer()
EnsureCoreWebView2Async()Yok
NavigateToString(html) + PrintToPdfAsync()RenderHtmlAsPdf(html)
Navigate(url) + PrintToPdfAsync()RenderUrlAsPdf(url)
Navigate(file) + PrintToPdfAsync()RenderHtmlFileAsPdf(file)
PrintSettings.PageWidthRenderingOptions.PaperSize
PrintSettings.PageHeightRenderingOptions.PaperSize
PrintSettings.MarginTopRenderingOptions.MarginTop
PrintSettings.OrientationRenderingOptions.PaperOrientation
Gezinme olaylarıWaitFor.JavaScript()
printBackground: truePrintHtmlBackgrounds = true

Ekipler WebView2'den IronPDF'e Geçmeyi Düşündüğünde

Çeşitli senaryolar, geliştirme ekiplerini WebView2'ye alternatif olarak IronPDF'i değerlendirmeye yönlendirir:

Çapraz Platform Gereksinimleri

WebView2'nin sadece Windows'a özgü kısıtlaması, Linux sunucuları, Docker konteynerleri veya bulut ortamlarını hedefleyen uygulamalar için uygun değildir. Azure, AWS, GCP veya konteynerize edilmiş altyapıya dağıtım yapan ekipler, PDF üretimi içinWebView2kullanamazlar.

Sunucu Tarafında PDF Üretimi

WebView2'nin STA ve mesaj pompası ile UI iş parçacığı gereksinimi, onu ASP.NET Core, arka plan hizmetleri veya API uç noktaları ile temelde uyumsuz hale getirir. Web isteklerine yanıt olarak PDF üretimi gerektiren uygulamalar,WebView2kullanamazlar.

Bellek Kararlılığı Endişeleri

WebView2'nin uzun süre çalışan işlemlerde belgelenmiş bellek sızıntıları, üretim ortamlarında sunucu kilitlenmelerine neden olur. Gün boyunca sürekli PDF üreten uygulamalar, bellek dolma koşulları oluşana kadar bellek biriktirir.

PDF Özellik Gereksinimleri

WebView2'nin PrintToPdfAsync sadece temel HTML-to-PDF dönüşümü sağlar. Başlıklar/altbilgiler, filigranlar, PDF birleştirme/ayırma, dijital imzalar, parola koruması veya PDF/A uyumu gerektiren ekipler, başka yerlere bakmalıdır.

Basitleştirilmiş Geliştirme

WebView2'nin gerektirdiği karmaşık asenkron akış - başlatma, gezinme olayları, tamamlama geri aramaları, zamanlama gecikmeleri, JSON serileştirmesi, Base64 çözümü - önemli ölçüde geliştirme ve bakım yükü getiriyor, IronPDF'in tek methodlu yaklaşımına kıyasla.

EkIronPDFÖzellikleri

Temel PDF oluşturmanın ötesinde, IronPDF, WebView2'nin sunamadığı belge manipülasyon özelliklerini sağlar:

.NET Uyumluluğu ve Geleceğe Hazırlık

WebView2'nin sadece Windows'a özgü mimarisi, giderek daha fazla çapraz platforma yönelik .NET ekosisteminde geleceğini sınırlar. IronPDF, .NET 8, .NET 9 ve 2026'da beklenen .NET 10 dahil olmak üzere gelecekteki sürümlerle uyumluluğu sağlayarak düzenli güncellemelerle aktif bir geliştirme sürdürür. Kütüphanenin API'sindeki async/await desteği, modern C# geliştirme uygulamaları ve C# 14'te beklenen özellikler ile uyumluluk sağlar.

Sonuç

WebView2 ve IronPDF, .NET'te PDF üretimi için temelde farklı yaklaşımlar sergiler. WebView2, tarayıcı yerleştirme kontrolüdür ve PDF yazdırma desteği sunar - üretim kullanımı için önemli kısıtlamalarla ikincil bir özelliktir. Sadece Windows platform kısıtlaması, UI iş parçacığı gereksinimi, bellek sızıntısı sorunları ve PDF'e özgü özellik eksikliği, onu ciddi PDF üretim iş yükleri için uygunsuz kılar.

IronPDF, HTML'den PDF'e dönüştürmek için özel olarak tasarlanmış, çapraz platform desteği, sunucu tarafı yetenekler ve kapsamlı PDF manipülasyon özellikleri ile hazırlanmış bir PDF kütüphanesidir. API'sinin basitleştirilmiş yapısı, WebView2'nin gerektirdiği karmaşık asenkron desenleri, olay yönetimini ve zamanlama hilelerini ortadan kaldırır.

PDF üretimi içinWebView2kullanmakta olan ekipler için, belgelenmiş kararlılık sorunları, platform sınırlamaları ve özellik boşlukları, amaçla üretilmiş alternatiflerin değerlendirilmesini zaruri kılar.WebView2ileIronPDFarasındaki API eşleştirmesi basittir,IronPDFsürekli olarak daha az kod gerektirir ve WebView2'nin dayattığı mimari kısıtlamaları ortadan kaldırır.

Ek uygulama kılavuzu için, IronPDF belgelerini ve belirli kullanım durumları ile gelişmiş özellikleri kapsayan eğitimleri keşfedin.

WebView2, ilgili sahibinin tescilli bir markasıdır. Bu site, Microsoft tarafından onaylanmamış, desteklenmemiş veya finanse edilmemiştir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.)}]