Altbilgi içeriğine atla
GEçIş KıLAVUZLARı

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:

  1. 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.

  2. 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.

  3. Test öncelikli mimari belge üretimi için optimize edilmemiştir.

  4. 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.

  5. 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.

  6. 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
SHELL

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
$vbLabelText   $csharpLabel

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önetimi
  • TracesDir: 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
$vbLabelText   $csharpLabel

Ç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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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

  1. .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Erişimi: NuGet paketlerini yükleme yeteneği
  3. 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
SHELL

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Ş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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

PDF/A Uyumu

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

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.Playwright NuGet paketini kaldırın
  • Yaklaşık 400MB disk alanını geri kazanmak için .playwright klasörünü silin
  • IronPdf NuGet 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ü ChromePdfRenderer ile değiştirin
  • page.SetContentAsync() + page.PdfAsync() öğelerini RenderHtmlAsPdf()'ye dönüştürün
  • page.GotoAsync() + page.PdfAsync() öğelerini RenderUrlAsPdf()'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

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara