KARşıLAşTıRMA

WebView2 vs IronPDF: Teknik Karşılaştırma Rehberi

.NET geliştiricileri HTML içeriğini PDF'e dönüştürmesi gerektiğinde, Chromium tabanlı render motoru nedeniyle bazen Microsoft'unWebView2kontrolü potansiyel bir çözüm olarak ortaya çıkmaktadır. Ancak, WebView2, UI uygulamaları için tasarlanmış bir tarayıcı yerleştirme kontrolü olup, PDF oluşturma kütüphanesi değildir. Bu teknik karşılaştırma, WebView2'yiIronPDFile yan yana inceleyerek, PDF çıktısı için bir tarayıcı kontrolü gömme ile amaca yönelik bir PDF kütüphanesi kullanmanın kritik farklarını anlamak isteyen mimar ve geliştiricilere yardımcı olur.

WebView2'yi Anlamak

WebView2 (Microsoft Edge), Edge/Chromium motorunu yerel Windows uygulamalarına entegre eden çok yönlü bir yerleştirilebilir tarayıcı kontrolüdür. Bu kontrol, kısıtlı ekosistem içinde Microsoft Edge tarayıcı deneyimini destekleyerek, HTML5, CSS3 ve JavaScript içeriğinin görüntülenmesi için modern web standartlarına uyumluluk sağlar.

WebView2'nin PDF oluşturma yeteneği, PrintToPdfAsync metodu ve DevTools Protocol entegrasyonu aracılığıyla mevcuttur. Ancak, bu işlevsellik, bir temel özellikten ziyade düşünülmüş bir sonradan aklına gelen bir eklentidir:

  • Tarayıcı Kontrol Mimarisi: Sunucu tarafı PDF oluşturma değil, UI uygulamalarında web içeriği gömme için tasarlandı
  • Sadece Windows Platformu: Linux, macOS, Docker veya bulut ortamları için destek yok
  • UI İş Parçacığı Gerekliliği: Mesaj pompasıyla STA iş parçacığında çalışması gerekir—web sunucuları veya API'lerde çalışamaz
  • Edge Çalışma Zamanı Bağımlılığı: Hedef makinelerde EdgeWebView2Çalışma Zamanı kurulu olmalıdır
  • Başsız Mod Yok: Gizli olduğunda bile her zaman UI öğeleri oluşturur

WebView2'nin PDF Oluşturma için Kısıtlamaları

Geçiş kılavuzu belgeleri, WebView2'nin PDF oluşturma için kullanımındaki kritik sorunları tanımlar:

SorunEtkisiCiddiyet
Bellek SızıntılarıWebView2, uzun süreli işlemlerde belgelenmiş bellek sızıntılarına sahiptirKRİTİK
Sadece WindowsLinux, macOS, Docker veya bulut ortamları için destek yokKRİTİK
UI İş Parçacığı GerekliMesaj pompasıyla STA iş parçacığında çalışması gereklidirKRİTİK
PDF için TasarlanmamışPrintToPdfAsync bir sonradan düşüncedirHIGH
Servislerde KararsızWindows Hizmetlerinde çökme ve kilitlenmeler yaygındırHIGH
Karmaşık Async AkışıGezinme olayları, tamamlanma geri çağrıları, yarış koşullarıHIGH
Edge Çalışma Zamanı BağımlılığıHedef makinede EdgeWebView2Çalışma Zamanı gerektirirMEDIUM
Başsız Mod YokGizli olduğunda bile her zaman UI öğeleri oluştururMEDIUM

IronPDF'yi Anlama

IronPDF, HTML ve web içeriğinden PDF oluşturma 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ı yetenekleriyle birlikte özel bir PDF oluşturma motoru sağlar.

Anahtar özellikler şunları içerir:

  • Özel Olarak Tasarlanmış PDF Kütüphanesi: PDF oluşturma için sıfırdan tasarlanmış, UI gömme amacıyla 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ı gereksinimleri yok
  • Sunucu/Bulut Hazır: ASP.NET Core, Azure, AWS, GCP ve Docker için desteklenir
  • Harici Bağımlılık Yok: Kendi başına yeterli, runtime kurulumları gerektirmez
  • Kapsamlı PDF Özellikleri: Başlıklar/altbilgiler, filigranlar, birleştirme/bölme, dijital imzalar, PDF/A uyumluluğu

Özellik Karşılaştırması

Aşağıdaki tabloWebView2veIronPDFarasındaki temel farkları vurgulamaktadır:

ÖzellikWebView2IronPDF
AmacıTarayıcı kontrolü (UI)PDF kütüphanesi (PDF için tasarlanmış)
Üretime HazırHAYIREVET
Bellek YönetimiUzun süreli işlemlerde sızıntılarStabil, düzgün bir şekilde elden çıkarılmış
Platform DesteğiYalnızca WindowsWindows, Linux, macOS, Docker
İş Parçacığı GereksinimleriSTA + Mesaj PompasıHerhangi bir iş parçacığı
Sunucu/BulutDesteklenmiyorDesteklenir
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 hack'lerEvet
WinForms/WPFEvetEvet
Başlıklar/AltbilgilerHAYIREvet (HTML)
FiligranlarHAYIREvet
PDF'leri BirleştirHAYIREvet
PDF'leri BölHAYIREvet
Dijital İmzalarHAYIREvet
Şifre KorumasıHAYIREvet
PDF/A UyumluluğuHAYIREvet
Form DoldurmaHAYIREvet
Profesyonel DestekPDF kullanımı için destek yokEvet
DokümantasyonSınırlı PDF belgeleriGeniş kapsamlı

API Mimari Farklılıkları

WebView2 veIronPDFarasındaki mimari farklar, her bir yaklaşımın PDF oluşturmasını nasıl ele aldığını inceleyince hemen ortaya çıkar.

WebView2 Karmaşık Async Deseni

WebView2, tarayıcı başlatma, gezinme, olay işleme ve DevTools Protokolü çağrılarını içeren çok adımlı bir asenkron süreç 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, birkaçWebView2karmaşıklığını gösterir: EnsureCoreWebView2Async() ile açık başlatma, NavigateToString() kullanarak gezinme, içerik yüklenmesini beklemek için keyfi gecikmeler ve düşük seviyeli DevTools Protocol çağrıları. Task.Delay, içeriğin ne zaman hazır olduğuna dair güvenilmez bir tahmini temsil eder—oluşmayı bekleyen bir yarış durumu.

IronPDF Basitleştirilmiş Yaklaşımı

IronPDF, tek bir yöntemle 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 render karmaşıklığını dahili olarak ele alır. Başlatma töreni yok, gezinme olayları yok, zamanlama tahminleri yok. Kapsamlı HTML dönüştürme rehberliği için HTML to PDF öğreticisini inceleyin.

URL'den PDF'e Donusum

Web sayfalarını PDF belgelerine dönüştürme işlemi,WebView2veIronPDFarasındaki karmaşıklık farkını gözler önüne serer.

WebView2 Uygulaması

WebView2, gezinme olaylarının yönetimini, tamamlanma geri çağrılarını ve manuel PDF çıkarmayı 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 Protocol'den JSON yanıtlarını ayrıştırmayı ve Base64 kod çözmeyi gerektirir. Gezinme tamamlandıktan sonra ilave Task.Delay(1000), JavaScript'in çalışmasını tamamladığından emin olmaya çalışır—başka bir güvenilmez zamanlama çözümü.

IronPDF Uygulaması

IronPDF, tek bir yöntem çağrısıyla doğrudan URL renderı 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 metodu gezinmeyi, JavaScript çalışmasını ve içerik yüklemeyi dahili olarak ele alır. Olay abonelikleri yok, zaman tahminleri yok, Base64 ayrıştırma yok.

Özel PDF Ayarları ve Seçenekleri

Sayfa boyutları, kenar boşlukları ve yönlendirme yapılandırması, API kullanılabilirliğinde önemli farklar ortaya koyar.

WebView2 DevTools Protokol Yapılandırmasi

WebView2, JSON serilestirmesi 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 icin inç kullanir, anonim nesneler ve JSON serilestirmesi gerektirir ve olay isleyicileri ve zamanlama gecikmeleri ile kompleks bir asin kron akisini korur.

IronPDF RenderingOptions Yapılandırmasi

IronPDF, RenderingOptions ozelligi araciligiyla guclu-typed yapılandırma saglar:

// 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 milimetre kullanır, standart kağıt boyutları için PdfPaperSize enumlar sağlar ve dosya tabanlı içerik için RenderHtmlFileAsPdf() gibi özel yöntemler sunar.

Ozel Yonlendirme ile HTML Dosyasini PDF'e Dönüştürme

Yatay yonelimli HTML dosyalarini dönüştürmek, PrintSettings yaklasimi ile RenderingOptions arasindaki farki gösterir.

WebView2 PrintSettings Yaklasimi

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'ya dikkat edin—içeriğin yazdırılmadan önce yüklendiğinden emin olmaya çalışan daha uzun keyfi bir bekleme.

IronPDF Basitlestirilmis Yapılandırma

IronPDF, ayni gorevi acik ayarlar ile ve zamanlama tahminleri olmadan yapar:

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

WebView2'den IronPDF'e gecisi degerlendiren takimlar, bu eslemenin kavramsal esdegerleri anlamalarina yardimci olacagini bulacaklar:

WebView2 APIIronPDF Eşdeğeri
new WebView2()new ChromePdfRenderer()
EnsureCoreWebView2Async()N/A
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
Yonlendirme olaylariWaitFor.JavaScript()
printBackground: truePrintHtmlBackgrounds = true

Takimlar WebView2'den IronPDF'e Gecmeyi Duseunduklerinde

Bazi senaryolar, geliştirme takimlarini WebView2'ye alternatif olarak IronPDF'i degerlendirmeye yonlendirir:

Coklu Platform Gereksinimleri

WebView2'nin yalnizca Windows'a ozgu siniri, Linux sunucular, Docker konteynerleri veya bulut ortamlarini hedefleyen uygulamalar icin uygun degildir. Azure, AWS, GCP veya konteyner altyapisina dağıtim yapan takimlar, PDF oluşturma icin WebView2'yi kullanamazlar.

Sunucu Tabanli PDF Oluşturma

WebView2'nin STA ve mesaj pompalama gereksinimi olan UI is parcasi, onu ASP.NET Core, arka plan hizmetleri veya API sonlandiricilari ile temelden uyumsuz yapar. Web taleplerine yanit olarak PDF oluşturmayi gerektiren uygulamalar, WebView2'yi kullanamazlar.

Bellek Kararlilik Endileşeleri

WebView2'nin belgelenmis bellek sızıntıları, uzun sureli işlemlerde uretim ortamlarinda sunucu çokuslerine neden olur. Gun boyunca surekli PDF oluşturan uygulamalar, bellegin icinden cikarılması kosullarina kadar bellek toplar.

PDF Özellik Gereksinimleri

WebView2'nin PrintToPdfAsync yalnızca temel HTML'den PDF'e dönüşüm sağlar. Basliklar/altbilgiler, filigranlar, PDF birlestirme/bolme, dijital imzalar, sifre korumasi veya PDF/A uyumlulugu gerektiren takimlar baska yerlere bakmalidir.

Basitlestirilmiş Geliştirme

WebView2'nin gerektirdigi karmaşık asin kron akisi—başlangic, yonlendirme olaylari, tamamlanma geri cagirimlari, zamanlama gecikmeleri, JSON serilestirme, Base64 kodunun cozulmesi—IronPDF'in tek yöntemlik yaklasimi ile karsilastirildiginda önemli bir geliştirme ve bakim yukune neden olur.

EkIronPDFYetenekleri

Temel PDF oluşturmanın otesinde, IronPDF, WebView2'nin sunamadigi belge işleme özelliklerini saglar:

.NET Uyumlulugu ve Gelecek Hazirikligi

WebView2'nin yalnizca Windows ile sinirli mimarisi, giderek artan çok platformlu .NET ekosisteminde geleceğini sinirlar. IronPDF, .NET 8, .NET 9 ve 2026'da beklenen .NET 10 dahil olmak üzere gelecek sürümlerle uyumluluğu sağlamak için düzenli güncellemelerle aktif geliştirme yapmaktadır. Kütüphanenin async/await desteği, modern C# geliştirme uygulamalarıyla uyumlu olup C# 14'te beklenen özellikleri içermektedir.

Sonuç

WebView2 ve IronPDF, .NET icinde temel olarak farkli PDF oluşturma yaklasimlarini temsil eder. WebView2, tesadufen PDF baski desteği olan bir tarayici yerlesirme kontroludur—uretim kullanimi icin onemli sinirlamalarla dolu bir yan özellik. Yalnızca Windows platformuna ozgu siniri, UI is parcasi gereksinimi, bellek sizintisi sorunları ve PDF-spesifik özelliklerin yoklugu, onu ciddi PDF oluşturma is yukleri icin uygunsuz hale getirir.

IronPDF, HTML'i PDF'ye dönüştürmek icin özel olarak tasarlanmis, çok platform destekli, sunucu-tarafli yetenekler ve kapsamli PDF işleme özellikleri sunan bir PDF kutuphanesidir. Duzgünlestirilmis API'si, WebView2'nin gerektirdigi karmaşık asin kron kalıplarını, olay isleyisini ve zamanlama hilelerini ortadan kaldırır.

WebView2'yi PDF oluşturmak icin kullanan takimlar icin, belgelenmis kararlilik sorunlari, platform sinirlamalari ve özellik eksiklikleri, amaca-yonelik alternatifleri degerlendirmeyi onemli kılar.WebView2veIronPDFarasindaki API esleme, IronPDF'un surekli olarak daha az kod gerektirdigi ve WebView2'nin getirdigi mimari sinirlamaları ortadan kaldırdığı icin aciktır.

Ek uygulama rehberliği için, belirli kullanım durumlarını ve ileri düzey özellikleri kapsayan IronPDF dokümantasyonu ve eğitimlerini inceleyin.