Playwright'tan IronPDF'e C# ile Nasıl Geçilir
MicrosoftPlaywrightfor .NET'ten IronPDF'ye geçmek, PDF oluşturma iş akışınızı bir tarayıcı otomasyon testi çerçevesinden amaca yönelik bir PDF kütüphanesine taşır. Bu kılavuz, Chrome tabanlı tarayıcıların yaşam döngüsü yönetimini ve ayrı playwright install tarayıcı ikili dosya indirme adımını ortadan kaldıran adım adım bir göç yolu sağlar.
Neden Playwright'ten IronPDF'e Geçmelisiniz
Playwright .NET için'i Anlamak
Playwright for .NET (NuGet Microsoft.Playwright, MIT lisanslı), esas olarak Chromium, Firefox ve WebKit üzerinde uçtan uca testler için tasarlanmış, Microsoft'un tarayıcı otomasyon çerçevesidir. Tipik iş yükleri, düğmelere tıklama, formları doldurma, ağ isteklerini kesme, ekran görüntülerini alma ve tarayıcı uyumluluğunu doğrulama gibi etkileşimlidir.
Playwright'te PDF oluşturma, yalnızca Chromium üzerinde desteklenen Page.PdfAsync() aracılığıyla sunulan ikincil bir özelliktir — Firefox ve WebKit PDF çıktısı uygulamaz. Çıktı, tarayıcının PDF olarak yazdırma yolunu kullanır (Ctrl+P'ye eşdeğer) ve bu, düzenler, arka planlar ve sayfalama için etkilere sahiptir:
- Öncelikli olarak teste yönelik bir mimari olup, başsız belge üretimi için optimize edilmemiştir
- Tarayıcı ikili dosyaları (Chromium artı isteğe bağlı olarak Firefox ve WebKit)
playwright installüzerinden ayrı olarak yüklenmelidir - Test otomasyon iş akışları için tasarlanmış asenkron API
- İçerisinde yerleşik PDF/A, PDF/UA, dijital imza, filigranlama, birleştirme veya güvenlik özellikleri yoktur
Playwright Kullanırken Dikkat Edilmesi Gereken Noktalar
Playwright, uçtan uca test için tasarlanmıştır, doküman üretimi için değil. PDF'ler için yeniden yapılandırılırken bazı pratik çıkarımlar:
-
Tarayıcı ikili dosyaları
playwright installaracılığıyla. Playwright'in varsayılan yapılandırması tarayıcı ikili dosyalarını (Chromium, Firefox, WebKit) indirir, bu da katı kaynak veya dağıtım kısıtlamalarının olduğu ortamlar için bir düşünce olabilir. -
Asenkron tarayıcı/bağlam/sayfa modeli. Geliştiricilerin tarayıcı bağlamları ve sayfa yaşam döngüsü yönetimi (imha dahil) konusunda rahat olmaları gerekir.
-
Teste yönelik mimari, yüksek hacimli belge üretimine optimize edilmemiştir.
-
Ctrl+P tarayıcı yazdırma işlemleri ile eşdeğer Print-to-PDF anlamı. Düzenler yeniden akabilir, arka planlar varsayılan olarak atlanabilir ve çıktı yazdırma için sayfalara bölünür.
-
PDF/A veya PDF/UA çıktısı yoktur.Playwrightstilinde PDF/A (arşivleme) veya PDF/UA (erişebilirlik) uyumlu belgeler üretmez. 508. Bölüm, AB erişilebilirlik direktifleri veya uzun süreli arşivleme gereksinimleri için genellikle özel bir PDF kütüphanesi gereklidir.
- Her PDF oluşturduğunda tarayıcı bağlamları ve sayfaları başlatıldığında tarayıcı kaynak kullanımı.
Yapılandırma Yüzeyi
Playwright, test otomasyonuna yönelik bir yapılandırma yüzeyi açar. Sadece PDF oluşturma için kullanıldığında en alakalı parçalar:
Tarayıcı Kurulum Adımı:
# Separate installation step before first use
playwright install # Downloads browser binaries (Chromium, Firefox, WebKit)
# Or for a single browser:
playwright install chromium # Chromium-only (the only engine that supports PDF output)
# Separate installation step before first use
playwright install # Downloads browser binaries (Chromium, Firefox, WebKit)
# Or for a single browser:
playwright install chromium # Chromium-only (the only engine that supports PDF output)
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 Özel Yapılandırma Seçenekleri:
Headless: Üretim için başsız mod yapılandırılmalıdır (test için varsayılan olarak başlı gelir)SlowMo: Test zamanlama gecikmeleri (PDF oluşturma için ilgisiz)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ğ yakalama (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ı yüzeyi:
//Playwrightsupports launching multiple engines
await playwright.Chromium.LaunchAsync(); // For Chromium-based testing (and PDF output)
await playwright.Firefox.LaunchAsync(); // For Firefox testing
await playwright.Webkit.LaunchAsync(); // For WebKit/Safari testing
// Note: Page.PdfAsync() is implemented on Chromium only.
//Playwrightsupports launching multiple engines
await playwright.Chromium.LaunchAsync(); // For Chromium-based testing (and PDF output)
await playwright.Firefox.LaunchAsync(); // For Firefox testing
await playwright.Webkit.LaunchAsync(); // For WebKit/Safari testing
// Note: Page.PdfAsync() is implemented on Chromium only.
IronPDF: tek demetleme rendiçleyicisi
// No separate browser-binary install or context management
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No separate browser-binary install or context management
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
IronPDF, işleme motorunu NuGet paketine dahil ettiği için ayrı bir playwright install adımı yoktur ve yönetilecek tarayıcı/bağlam/sayfa yaşam döngüsü gerekmez.
Playwright vs IronPDF Performans Karşılaştırması
| Metrik | Playwright | IronPDF |
|---|---|---|
| Birincil Amaç | E2E tarayıcı-otomasyon çerçevesi | PDF belge oluşturma |
| Tasarım Felsefesi | Öncelik: Test; PDF, ikincil bir özelliktir | Amaç için üretilmiş PDF kütüphanesi |
| NuGet Paketi | Microsoft.Playwright (MIT) |
IronPdf (ticari) |
| Tarayıcı-Dosya Adımı | Ayrı playwright install indir |
NuGet paketine demetlendi |
| PDF Destekleyen Motorlar | Sadece Chromium (Firefox / WebKit Page.PdfAsync() uygulamaz) |
Tek demet Chromium tabanlı rendiçleyici |
| İlk Render (Soğuk Başlangıç) | 4.5 saniye | 2.8 saniye |
| Sonraki Render'lar | 3.8-4.1 saniye | 0.8-1.2 saniye |
| Dönüşüm Başına Bellek | 280-420MB | 80-120MB |
| API Stili | Asenkron tarayıcı/bağlam/sayfa yaşam döngüsü | Eşzamanlı veya asenkron; renderer-based |
| Başlatma | CreateAsync() + LaunchAsync() + NewPageAsync() |
new ChromePdfRenderer() |
| PDF/A Desteği | Mevcut değil | Desteklenen |
| PDF/UA Erişilebilirliği | Mevcut değil | Desteklenen |
| Dijital İmzalar | Mevcut değil | Desteklenen |
| PDF Düzenleme | Mevcut değil | Birleştir, böl, damgala, düzenle |
| Destek Modeli | Topluluk | Ticari SLA ile |
IronPDF, PDF oluşturma için özel olarak inşa edilmiş ve belge merkezli bir API yüzeyi ile donatılmıştır. Tek bir demet Chromium tabanlı renderleme motoru kullanır ve eşzamanlı ve asenkron işlemleri destekler, bu da geliştiricilere PDF çıktısı — tarayıcı etkileşimi değil — hedeflendiğinde daha basit bir zihinsel model sunar.
Sonuç
Playwright, birincil iş yükü tarayıcı otomasyonu veya çapraz tarayıcı testi olduğunda güçlü bir uyum sunar, PDF çıktısı ise zaman zaman ortaya çıkan ikincil bir görevdir. IronPDF, PDF oluşturma birincil iş yükü olduğunda daha iyi bir uyum sağlar: ayrı bir tarayıcı-dosya yükleme adımı yoktur, yönetilmesi gereken bir tarayıcı/bağlam/sayfa yaşam döngüsü yoktur ve belge özellikleri PDF/A, dijital imzalar, güvenlik ve birleştirme kutudan çıktığında mevcuttur.
Başlamadan Önce
Ön Koş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ükleyebilme
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# Remove Playwright
dotnet remove package Microsoft.Playwright
# Remove the downloaded browser binaries
# Delete the .playwright folder in your project (and any cached binaries
# under your user profile, e.g. %USERPROFILE%\.cache\ms-playwright on Windows)
# Add IronPDF
dotnet add package IronPdf
# Remove Playwright
dotnet remove package Microsoft.Playwright
# Remove the downloaded browser binaries
# Delete the .playwright folder in your project (and any cached binaries
# under your user profile, e.g. %USERPROFILE%\.cache\ms-playwright on Windows)
# Add IronPDF
dotnet add package IronPdf
IronPDF ile playwright install gerekmez - işleme motoru otomatik olarak paketlenir.
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"
Tam API Referansı
Ad Alanı 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şlemeleri
| 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 |
RenderingOptions.TextHeader/TextFooter |
PagePdfOptions.HeaderTemplate |
RenderingOptions.HtmlHeader |
PagePdfOptions.FooterTemplate |
RenderingOptions.HtmlFooter |
<span class='pageNumber'> |
{page} |
Kod Göç Örnekleri
Örnek 1: HTML Metin Dizesi'ni PDF'e Dönüşüm
Önce (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
Sonrası (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 yapısal farkı gösterir.Playwrightbeş adet asenkron işlem gerektirir: Playwright.CreateAsync(), Chromium.LaunchAsync(), NewPageAsync(), SetContentAsync() ve PdfAsync(), ayrıca CloseAsync() ile açık tarayıcı temizliği.
IronPDF tüm bu karmaşıklıkları ortadan kaldırır: bir ChromePdfRenderer oluştur, RenderHtmlAsPdf() çağır ve SaveAs(). Hiçbir senkron-olmayan desen yok, tarayıcı yaşam döngüsü yok, temizleme kodu yok. IronPDF'nin yaklaşımı, güncel .NET uygulamaları ile daha temiz söz dizimi ve daha iyi entegrasyon sunar. Kapsamlı örnekler için HTML'den PDF'e dönüşüm belgelerine bakın.
Örnek 2: URL'den PDF'ye Dönüştürme
Önce (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
Sonrası (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() kullanır, ardından PdfAsync() gelir. IronPDF, tek bir arama ile gezinme ve PDF oluşturmayı ele alan bir RenderUrlAsPdf() yöntemi sağlar. Playwright'in Format'yi PagePdfOptions'de belirtmesini gerektirdiğini unutmayın,IronPDF ise kağıt boyutu yapılandırması için RenderingOptions.PaperSize kullanır. Daha fazla bilgiyi kılavuzlarımızda öğrenin.
Örnek 3: Kenar Boşluklarıyla Özel Sayfa Boyutu
Önce (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
Sonrası (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ı kenar boşluğu değerleri kullanırken ("1in", "0.5in"),IronPDF sayısal milimetre değerlerini kullanır. Dönüşüm şudur: 1 inç = 25,4mm, bu nedenle "1in", 25 olur ve "0.5in" yaklaşık 12 olur. Playwright'in Format = "Letter", IronPDF'in PaperSize = PdfPaperSize.Letter ile eşleşir.
Örnek 4: Başlıklar, Alt Bilgiler ve Özel Ayarlar
Önce (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
Sonrası (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/altbilgi yer tutucu sözdizimi farkını gösterir. Playwright, HTML sınıf tabanlı yer tutucular (<span class='pageNumber'></span>) kullanırken,IronPDF süslü parantez yer tutucular ({page}) kullanır. Playwright'in DisplayHeaderFooter = true başlıklar/altbilgileri etkinleştirmek için gerektirdiğini, oysa IronPDF başlık/altbilgi içeriğini ayarladığınızda bunları otomatik olarak etkinleştirdiğini unutmayın.
Kritik Taşıma Notları
Asenkronu Eşzamana Dönüştürme
Playwright tüm süreç boyunca senkron-olmayan/await gerektirir;IronPDF senkron 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
Kenar Boşluğu Birimi Dönüşümü
Playwright dize birimleri kullanır;IronPDF sayısal milimetreler kullanır:
| Playwright | IronPDF (mm) |
|---|---|
"1in" |
25 |
"0.5in" |
12 |
"1cm" |
10 |
Başlık/Altbilgi 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'e geçtikten sonra, Playwright'ın sağlayamayacağı yetenekler kazanacaksı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 Koruma
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 Uyumluğu
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b)
Geçiş Kontrol Listesi
Öncesi-Geçiş
- TümPlaywrightPDF oluşturma kodunu tanımlayın
- Marjin değerlerini belgeleyin (inç/cm'den milimetrelere dönüştürün)
- Dönüştürme için başlık/altbilgi yer tutucu sözdizimini not edin
- ironpdf.com adresinden IronPDF lisans anahtarını edinin
Paket Değişiklikleri
Microsoft.PlaywrightNuGet paketini kaldır.playwrightklasörünü sil (ve kullanıcı profiliniz altında önbelleğe alınmışPlaywrighttarayıcı ikili dosyalarını)IronPdfNuGet paketini yükleyin:dotnet add package IronPdf
Kod Değişiklikleri
- Ad alanı ithalatlarını güncelleyin
- Asenkron tarayıcı yaşam döngüsünü
ChromePdfRendererile değiştir page.SetContentAsync()+page.PdfAsync()'iRenderHtmlAsPdf()'e dönüştürpage.GotoAsync()+page.PdfAsync()'iRenderUrlAsPdf()'e dönüştür- Marjin dizelerini milimetre değerlerine dönüştürün
- Başlık/altbilgi yer tutucu sözdizimini dönüştürün
- Tüm tarayıcı/sayfa bertaraf kodunu kaldırın
- Uygulama başlangıcında lisans başlatma ekle
Geçiş Sonrası
- PDF çıktısının görsel karşılaştırması
- Sayfa numaraları ile başlık/altbilgi işlemesini doğrulayın
- Marjin ve sayfa boyutlandırma doğruluğunu test edin
- Gerektiğinde yeni yetenekler ekleyin (güvenlik, filigranlar, birleştirme)

