IRONSOFTWAREHOME
VIDEOLAR

C# İle Bir PDF Nasıl Temizlenir | IronPDF

Curtis Chau
Curtis Chau
Updated: 19 Temmuz 2026

WebView2, Microsoft'un yerleştirilebilir Edge/Chromium tarayıcı kontrolü (Microsoft.Web.WebView2), geliştiricilere Windows uygulamalarında web içeriğini görüntüleme olanağı sunar. Ancak, geliştirme ekipleri PDF oluşturmak içinWebView2kullanmaya çalıştığında, başsız ve sunucu senaryoları için uygun olmayan mimari sınırlamalara kapılırlar. WebView2, UI uygulamaları için tasarlanmış bir tarayıcı gömme kontrolüdür, PDF oluşturma kütüphanesi değil.

Bu kılavuz, .NET geliştiricilerinin uygulamalarında güvenilir PDF oluşturma ihtiyacı duymaları durumunda, WebView2'den IronPDF'ye geçiş yolu sağlamakta olup, kod karşılaştırmaları ve pratik örneklerle birlikte.

Neden WebView2 PDF Oluşturma için Uygun Değil

Geçiş yolunu incelemeden önce, WebView2'nin neden başsız PDF oluşturma için uygun olmadığına anlamanın faydası vardır:

SorunEtkiCiddiyet
Bellek SızıntılarıTekrar tekrarWebView2örnekleri oluşturan uzun süreli işlemlerde bellek artışı rapor edilir.YÜKSEK
Sadece WindowsLinux, macOS, Docker veya Windows dışı bulut ortamları için destek yokKRİTİK
UI İpliği GerekliMesaj pompası ile bir STA iş parçacığında çalıştırılması gerekir. Web sunucuları veya arka plan API'leri için uygun değil.KRİTİK
PDF İçin TasarlanmamışPrintToPdfAsync, bir ikincil yetenek olup, ana özellik değildir.YÜKSEK
Servislerde İstikrarsızWindows Hizmetlerinde ve arka plan çalışanlarında çöküşler ve kilitlenmeler rapor edilirYÜKSEK
Karmaşık Asenkron AkışGezinme olayları, tamamlama geri aramaları, yarış koşullarıYÜKSEK
Edge Çalışma Zamanı BağımlılığıHedef makine üzerinde EdgeWebView2Çalışma Zamanı yüklenmiş olmalıdırORTA
Başsız Mod YokBir UI kontrolü etrafında tasarlanmıştır; başsız bir işleyici değilORTA
PerformansYavaş başlangıç, ağır kaynak tüketimiORTA
PDF Destek Hikayesi YokMicrosoft, WebView2'yi bir PDF oluşturma ürünü olarak konumlandırmazORTA

Gerçek Dünya Başarısızlık Senaryoları

Bu kod modelleri üretimde genellikle sorunlara yol açar:

// WARNING: These patterns are known to cause problems in headless / server scenarios

//Sorun1: Memory growth - creates a newWebView2per PDF
public async Task<byte[]> GeneratePdf(string html) // High call volume accumulates memory
{
    using var webView = new WebView2(); // Disposal does not fully reclaim native resources
    await webView.EnsureCoreWebView2Async();
    webView.CoreWebView2.NavigateToString(html);
    // ... memory growth reported over time
}

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

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

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:

AspektWebView2IronPDF
AmacıTarayıcı kontrolü (UI)PDF kütüphanesi (PDF için tasarlanmış)
Üretime HazırHAYIREVET
Bellek YönetimiUzun süreli süreçlerde bellek artışı rapor edilirKararlı, 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ı
Desteklenen BağlamlarWinForms/WPF sadeceHerhangi bir .NET bağlamı: konsol, web, masaüstü
HTML'den PDF'yeTemelTam
URL'den PDF'yeTemelTam
Başlıklar/AltbilgilerHAYIREvet (HTML)
FiligranlarHAYIREvet
PDF'leri BirleştirmeHAYIREvet
PDF'leri BölmeHAYIREvet
Dijital İmzalarHAYIREvet
Şifre KorumasıHAYIREvet
PDF/A UyumluHAYIREvet
Profesyonel DestekPDF için yokEvet
DokümantasyonSınırlıKapsamlı

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

Geçiş bu öncü adımlarla hemen başlayabilir.

Adım 1: WebView2 Paketini Kaldırın

dotnet remove package Microsoft.Web.WebView2
SHELL

Ya da proje dosyanızdan çıkarın:

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

Adım 2: IronPDF Yükleme

dotnet add package IronPdf

3. Adım: Namespace'leri Güncelleme

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;

Adım 4: Lisansı Başlat

Uygulama başlangıcında lisans başlatmayı ekleyin:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Kod Göç Örnekleri

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

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

WebView2 Yaklaşımı:

// NuGet: Install-Package Microsoft.Web.WebView2
// (the WinForms host lives in the same package; no separate .WinForms package)
// Requires the EdgeWebView2Runtime installed on the target machine. Windows-only.
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);

        // PrintToPdfAsync(path, settings) returns Task<bool>; null = default settings
        bool ok = await webView.CoreWebView2.PrintToPdfAsync("output.pdf", null);
    }
}
C#

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

WebView2 sürümü, EnsureCoreWebView2Async() ile asenkron başlatma, NavigateToString() ile gezinme, render için beklemek üzere bir Task.Delay(2000) ve başarıyı gösteren bir Task<bool> döndüren son bir PrintToPdfAsync çağrısı gerektirir.IronPDF bu töreni ortadan kaldırır—bir işleyici oluşturun, HTML işleyin, kaydedin.

İleri düzey HTML-to-PDF senaryoları için HTML'den PDF'ye dönüşüm rehberine bakın.

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

URL'den PDF'e dönüştürme, WebView2'nin karmaşık asenkron navigasyon akışını gösterir.

WebView2 Yaklaşımı:

// NuGet: Install-Package Microsoft.Web.WebView2
// (Edge Chromium control; requires EdgeWebView2Runtime; Windows-only.)
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));
    }
}
C#

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

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

Kimlik doğrulama ve özel başlık seçenekleri için URL'den PDF'ye dokümantasyonu inceleyin.

HTML Dosyalarından Özel PDF Ayarları

Sayfa yönlendirmesi, kenar boşlukları ve kağıt boyutu farklı yaklaşımlar gerektirir.

WebView2 Yaklaşımı:

// NuGet: Install-Package Microsoft.Web.WebView2
// CreatePrintSettings() lives on CoreWebView2Environment.
// Margin* / PageWidth / PageHeight on CoreWebView2PrintSettings are in INCHES.
// PrintToPdfAsync(path, settings) returns Task<bool> (true on success) — not a stream.
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);

        CoreWebView2PrintSettings printSettings = webView.CoreWebView2.Environment.CreatePrintSettings();
        printSettings.Orientation = CoreWebView2PrintOrientation.Landscape;
        printSettings.MarginTop = 0.5;     // inches
        printSettings.MarginBottom = 0.5;  // inches
        printSettings.ShouldPrintBackgrounds = true;

        bool ok = await webView.CoreWebView2.PrintToPdfAsync("custom.pdf", printSettings);
        Console.WriteLine(ok ? "Custom PDF created" : "PrintToPdfAsync returned false");
    }
}

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

WebView2, 3 saniyelik bir Task.Delay (güvenilmez bir tahmin), CoreWebView2.Environment ile yazdırma ayarları oluşturma ve bir akış yerine Task<bool> döndüren bir await çağrısı gerektirir.WebView2marjinleri inç cinsinden ifade eder; IronPDF, doğrudan RenderingOptions özellikleri aracılığıyla milimetre kullanır.

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

KarmaşıkWebView2yapılandırmaları, DevTools Protokolü etkileşimi gerektirir.

WebView2 Yaklaşımı:

// NuGet: Install-Package Microsoft.Web.WebView2
// Uses raw Chrome DevTools Protocol via CallDevToolsProtocolMethodAsync.
// (Page.printToPDF returns base64 in result.data; units are inches.)
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));
    }
}
C#

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

WebView2, anonim nesneler oluşturarak JSON'a serileştirme, DevTools Protokolü yöntemlerini çağırma, JSON yanıtlarını ayrıştırma ve base64'ü elle decode etmeyi gerektirir. IronPDF, PdfPaperSize.Letter gibi net adlara sahip yazılı özellikler ve enum değerleri sağlar.

WebView2 API'den IronPDF Haritalama Referansı

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

WebView2 APIIronPDF Eşdeğeri
new WebView2()new ChromePdfRenderer()
EnsureCoreWebView2Async()Yok
NavigateToString(html) + PrintToPdfAsync()RenderHtmlAsPdf(html)
Navigate(url) + PrintToPdfAsync()RenderUrlAsPdf(url)
PrintSettings.PageWidthRenderingOptions.PaperSize
PrintSettings.PageHeightRenderingOptions.PaperSize
PrintSettings.MarginTopRenderingOptions.MarginTop
PrintSettings.OrientationRenderingOptions.PaperOrientation
ExecuteScriptAsync()HTML'de JavaScript
AddScriptToExecuteOnDocumentCreatedAsync()HTML <script> etiketleri
Gezinme olaylarıWaitFor.JavaScript()
CallDevToolsProtocolMethodAsync("Page.printToPDF")RenderHtmlAsPdf()

Yaygın Göç Sorunları ve Çözümleri

Problemi 1: Bellek Büyümesi

WebView2 Problemi: Uzun süreli çalışan işlemlerdeWebView2örneklerinin tekrarlı oluşturulmasında bellek büyümesi rapor edilmektedir, özellikle sabit bir mesaj pompası olmadan durumlarda.

IronPDF Çözümü: Öngörülebilir bertaraf ve using uyumlu yaşam döngüsü:

//IronPDF- clean memory management
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
} // Properly disposed

Sorun 2: Web Uygulamaları İçin UI İpliği Yok

WebView2 Sorunu: Mesaj pompası ile STA iş parçacığı gerektirir. ASP.NET Core kontrolörleriWebView2örnekleri oluşturamaz.

IronPDF Çözümü: Herhangi bir iş parçacığında çalışır:

// ASP.NET Core - just works
public async Task<IActionResult> GetPdf()
{
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}

Sorun 3: Navigasyon Olayı Karmaşıklığı

WebView2 Sorunu: TaskCompletionSource ile asenkron gezinme olaylarını, tamamlama geri çağrılarını ve yarış durumu koşullarını ele almak gerekir.

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

// Simple and predictable
var pdf = renderer.RenderHtmlAsPdf(html);
// or
var pdf = await renderer.RenderHtmlAsPdfAsync(html);

Sorun 4: Ölçü Birimleri

WebView2, ölçüler için inç kullanır (Mektup için 8,5 x 11). IronPDF, daha kesin ö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 Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Kod tabanınızdaWebView2PDF oluşturma kodunun tamamını belgeleyin. WebView2'nin sorunlara neden olduğu yerleri belirleyin (bellek sızıntıları, çökmeler, dağıtım sorunları). IronPDF belgelerini gözden geçirerek özellikleri öğrenin.

Kod Güncelleme Görevleri

  1. Microsoft.Web.WebView2 NuGet paketini kaldırın 2.IronPDF NuGet paketini yükleyin
  2. PDF oluşturma için sadece kullanılıyorsa WinForms/WPF bağımlılıklarını kaldırın 4.WebView2kodunu ChromePdfRenderer ile değiştirin
  3. STA iş parçacığı gerekliliklerini kaldırın
  4. Gezinti olay işleyicilerini ve TaskCompletionSource kalıplarını kaldırın
  5. Task.Delay hilelerini kaldırın
  6. Başlangıçta IronPDF lisans başlatması ekleyin

Geçiş Sonrası Testler

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

  • Hedef ortamda test edin (ASP.NET, Docker, Linux uygunsa)
  • PDF çıktı kalitesinin beklentilere uygun olmasını doğrulayın
  • JavaScript ağırlıklı sayfaların düzgün render edildiğini test edin
  • IronPDF'in HTML yetenekleriyle başlıkların ve dipnotların çalıştığını doğrulayın
  • Uzun işletim sürecinin bellek stabilitesini yük test edin
  • Bellek birikimi olmadan 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 gereksinimlerinden EdgeWebView2Çalışma Zamanı bağımlılığını kaldırın
  • Sunucu gereksinimleri belgesini güncelleyin
  • Platformlar arası dağıtımın hedef platformlarda çalıştığını doğrulayın
Lütfen dikkate alın: 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.
Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez