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

PuppeteerSharp'tan IronPDF'e C# ile Nasıl Geçilir

PuppeteerSharp'tan IronPDF'ye geçiş, PDF oluşturma iş akışınızı300MB'den fazlaChromium bağımlılığı olan bir tarayıcı otomasyon aracından, otomatik bellek yönetimine sahip amaca yönelik bir PDF kütüphanesine taşır. Bu kılavuz, çalışma zamanında Chromium indirmesini ortadan kaldıran, yük altında rapor edilmiş bellek büyümesini adresleyen ve kapsamlı PDF manipülasyon yetenekleri ekleyen adım adım bir geçiş yolu sağlar.

Neden PuppeteerSharp'dan IronPDF'ye Geçilmeli

PuppeteerSharp'ı Anlamak

PuppeteerSharp, Google'ın Puppeteer'ının .NET portudur, C#'a tarayıcı otomasyonu yetenekleri getirir. Chrome'un yerleşik print-to-PDF işlevselliğini kullanarak PDF'ler oluşturur—tarayıcıda Ctrl+P tuşlarına basmakla aynıdır. Bu, kağıt için optimizasyonlu, ekranda gördüğünüzden farklı baskı hazır çıktılar üretir.

PuppeteerSharp, web testi ve veri kazıma için tasarlanmıştır, belge oluşturma için değil. Yetenekli olsa da, PuppeteerSharp'ın PDF üretimi için kullanılması ciddi üretim zorlukları yaratır.

Tarayıcı Otomasyonu Sorunu

PuppeteerSharp, belge üretimi değil tarayıcı otomasyonu için tasarlandı. Bu, PDF'ler için kullanıldığında temel sorunlar yaratır:

  1. 300MB'dan fazla Chromium indirmeleri ilk kullanımdan önce gereklidir. PuppeteerSharp'ın önemli bir dezavantajı, esas olarak Chromium ikilisini içerdiği için ağır dağıtım boyutudur. Bu önemli boyut, Docker görüntülerini şişirebilir ve sunucusuz ortamlarda soğuk başlama sorunlarına neden olabilir.

  2. Yük altında rapor edilen bellek büyümesi manuel tarayıcı geri dönüşümü gerektirir. Sürekli yük altında,PuppeteerSharpkullanıcıları, genellikle manuel işlem geri dönüşümü ile adreslenen tarayıcı örnekleri arasında bellek birikimi rapor ettmiştir.

  3. Tarayıcı yaşam döngüsü yönetimi ile karmaşık asenkron desenler

  4. Baskı-izleme çıktısı (Ctrl+P'ye eşdeğer, ekran görüntüsü değil). Düzenler yeniden akabilir, arka planlar varsayılan olarak devre dışı bırakılabilir ve çıktı yazdırma için sayfalara ayrılır, tarayıcı görünümüne uymak yerine.

  5. Uyumluluk gereksinimleri için PDF/A veya PDF/UA desteği yok PuppeteerSharp, PDF/A (arşiv) veya PDF/UA (erişilebilirlik) uyumlu belgeler üretemez.

  6. PDF manipulasyonu yok - sadece üretim, birleştirme/bölme/düzenleme yok.PuppeteerSharpPDF'leri üretmekte verimliyken, daha fazla manipulasyon yeteneklerine sahip değildir, örneğin birleştirme, bölme, güvenceye alma veya PDF'leri düzenleme.

PuppeteerSharpve IronPDF Karşılaştırması

Aspekt PuppeteerSharp IronPDF
Birincil Amaç Tarayıcı otomasyonu PDF oluşturma
Chromium Bağımlılığı 300MB'den fazla ayrı indirme Yerleşik optimize edilmiş motor
API Karmaşıklığı Asenkron tarayıcı/sayfa yaşam döngüsü Eşzamanlı tek satırlık ifadeler
Başlatma BrowserFetcher.DownloadAsync() + LaunchAsync new ChromePdfRenderer()
Bellek Yönetimi Manuel tarayıcı geri dönüşümü Otomatik
Yük Altında Bellek Ağır iş yüklerinde büyüme rapor edildi Sürekli çalışmalarda kararlı
PDF/A Desteği Mevcut değil Desteklenen
PDF/UA Erişilebilirliği Mevcut değil Desteklenen
PDF Düzenleme Mevcut değil Birleştir, böl, damgala, düzenle
Dijital İmzalar Mevcut değil Desteklenen
İş Parçacığı Güvenliği Sınırlandırılmış (yukarı akış rehberi başına) Tam
Lisanslama MIT (açık kaynak) Ticari lisans

Platform Desteği

Kütüphane .NET Framework 4.7.2 .NET Core 3.1 .NET 6-8 .NET 10
IronPDF Tam Tam Tam Tam
PuppeteerSharp netstandard2.0 aracılığıyla Tam Tam Tam

IronPDF'in modern .NET hedefleri arasında desteği, mevcut uygulamaların çoğuna uyumlu bir şekilde entegre olmasını sağlar.


Başlamadan Önce

Ön Koş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ükleyebilme
  3. IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin

NuGet Paket Değişiklikleri

# Remove PuppeteerSharp
dotnet remove package PuppeteerSharp

# Remove downloaded Chromium binaries (~300MB recovered)
# Delete the .local-chromium folder

# Add IronPDF
dotnet add package IronPdf
# Remove PuppeteerSharp
dotnet remove package PuppeteerSharp

# Remove downloaded Chromium binaries (~300MB recovered)
# Delete the .local-chromium folder

# Add IronPDF
dotnet add package IronPdf
SHELL

IronPDF ile BrowserFetcher.DownloadAsync() gerekmez - oluşturma motoru otomatik olarak paketlenmiş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

Tam API Referansı

Ad Alanı Değişiklikleri

// Before: PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: PuppeteerSharp
Imports PuppeteerSharp
Imports PuppeteerSharp.Media
Imports System.Threading.Tasks

' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Temel API Eşlemeleri

PuppeteerSharp API IronPDF API Notlar
new BrowserFetcher().DownloadAsync() Gerekli değil Tarayıcı indirme yok
Puppeteer.LaunchAsync(options) Gerekli değil Tarayıcı yönetimi yok
browser.NewPageAsync() Gerekli değil Sayfa bağlamı yok
page.GoToAsync(url) renderer.RenderUrlAsPdf(url) Doğrudan render
page.SetContentAsync(html) renderer.RenderHtmlAsPdf(html) Doğrudan render
page.PdfAsync(path) pdf.SaveAs(path) Render sonrasında
await page.CloseAsync() Gerekli değil Otomatik temizleme
await browser.CloseAsync() Gerekli değil Otomatik temizleme
PdfOptions.Format RenderingOptions.PaperSize Kağıt boyutu
PdfOptions.Landscape RenderingOptions.PaperOrientation Yönlendirme
PdfOptions.MarginOptions RenderingOptions.MarginTop/Bottom/Left/Right Bireysel boşluklar
PdfOptions.PrintBackground RenderingOptions.PrintHtmlBackgrounds Arka plan yazdırma
PdfOptions.HeaderTemplate RenderingOptions.HtmlHeader HTML başlıklar
PdfOptions.FooterTemplate RenderingOptions.HtmlFooter HTML alt bilgiler
page.WaitForSelectorAsync() RenderingOptions.WaitFor.HtmlElementId Öğeyi bekle

Kod Göç Örnekleri

Örnek 1: Temel HTML'den PDF'ye Dönüştürme

Önceki (PuppeteerSharp):

// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>");
        await page.PdfAsync("output.pdf");
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>");
        await page.PdfAsync("output.pdf");
    }
}
Imports PuppeteerSharp
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim browserFetcher = New BrowserFetcher()
        Await browserFetcher.DownloadAsync()

        Using browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {
            .Headless = True
        })

            Using page = Await browser.NewPageAsync()
                Await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>")
                Await page.PdfAsync("output.pdf")
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main(args As String())
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Bu örnek, temel yapısal farkı gösterir.PuppeteerSharpaltı asenkron işlemi gerektirir: BrowserFetcher.DownloadAsync() (300MB'den fazla Chromium indirme), Puppeteer.LaunchAsync(), browser.NewPageAsync(), page.SetContentAsync() ve page.PdfAsync(), ayrıca await using ile uygun imha.

IronPDF bu karmaşıklığı 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, Chromium indirmeleri 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

Önceki (PuppeteerSharp):

// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.example.com");
        await page.PdfAsync("webpage.pdf");
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.example.com");
        await page.PdfAsync("webpage.pdf");
    }
}
Imports PuppeteerSharp
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim browserFetcher = New BrowserFetcher()
        Await browserFetcher.DownloadAsync()

        Using browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {
            .Headless = True
        })

            Using page = Await browser.NewPageAsync()
                Await page.GoToAsync("https://www.example.com")
                Await page.PdfAsync("webpage.pdf")
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

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

PuppeteerSharp bir URL'ye gitmek için GoToAsync() kullanır, ardından PdfAsync() gelir. IronPDF, tek bir çağrıda gezinme ve PDF oluşturma işlemlerini ele alan bir RenderUrlAsPdf() yöntemi sağlar. Daha fazla bilgiyi kılavuzlarımızda öğrenin.

Örnek 3: Kenarlıklı Özel Sayfa Ayarları

Önceki (PuppeteerSharp):

// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");

        await page.PdfAsync("custom.pdf", new PdfOptions
        {
            Format = PaperFormat.A4,
            Landscape = true,
            MarginOptions = new MarginOptions
            {
                Top = "20mm",
                Bottom = "20mm",
                Left = "20mm",
                Right = "20mm"
            }
        });
    }
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var browserFetcher = new BrowserFetcher();
        await browserFetcher.DownloadAsync();

        await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });

        await using var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");

        await page.PdfAsync("custom.pdf", new PdfOptions
        {
            Format = PaperFormat.A4,
            Landscape = true,
            MarginOptions = new MarginOptions
            {
                Top = "20mm",
                Bottom = "20mm",
                Left = "20mm",
                Right = "20mm"
            }
        });
    }
}
Imports PuppeteerSharp
Imports PuppeteerSharp.Media
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim browserFetcher = New BrowserFetcher()
        Await browserFetcher.DownloadAsync()

        Await Using browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {
            .Headless = True
        })

            Await Using page = Await browser.NewPageAsync()
                Await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>")

                Await page.PdfAsync("custom.pdf", New PdfOptions With {
                    .Format = PaperFormat.A4,
                    .Landscape = True,
                    .MarginOptions = New MarginOptions With {
                        .Top = "20mm",
                        .Bottom = "20mm",
                        .Left = "20mm",
                        .Right = "20mm"
                    }
                })
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
        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.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
        pdf.SaveAs("custom.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Class Program
    Shared Sub Main(args As String())
        Dim renderer = New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
        renderer.RenderingOptions.MarginTop = 20
        renderer.RenderingOptions.MarginBottom = 20
        renderer.RenderingOptions.MarginLeft = 20
        renderer.RenderingOptions.MarginRight = 20

        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>")
        pdf.SaveAs("custom.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Bu örnek, iki kütüphane arasındaki PDF seçeneklerinin eşleşmesini gösterir. PuppeteerSharp, içerisinde Format, Landscape ve MarginOptions bulunan string değerler ("20mm") ile PdfOptions kullanır. IronPDF, doğrudan kağıt boyutu ile yönelim sabitleri ve milimetre cinsinden sayısal kenar boşlukları ile RenderingOptions özelliklerini kullanır.

Anahtar eşlemeleri:

  • Format = PaperFormat.A4PaperSize = PdfPaperSize.A4
  • Landscape = truePaperOrientation = PdfPaperOrientation.Landscape
  • MarginOptions.Top = "20mm"MarginTop = 20 (sayısal milimetre)

Sürekli Yük Altında Bellek Büyümesi

Kullanıcılar, sürekli yük altındaPuppeteerSharpile bellek birikimini, genellikle manuel tarayıcı geri dönüşümü ile giderildiğini rapor etmiştir:

//PuppeteerSharp- memory growth typically requires periodic recycling
for (int i = 0; i < 1000; i++)
{
    var page = await browser.NewPageAsync();
    await page.SetContentAsync($"<h1>Document {i}</h1>");
    await page.PdfAsync($"doc_{i}.pdf");
    await page.CloseAsync();
}
// Recommended: await browser.CloseAsync(); and re-launch every N operations

//IronPDF- reuse a single renderer across operations
var renderer = new ChromePdfRenderer();
for (int i = 0; i < 1000; i++)
{
    var pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>");
    pdf.SaveAs($"doc_{i}.pdf");
    // Memory managed automatically
}
//PuppeteerSharp- memory growth typically requires periodic recycling
for (int i = 0; i < 1000; i++)
{
    var page = await browser.NewPageAsync();
    await page.SetContentAsync($"<h1>Document {i}</h1>");
    await page.PdfAsync($"doc_{i}.pdf");
    await page.CloseAsync();
}
// Recommended: await browser.CloseAsync(); and re-launch every N operations

//IronPDF- reuse a single renderer across operations
var renderer = new ChromePdfRenderer();
for (int i = 0; i < 1000; i++)
{
    var pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>");
    pdf.SaveAs($"doc_{i}.pdf");
    // Memory managed automatically
}
Imports PuppeteerSharp
Imports IronPdf

' PuppeteerSharp- memory growth typically requires periodic recycling
For i As Integer = 0 To 999
    Dim page = Await browser.NewPageAsync()
    Await page.SetContentAsync($"<h1>Document {i}</h1>")
    Await page.PdfAsync($"doc_{i}.pdf")
    Await page.CloseAsync()
Next
' Recommended: Await browser.CloseAsync() and re-launch every N operations

' IronPDF- reuse a single renderer across operations
Dim renderer As New ChromePdfRenderer()
For i As Integer = 0 To 999
    Dim pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>")
    pdf.SaveAs($"doc_{i}.pdf")
    ' Memory managed automatically
Next
$vbLabelText   $csharpLabel

IronPDF, PuppeteerSharp'ın gerektirdiği tarayıcı havuzu altyapısını ortadan kaldırır:

// Before (PuppeteerSharp - delete entire class)
public class PuppeteerBrowserPool
{
    private readonly ConcurrentBag<IBrowser> _browsers;
    private readonly SemaphoreSlim _semaphore;
    private int _operationCount;
    // ... recycling logic ...
}

// After (IronPDF - simple reuse)
public class PdfService
{
    private readonly ChromePdfRenderer _renderer = new();

    public byte[] Generate(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }
}
// Before (PuppeteerSharp - delete entire class)
public class PuppeteerBrowserPool
{
    private readonly ConcurrentBag<IBrowser> _browsers;
    private readonly SemaphoreSlim _semaphore;
    private int _operationCount;
    // ... recycling logic ...
}

// After (IronPDF - simple reuse)
public class PdfService
{
    private readonly ChromePdfRenderer _renderer = new();

    public byte[] Generate(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }
}
' Before (PuppeteerSharp - delete entire class)
Public Class PuppeteerBrowserPool
    Private ReadOnly _browsers As ConcurrentBag(Of IBrowser)
    Private ReadOnly _semaphore As SemaphoreSlim
    Private _operationCount As Integer
    ' ... recycling logic ...
End Class

' After (IronPDF - simple reuse)
Public Class PdfService
    Private ReadOnly _renderer As New ChromePdfRenderer()

    Public Function Generate(html As String) As Byte()
        Return _renderer.RenderHtmlAsPdf(html).BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

Kritik Taşıma Notları

Asenkronu Eşzamana Dönüştürme

PuppeteerSharp, async/await gerektirir;IronPDF senkron işlemleri destekler:

// PuppeteerSharp: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    await new BrowserFetcher().DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(...);
    await using var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfDataAsync();
}

// IronPDF: Sync default
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

// Or async when needed
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
// PuppeteerSharp: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    await new BrowserFetcher().DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(...);
    await using var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfDataAsync();
}

// IronPDF: Sync default
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

// Or async when needed
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
Imports System.Threading.Tasks
Imports PuppeteerSharp

' PuppeteerSharp: Async required
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
    Await (New BrowserFetcher()).DownloadAsync()
    Await Using browser = Await Puppeteer.LaunchAsync(...)
        Await Using page = Await browser.NewPageAsync()
            Await page.SetContentAsync(html)
            Return Await page.PdfDataAsync()
        End Using
    End Using
End Function

' IronPDF: Sync default
Public Function GeneratePdf(html As String) As Byte()
    Dim renderer = New ChromePdfRenderer()
    Return renderer.RenderHtmlAsPdf(html).BinaryData
End Function

' Or async when needed
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
    Dim renderer = New ChromePdfRenderer()
    Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
    Return pdf.BinaryData
End Function
$vbLabelText   $csharpLabel

Kenar Boşluğu Birimi Dönüşümü

PuppeteerSharp, dize birimleri kullanır;IronPDF sayısal milimetreler kullanır:

//PuppeteerSharp- string units
MarginOptions = new MarginOptions
{
    Top = "1in",      // 25.4mm
    Bottom = "0.75in", // 19mm
    Left = "1cm",     // 10mm
    Right = "20px"    // ~7.5mm at 96dpi
}

//IronPDF- numeric millimeters
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 19;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 8;
//PuppeteerSharp- string units
MarginOptions = new MarginOptions
{
    Top = "1in",      // 25.4mm
    Bottom = "0.75in", // 19mm
    Left = "1cm",     // 10mm
    Right = "20px"    // ~7.5mm at 96dpi
}

//IronPDF- numeric millimeters
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 19;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 8;
MarginOptions = New MarginOptions With {
    .Top = "1in",      ' 25.4mm
    .Bottom = "0.75in", ' 19mm
    .Left = "1cm",     ' 10mm
    .Right = "20px"    ' ~7.5mm at 96dpi
}

renderer.RenderingOptions.MarginTop = 25    ' mm
renderer.RenderingOptions.MarginBottom = 19
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 8
$vbLabelText   $csharpLabel

Başlık/Altbilgi Yer Tutucu Dönüşümü

PuppeteerSharp Sınıfı IronPDF Yer Tutucu
<span class='pageNumber'> {page}
<span class='totalPages'> {total-pages}
<span class='date'> {date}
<span class='title'> {html-title}

Geçiş Sonrası Yeni Özellikler

IronPDF'ye geçiş yaptıktan sonra PuppeteerSharp'ın sağlayamadığı 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

var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);
var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);
Dim watermark As New TextStamper With {
    .Text = "CONFIDENTIAL",
    .FontSize = 48,
    .Opacity = 30,
    .Rotation = -45
}
pdf.ApplyStamp(watermark)
$vbLabelText   $csharpLabel

Ş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
$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 Uyumluğu

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

Performans Karşılaştırma Özeti

Metrik PuppeteerSharp IronPDF İyileştirme
İlk PDF (Soğuk Başlatma) 45+ saniye 20s %55+ daha hızlı
Sonraki PDF'ler Değişken Tutarlı Öngörülebilir
Bellek Kullanımı 500MB+ (büyür) ~50MB (kararlı) %90 daha az bellek
Disk Alanı (Chromium) 300MB'den fazla 0 İndirmeleri ortadan kaldır
Tarayıcı İndirme Gereklidir Gerekli değil Kurulum sıfır
İş Parçacığı Güvenliği Sınırlı Tam Güvenilir eşzamanlılık
PDF Oluşturma Süresi 45s 20s %55 daha hızlı

Geçiş Kontrol Listesi

Öncesi-Geçiş

  • Kod tabanında tümPuppeteerSharpkullanımlarını tespit edin
  • Kenar boşluk değerlerini belgeleyin (dize değerlerini milimetreye dönüştürün)
  • Dönüştürme için başlık/altbilgi yer tutucu sözdizimini not edin
  • Tarayıcı havuzlama/yenileme altyapısını silin
  • ironpdf.com adresinden IronPDF lisans anahtarını edinin

Paket Değişiklikleri

  • PuppeteerSharp NuGet paketini kaldır
  • Yaklaşık 300MB disk alanını geri kazanmak için .local-chromium klasörünü sil
  • IronPdf NuGet paketini yükleyin: dotnet add package IronPdf

Kod Değişiklikleri

  • Ad alanı ithalatlarını güncelleyin
  • BrowserFetcher.DownloadAsync() çağrılarını kaldırın
  • Puppeteer.LaunchAsync() ve tarayıcı yönetimini kaldırın
  • page.SetContentAsync() + page.PdfAsync() ile RenderHtmlAsPdf() değiştirin
  • page.GoToAsync() + page.PdfAsync() ile RenderUrlAsPdf() değiştirin
  • 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
  • Tarayıcı havuzlama altyapısını silin
  • Uygulama başlangıcında lisans başlatma ekle

Geçiş Sonrası

  • PDF çıktısının görsel karşılaştırması
  • Bellek kararlılığı için yük testi yapın (yenileme olmadan kararlı kalmalı)
  • Sayfa numaraları ile başlık/altbilgi işlemesini doğrulayın
  • Gerektiğinde yeni yetenekler ekleyin (güvenlik, filigranlar, birleştirme)

Lütfen dikkate alınPuppeteerSharp, sahiplerinin kayıtlı ticari markasıdır. Bu site,PuppeteerSharpile ilişkili değil, onaylanmamış veya sponsor olunmamıştır. Tüm ürün adları, logolar ve markalar ilgili sahiplerinin mülküdür. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

Curtis Chau
Teknik Yazar

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

Daha Fazla Oku

Iron Destek Ekibi

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