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
}
}
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
Ya da proje dosyanızdan kaldırın:
<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />
<PackageReference Include="Microsoft.Web.WebView2" Version="*" Remove />
Adım 2: IronPDF'i Kurun
dotnet add package IronPdf
dotnet add package IronPdf
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
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"
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
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
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
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
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
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
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
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
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
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
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);
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)
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
- Microsoft.Web.WebView2 NuGet paketini kaldırın
- IronPdf NuGet paketini kurun
- Yalnızca PDF oluşturma için kullanılan WinForms/WPF bağımlılıklarını kaldırın
4.WebView2kodunu
ChromePdfRendererile değiştirin - STA iplik gerekliliklerini kaldırın
- Gezinme olay işleyicilerini ve
TaskCompletionSourcedesenlerini kaldırın Task.Delayhack'lerini kaldırın- 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.

