Playwright'tan IronPDF'e C# ile Nasıl Geçilir
Playwright for .NET'ten IronPDF'e geçiş, PDF üretimi iş akışınızı bir test odaklı tarayıcı otomasyon aracından amaca yönelik bir PDF kütüphanesine dönüştürür. Bu kılavuz, karmaşık asenkron desenleri, tarayıcı yaşam döngüsü yönetimini ve 400MB+ tarayıcı indirmelerini ortadan kaldırırken daha iyi performans ve profesyonel PDF özellikleri sağlayan eksiksiz bir adım adım geçiş yolu sunar.
Playwright'ten IronPDF'e Neden Geçilmeli
Playwrightfor .NET'i Anlamak
Playwright for .NET, Microsoft'un uçtan uca test çerçevesidir, belge oluşturma kütüphanesi DEĞİL. Başlangıçtan itibaren Chromium, Firefox ve WebKit tarayıcılarında otomatik test için oluşturulmuştur. Playwright, senaryoları test etme konusunda çok başarılıdır: düğmelere tıklama, formları doldurma, ağ isteklerini yakalama, ekran görüntüsü alma ve tarayıcılar arası uyumluluğu doğrulama.
Kritik Anlayış: Playwright, PDF üretimi için yeniden görevlendirilen bir test aracıdır. PDF oluşturma, tarayıcının yazdırma işlevinin (Ctrl+P) yan etkisidir, birincil tasarım amacı değildir. Bu, temel mimari uyumsuzluklar yaratır:
- Öncelikli test mimarisi: Etkileşimli tarayıcı testi için inşa edilmiştir, başsız belge üretimi için değil
- Çok tarayıcı yükü: Yalnızca PDF üretimi gerektiğinde bile 400MB+ tarayıcı ikililerini (Chromium, Firefox, WebKit) indirir.
- Teste odaklı API: Belge üretimi için değil, test otomasyon iş akışları için tasarlanan karmaşık asenkron desenler
- Belge özellikleri yok: PDF/A uygunluğu, dijital imzalar, filigran ekleme, birleştirme, güvenlik kontrolleri eksik
Test Çerçevesi Sorunu
Playwright, uçtan uca test için tasarlanmıştır, belge oluşturma için değil. Bu, PDF'ler için kullanıldığında temel sorunlar yaratır:
-
400MB+ tarayıcı indirmeleri ilk kullanım öncesi gereklidir. Playwright'ın varsayılan yapılandırması, birden fazla tarayıcı indirme içerir, bu da kaynak sınırlamaları olan ortamlar için bir düşünce olabilir.
-
Karmaşık asenkron desenler tarayıcı bağlamları ve sayfa yönetimi ile. Geliştiriciler, tarayıcı bağlamları ve sayfa yönetimiyle birlikte uygun bertaraf uygulamalarıyla ilgili bilgi sahibi olmalıdır.
-
Test öncelikli mimari belge üretimi için optimize edilmemiştir.
-
Yazdırarak PDF'ye dönüştürme sınırlamaları tarayıcı yazdırmasına (Ctrl+P) eşdeğerdir. Düzen akabilir, arka planlar varsayılan olarak atlanabilir ve çıktı yazdırma için sayfalanır.
-
PDF/A veya PDF/UA desteği yok erişilebilirlik uygunluğu için. Playwright, PDF/A (arşivleme) veya PDF/UA (erişilebilirlik) uyumlu belgeler üretemez. Bölüm 508, AB erişilebilirlik yönergeleri veya uzun vadeli arşiv gereksinimleri için özel bir PDF kütüphanesine ihtiyaçınız olacaktır.
- Kaynak yoğun işlemler tam tarayıcı örnekleri gerektirir.
Test Çerçevesi Yapılandırma Sorunu
Playwright, belgeleri anlamaları gerekmeyen doküman geliştiricilerinin ihtiyaç duymayacağı test odaklı geniş yapılandırma gerektirir:
Tarayıcı Kurulumu Gereklidir:
# Manual installation step required before first use
playwright install # Downloads 400MB+ of browser binaries
# Or programmatically:
playwright install chromium # Still 100MB+ for single browser
# Manual installation step required before first use
playwright install # Downloads 400MB+ of browser binaries
# Or programmatically:
playwright install chromium # Still 100MB+ for single browser
Tarayıcı Başlatma Yapılandırması:
// Testing-focused launch options for PDF generation
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless = true, // Required for server environments
Args = new[] { "--disable-gpu", "--no-sandbox" } // Linux/Docker configs
});
// Testing-focused launch options for PDF generation
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless = true, // Required for server environments
Args = new[] { "--disable-gpu", "--no-sandbox" } // Linux/Docker configs
});
' Testing-focused launch options for PDF generation
Using playwright = Await Playwright.CreateAsync()
Dim browser = Await playwright.Chromium.LaunchAsync(New BrowserTypeLaunchOptions With {
.Headless = True, ' Required for server environments
.Args = New String() { "--disable-gpu", "--no-sandbox" } ' Linux/Docker configs
})
End Using
Teste Özgü Yapılandırma Seçenekleri:
Headless: Üretim için başsız modu yapılandırmanız gerekiyor (test için varsayılan olarak başlı ayarlıdır)SlowMo: Zamanlama gecikmelerini test edin (PDF oluşturma için önemsiz)Devtools: Test araçları yapılandırması (belgeler için gerekli değil)ExecutablePath: Test ortamları için özel tarayıcı yollarıProxy: Test için ağ kesme (gereksiz yük)DownloadsPath: Test eser yönetimiTracesDir: Test yürütme izleri
Tarayıcı Bağlam Yönetimi:
// Complex context lifecycle from testing paradigm
var context = await browser.NewContextAsync(new BrowserNewContextOptions
{
ViewportSize = new ViewportSize { Width = 1920, Height = 1080 },
UserAgent = "custom-user-agent",
Locale = "en-US",
TimezoneId = "America/New_York"
});
var page = await context.NewPageAsync();
// ... generate PDF ...
await context.CloseAsync(); // Manual cleanup required
await browser.CloseAsync(); // Manual cleanup required
// Complex context lifecycle from testing paradigm
var context = await browser.NewContextAsync(new BrowserNewContextOptions
{
ViewportSize = new ViewportSize { Width = 1920, Height = 1080 },
UserAgent = "custom-user-agent",
Locale = "en-US",
TimezoneId = "America/New_York"
});
var page = await context.NewPageAsync();
// ... generate PDF ...
await context.CloseAsync(); // Manual cleanup required
await browser.CloseAsync(); // Manual cleanup required
' Complex context lifecycle from testing paradigm
Dim context = Await browser.NewContextAsync(New BrowserNewContextOptions With {
.ViewportSize = New ViewportSize With {.Width = 1920, .Height = 1080},
.UserAgent = "custom-user-agent",
.Locale = "en-US",
.TimezoneId = "America/New_York"
})
Dim page = Await context.NewPageAsync()
' ... generate PDF ...
Await context.CloseAsync() ' Manual cleanup required
Await browser.CloseAsync() ' Manual cleanup required
Çoklu Tarayıcı Karmaşıklığı:
//Playwrightdownloads multiple browsers by default
await playwright.Chromium.LaunchAsync(); // For Chrome testing
await playwright.Firefox.LaunchAsync(); // For Firefox testing
await playwright.Webkit.LaunchAsync(); // For Safari testing
// All downloaded but only Chromium needed for PDF generation
//Playwrightdownloads multiple browsers by default
await playwright.Chromium.LaunchAsync(); // For Chrome testing
await playwright.Firefox.LaunchAsync(); // For Firefox testing
await playwright.Webkit.LaunchAsync(); // For Safari testing
// All downloaded but only Chromium needed for PDF generation
Option Strict On
' Playwright downloads multiple browsers by default
Await playwright.Chromium.LaunchAsync() ' For Chrome testing
Await playwright.Firefox.LaunchAsync() ' For Firefox testing
Await playwright.Webkit.LaunchAsync() ' For Safari testing
' All downloaded but only Chromium needed for PDF generation
IronPDF: Sıfır Yapılandırma, Sıfır Kurulum
// No installation, no configuration, no lifecycle management
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No installation, no configuration, no lifecycle management
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
' No installation, no configuration, no lifecycle management
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Gerçek tak-çalıştır:IronPDFtüm test çerçevesi gereksinimlerini ortadan kaldırır. Tarayıcı kurulum komutları yok, başsız yapılandırma yok, bağlam yönetimi yok—sadece oluşturun ve render edin. Özellikle belge oluşturma için geliştirilmiştir, test araçlarından uyarlanmadı.
Playwright veIronPDFPerformans Karşılaştırması
| Metrik | Playwright | IronPDF |
|---|---|---|
| Birincil Amaç | E2E Test Çerçevesi | PDF Belge Oluşturma |
| Tasarım Felsefesi | PDF yan özelliğine sahip test aracı | Amaçlanmış bir PDF kütüphanesi |
| Kurulum Gerektirir | playwright install (400MB+ indirme) |
Yok - anında kurulum |
| Yapılandırma Gerektirir | Başsız mod, tarayıcı başlatma seçenekleri, bağlamlar | Sıfır yapılandırma |
| Tarayıcı İndir | 400MB+ (Chromium, Firefox, WebKit) | Dahili optimize edilmiş motor |
| Kurulum Karmaşıklığı | Komut satırı ile kurulum + başlatma yapılandırması | Tak-çalıştır |
| İlk Render (Soğuk Başlangıç) | 4,5 saniye | 2,8 saniye |
| Sonraki Renderlar | 3,8-4,1 saniye | 0,8-1,2 saniye |
| Dönüşüm Başına Bellek | 280-420MB | 80-120MB |
| API Karmaşıklığı | Karmaşık asenkron tarayıcı/bağlam/sayfa yaşam döngüsü | Basit senkron tek satır |
| Başlatma | CreateAsync() + LaunchAsync() + NewPageAsync() |
new ChromePdfRenderer() |
| PDF/A Desteği | Mevcut değil | Destekleniyor |
| PDF/UA Erişilebilirlik | Mevcut değil | Destekleniyor |
| Dijital İmzalar | Mevcut değil | Destekleniyor |
| PDF Düzenleme | Mevcut değil | Birleştir, böl, damgala, düzenle |
| Profesyonel Destek | Topluluk | SLA ile ticari |
IronPDF, PDF oluşturma odaklı olarak geliştirilmiştir. Test odaklı Playwright'tan farklı olarak,IronPDFbelge merkezli çeşitli API özellikleri sunar. Tek bir optimize edilmiş Chromium örneğine dayanır, etkinliği tercih eder ve hem senkron hem de asenkron işlemler sunar. Bu, PDF işlevselliği gerektiren geliştiriciler için daha basit bir zihinsel model ve iş akışı sunar.
.NET 10 ve C# 14'ün 2025 ve 2026'da benimsenmesini planlayan ekipler içinIronPDFtarayıcı otomasyonu yükünü ortadan kaldıran ve daha iyi performans ve profesyonel belge özellikleri sunan bir PDF çözümü sunar.
Sonuç
Playwright, Microsoft'un QA mühendislerinin çapraz tarayıcı otomatik testler çalıştırması için tasarlanan test çerçevesidir. Bunu PDF oluşturma için kullanmak, geniş test spesifik bilgisi gerektiren bir mimari uyumsuzluktur:
- Manuel tarayıcı kurulumu (
playwright install) - Üretim için başsız mod yapılandırması
- Tarayıcı başlatma seçeneği yönetimi
- Bağlam yaşam döngüsü yapılandırması
- Sadece birine ihtiyaç duyulurken çoklu tarayıcı indirmeleri (400MB+)
- Karmaşık asenkron/await test paradigmasından
IronPDF bir belge oluşturma kütüphanesidir ve PDF iş akışları kuran geliştiriciler için tasarlanmıştır. Gerçekten tak ve çalıştır:
- Sıfır kurulum—hemen çalışır
- Sıfır yapılandırma—akıllı varsayılanlar
- Sıfır tarayıcı indirimi—optimize motor dahildir
- Basit API—öğrenilecek test kavramı yok
- Otomatik kaynak yönetimi—yaşam döngüsü karmaşıklığı yok
Eğer tarayıcılar arasında web uygulamalarını test etmeniz gerekiyorsa,Playwrightkullanın. Eğer PDF belgeleri oluşturmanız gerekiyorsa,IronPDFkullanın. Belge oluşturma için bir test çerçevesini uyarlamayın—özel olarak iş için geliştirilen aracı kullanın.
Başlamadan Önce
Önkoşullar
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleme yeteneği
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# Remove Playwright
dotnet remove package Microsoft.Playwright
# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory
# Add IronPDF
dotnet add package IronPdf
# Remove Playwright
dotnet remove package Microsoft.Playwright
# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory
# Add IronPDF
dotnet add package IronPdf
IronPDF ile playwright install gerekmez - render motoru otomatik olarak dahil edilmiştir.
Lisans Yapılandırması
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
API Referansının Tamamı
Namespace Değişiklikleri
// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: Playwright
Imports Microsoft.Playwright
Imports System.Threading.Tasks
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
Temel API Eşleştirmeleri
| Playwright API | IronPDF API |
|---|---|
Playwright.CreateAsync() |
new ChromePdfRenderer() |
playwright.Chromium.LaunchAsync() |
Gerekli değil |
browser.NewPageAsync() |
Gerekli değil |
page.GotoAsync(url) |
renderer.RenderUrlAsPdf(url) |
page.SetContentAsync(html) + page.PdfAsync() |
renderer.RenderHtmlAsPdf(html) |
page.CloseAsync() |
Gerekli değil |
browser.CloseAsync() |
Gerekli değil |
PagePdfOptions.Format |
RenderingOptions.PaperSize |
PagePdfOptions.Margin |
RenderingOptions.MarginTop/Bottom/Left/Right |
PagePdfOptions.DisplayHeaderFooter |
TextFooter |
PagePdfOptions.HeaderTemplate |
RenderingOptions.HtmlHeader |
PagePdfOptions.FooterTemplate |
RenderingOptions.HtmlFooter |
<span class='pageNumber'> |
{page} |
Kod Geçiş Örnekleri
Örnek 1: HTML Dizesini PDF'ye Dönüştürme
Öncesi (Playwright):
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
await page.SetContentAsync(html);
await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });
await browser.CloseAsync();
}
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
await page.SetContentAsync(html);
await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });
await browser.CloseAsync();
}
}
Imports Microsoft.Playwright
Imports System.Threading.Tasks
Module Program
Async Function Main(args As String()) As Task
Dim playwright = Await Playwright.CreateAsync()
Dim browser = Await playwright.Chromium.LaunchAsync()
Dim page = Await browser.NewPageAsync()
Dim html As String = "<h1>Hello World</h1><p>This is a test PDF.</p>"
Await page.SetContentAsync(html)
Await page.PdfAsync(New PagePdfOptions With {.Path = "output.pdf"})
Await browser.CloseAsync()
End Function
End Module
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main(ByVal args As String())
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<h1>Hello World</h1><p>This is a test PDF.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
Bu örnek temel mimari farkı göstermektedir. Playwright, beş asenkron işlem gerektirir: Playwright.CreateAsync(), Chromium.LaunchAsync(), NewPageAsync(), SetContentAsync() ve PdfAsync(), ayrıca CloseAsync() ile belirgin tarayıcı temizliği gerektirir.
IronPDF, bu karmaşıklıkları ortadan kaldırır: bir ChromePdfRenderer oluşturun, RenderHtmlAsPdf() çağırın ve SaveAs() yapın. Asenkron desenler yok, tarayıcı yaşam döngüsü yok, temizleme kodu yok. IronPDF'in yaklaşımı, daha temiz bir sözdizimi ve modern .NET uygulamalarıyla daha iyi entegrasyon sunar. Kapsamlı örnekler için HTML'den PDF'e döndürme belgesine bakın.
Örnek 2: URL'den PDF'e Dönüştürme
Öncesi (Playwright):
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.example.com");
await page.PdfAsync(new PagePdfOptions
{
Path = "webpage.pdf",
Format = "A4"
});
await browser.CloseAsync();
}
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.GotoAsync("https://www.example.com");
await page.PdfAsync(new PagePdfOptions
{
Path = "webpage.pdf",
Format = "A4"
});
await browser.CloseAsync();
}
}
Imports Microsoft.Playwright
Imports System.Threading.Tasks
Module Program
Async Function Main(args As String()) As Task
Dim playwright = Await Playwright.CreateAsync()
Dim browser = Await playwright.Chromium.LaunchAsync()
Dim page = Await browser.NewPageAsync()
Await page.GotoAsync("https://www.example.com")
Await page.PdfAsync(New PagePdfOptions With {
.Path = "webpage.pdf",
.Format = "A4"
})
Await browser.CloseAsync()
End Function
End Module
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main(ByVal args As String())
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
Playwright, bir URL'ye gitmek için GotoAsync() kullandıktan sonra PdfAsync() kullanır. IronPDF, gezinti ve PDF oluşturmayı bir çağrıda ele alan tek bir RenderUrlAsPdf() yöntemi sunar. Playwright'ın Format'yi PagePdfOptions içinde belirttiğini ve IronPDF'nin kağıt boyutu yapılandırması için RenderingOptions.PaperSize kullandığını unutmayın. Detayli bilgi icin eğitimlerimize bakin.
Örnek 3: Kenar Boşluklu Özel Sayfa Boyutu
Öncesi (Playwright):
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
await page.PdfAsync(new PagePdfOptions
{
Path = "custom.pdf",
Format = "Letter",
Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
});
}
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
await page.PdfAsync(new PagePdfOptions
{
Path = "custom.pdf",
Format = "Letter",
Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
});
}
}
Imports Microsoft.Playwright
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Using playwright = Await Playwright.CreateAsync()
Await Using browser = Await playwright.Chromium.LaunchAsync()
Dim page = Await browser.NewPageAsync()
Await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>")
Await page.PdfAsync(New PagePdfOptions With {
.Path = "custom.pdf",
.Format = "Letter",
.Margin = New Margin With {
.Top = "1in",
.Bottom = "1in",
.Left = "0.5in",
.Right = "0.5in"
}
})
End Using
End Using
End Function
End Module
Sonra (IronPDF):
// 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 = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 12;
renderer.RenderingOptions.MarginRight = 12;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
pdf.SaveAs("custom.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 = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 12;
renderer.RenderingOptions.MarginRight = 12;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
pdf.SaveAs("custom.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.MarginLeft = 12
renderer.RenderingOptions.MarginRight = 12
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>")
pdf.SaveAs("custom.pdf")
End Sub
End Class
Playwright, dize tabanlı marjin değerleri kullanırken ("1in", "0.5in"),IronPDFsayısal milimetre değerleri kullanır. Dönüşüm: 1 inç = 25,4mm, bu nedenle "1in" 25 olur ve "0.5in" yaklaşık olarak 12 olur. Playwright'ın Format = "Letter", IronPDF'nin PaperSize = PdfPaperSize.Letter ile eşleşir.
Örnek 4: Başlıklar, Alt Bilgiler ve Özel Ayarlar
Öncesi (Playwright):
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
await page.SetContentAsync(html);
await page.PdfAsync(new PagePdfOptions
{
Path = "custom.pdf",
Format = "A4",
Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
});
await browser.CloseAsync();
}
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
await page.SetContentAsync(html);
await page.PdfAsync(new PagePdfOptions
{
Path = "custom.pdf",
Format = "A4",
Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
});
await browser.CloseAsync();
}
}
Imports Microsoft.Playwright
Imports System.Threading.Tasks
Module Program
Async Function Main(args As String()) As Task
Dim playwright = Await Playwright.CreateAsync()
Dim browser = Await playwright.Chromium.LaunchAsync()
Dim page = Await browser.NewPageAsync()
Dim html As String = "<h1>Custom PDF</h1><p>With margins and headers.</p>"
Await page.SetContentAsync(html)
Await page.PdfAsync(New PagePdfOptions With {
.Path = "custom.pdf",
.Format = "A4",
.Margin = New Margin With {.Top = "1cm", .Bottom = "1cm", .Left = "1cm", .Right = "1cm"},
.DisplayHeaderFooter = True,
.HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
.FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
})
Await browser.CloseAsync()
End Function
End Module
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.TextHeader.CenterText = "Header";
renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";
string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.TextHeader.CenterText = "Header";
renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";
string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main(args As String())
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 10
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.TextHeader.CenterText = "Header"
renderer.RenderingOptions.TextFooter.CenterText = "Page {page}"
Dim html As String = "<h1>Custom PDF</h1><p>With margins and headers.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("custom.pdf")
End Sub
End Class
Bu örnek başlık/alt bilgi yer tutucu sözdizimi farkını gösterir. Playwright, HTML sınıf tabanlı yer tutucular kullanırken (<span class='pageNumber'></span>),IronPDFkıvırcık parantez yer tutucuları kullanır ({page}). Playwright'ın başlık/dipnotları etkinleştirmek için DisplayHeaderFooter = true gerektirdiğini, IronPDF'nin ise başlık/dipnot içeriği ayarladığınızda bunları otomatik olarak etkinleştirdiğini unutmayın.
Kritik Geçiş Notları
Asenkron'dan Senkron'a Dönüşüm
Playwright boyunca async/await gerektirir;IronPDFsenkron işlemleri destekler:
// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.SetContentAsync(html);
return await page.PdfAsync();
}
// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
var renderer = new ChromePdfRenderer();
return renderer.RenderHtmlAsPdf(html).BinaryData;
}
// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.SetContentAsync(html);
return await page.PdfAsync();
}
// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
var renderer = new ChromePdfRenderer();
return renderer.RenderHtmlAsPdf(html).BinaryData;
}
Imports System.Threading.Tasks
Imports Microsoft.Playwright
Public Class PdfGenerator
' Playwright: Async required
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
Using playwright = Await Playwright.CreateAsync()
Await Using browser = Await playwright.Chromium.LaunchAsync()
Dim page = Await browser.NewPageAsync()
Await page.SetContentAsync(html)
Return Await page.PdfAsync()
End Using
End Using
End Function
' IronPDF: Sync is simpler
Public Function GeneratePdf(html As String) As Byte()
Dim renderer = New ChromePdfRenderer()
Return renderer.RenderHtmlAsPdf(html).BinaryData
End Function
End Class
Kenarlik Birimi Dönüşümü
Playwright string birimler kullanır;IronPDFsayısal milimetre kullanır:
| Playwright | IronPDF (mm) |
|---|---|
"1in" |
25 |
"0.5in" |
12 |
"1cm" |
10 |
Başlık/Alt Bilgi Yer Tutucu Dönüşümü
| Playwright Sınıfı | IronPDF Yer Tutucu |
|---|---|
<span class='pageNumber'> |
{page} |
<span class='totalPages'> |
{total-pages} |
<span class='date'> |
{date} |
<span class='title'> |
{html-title} |
Tarayıcı Yaşam Döngüsü Ortadan Kaldırma
Tüm tarayıcı yönetim kodunu kaldırın:
// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();
// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();
// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
' Playwright: Explicit cleanup required
Await page.CloseAsync()
Await browser.CloseAsync()
playwright.Dispose()
' IronPDF: No disposal needed - just use the renderer
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Geçiş Sonrası Yeni Özellikler
IronPDF'ye geçtikten sonra Playwright'ın sağlayamayacağı yetenekler kazanırsınız:
PDF Birleştirme
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = renderer.RenderHtmlAsPdf(html1)
Dim pdf2 = renderer.RenderHtmlAsPdf(html2)
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Filigranlar
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
Şifre Koruması
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "readonly"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
Dijital İmzalar
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim signature = New PdfSignature("certificate.pfx", "password")
pdf.Sign(signature)
PDF/A Uyumu
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b)
Goc Kontrol Listesi
Geçiş Öncesi
- TümPlaywrightPDF oluşturma kodunu tanımlayın
- Belge kenar boşluğu değerleri (inç/cm'yi milimetreye dönüştürün)
- Dönüşüm için başlık/alt bilgi yer tutucu sözdizimini not alın
- ironpdf.com adresindenIronPDFlisans anahtarını alın
Paket Değişiklikleri
Microsoft.PlaywrightNuGet paketini kaldırın- Yaklaşık 400MB disk alanını geri kazanmak için
.playwrightklasörünü silin IronPdfNuGet paketini yükleyin:dotnet add package IronPdf
Kod Değişiklikleri
- Ad alanı eklerini güncelleyin
- Asenkron tarayıcı yaşam döngüsünü
ChromePdfRendererile değiştirin page.SetContentAsync()+page.PdfAsync()öğeleriniRenderHtmlAsPdf()'ye dönüştürünpage.GotoAsync()+page.PdfAsync()öğeleriniRenderUrlAsPdf()'ye dönüştürün- Kenar boşluğu stringlerini milimetre değerlerine çevirin
- Başlık/alt bilgi yer tutucu sözdizimini dönüştürün
- Tüm tarayıcı/sayfa imha kodunu kaldırın
- Uygulama başlatıldığında lisans başlatma ekleyin
Geçişten Sonra
- PDF çıktısının görsel karşılaştırması
- Sayfa numaraları ile başlık/alt bilgi render'ını doğrulayın
- Kenar boşluklarının ve sayfa boyutlandırmasının doğruluğunu test edin
- Gerektiği gibi yeni yetenekler (güvenlik, filigranlar, birleştirme) ekleyin

