PuppeteerSharp'tan IronPDF'e C# ile Nasıl Geçilir
PuppeteerSharp'ten IronPDF'e geçiş yapmak, PDF oluşturma iş akışınızı300MB+bağımlılığı olan bir tarayıcı otomasyon aracından otomatik bellek yönetimi sağlayan amacına uygun bir PDF kütüphanesine dönüştürür. Bu kılavuz, Chromium indirmelerini ortadan kaldıran, bellek sızıntısı sorunlarını çözen ve kapsamlı PDF manipülasyon yetenekleri sağlayan eksiksiz, adım adım bir geçiş yolu sunar.
Neden PuppeteerSharp'tan IronPDF'e Geçilmeli
PuppeteerSharp'ı Anlamak
PuppeteerSharp, C#'a tarayıcı otomasyon yetenekleri getiren, Google'un Puppeteer'ının bir .NET portudur. Bu, PDF'leri Chrome'un yerleşik PDF'e yazdır işlevini kullanarak üretir - bir tarayıcıda Ctrl+P tuşuna basmakla aynı şey. Bu, ekrandan gördüğünüzden farklı olarak, kağıt için optimize edilmiş baskı hazır çıktılar üretir.
PuppeteerSharp, web testi ve kazıma için tasarlanmıştır, belge oluşturma için değil. Yetkin olmasına rağmen, PDF üretimi içinPuppeteerSharpkullanılması önemli üretim zorlukları oluşturur.
Tarayıcı Otomasyonu Problemi
PuppeteerSharp, doküman üretimi için değil, tarayıcı otomasyonu için tasarlanmıştır. Bu, PDF'ler için kullanıldığında temel sorunlar yaratır:
-
İlk kullanım öncesi 300MB+ Chromium indirmeleri gereklidir. PuppeteerSharp'ın en önemli dezavantajı, Chromium ikili dosyasını bünyesinde bulundurması nedeniyle devasa dağıtım boyutudur. Bu önemli büyüklük, Docker görüntülerini şişirebilir ve sunucusuz ortamlarda soğuk başlatma sorunlarına neden olabilir.
-
Yük altında bellek sızıntıları manuel tarayıcı geri dönüşümü gerektirir. Ağır yük altında, PuppeteerSharp'un bellek sızıntıları yaşadığı bilinmektedir. Tarayıcı örneklerinin bellek birikimi, süreç yönetimi ve geri dönüşüm için manuel müdahale gerektirir.
-
Tarayıcı yaşam döngüsü yönetimi ile karmaşık asenkron desenler.
-
PDF'e yazdırma çıktısı (Ctrl+P'ye eşdeğer, ekran yakalama değil). Düzenler yeniden akışa geçebilir, arka planlar varsayılan olarak atlanabilir ve çıktı, tarayıcı görüntüleme portuna uymak yerine yazdırmak için sayfalandırılır.
-
Uyumluluk gereksinimleri için PDF/A veya PDF/UA desteği yok. PuppeteerSharp, PDF/A (arşivleme) veya PDF/UA (erişilebilirlik) uyumlu belgeler üretemez.
- PDF üzerinde manipülasyon yok - sadece üretim, birleştirme/bölme/düzenleme yok. PuppeteerSharp, PDF'leri üretmede etkili olsa da, PDF'leri birleştirme, bölme, güvenli hale getirme veya düzenleme gibi daha fazla manipülasyon için yeteneklerden yoksundur.
PuppeteerSharp ileIronPDFKarşılaştırması
| Bağlam | PuppeteerSharp | IronPDF |
|---|---|---|
| Birincil Amaç | Tarayıcı otomasyonu | PDF oluşturma |
| Chromium Bağımlılığı | 300MB+ayrı indirme | Dahili optimize edilmiş motor |
| API Karmaşıklığı | Asenkron tarayıcı/sayfa yaşam döngüsü | Eşzamansız tek satırlıklar |
| Başlatma | BrowserFetcher.DownloadAsync() + LaunchAsync |
new ChromePdfRenderer() |
| Bellek Yönetimi | Manuel tarayıcı yenilemesi gereklidir | Otomatik |
| Yük Altında Bellek | 500MB+ sızıntılarla | ~50MB kararlı |
| Soğuk Başlatma | 45+ saniye | ~20 saniye |
| PDF/A Desteği | Mevcut değil | Desteklenir |
| PDF/UA Erişilebilirlik | Mevcut değil | Desteklenir |
| PDF Düzenleme | Mevcut değil | Birleştir, ayır, damga ekle, düzenle |
| Dijital İmzalar | Mevcut değil | Desteklenir |
| İplik Güvenliği | Sınırlı | Tam |
| Profesyonel Destek | Topluluk | SLA ile ticari |
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| Sınırlı | Tam | Tam | Beklemede | IronPDF'nin .NET platformları genelindeki geniş desteği, geliştiricilere çeşitli ortamlarda kullanılabilmesini sağlar, uyumluluk sorunlarıyla karşılaşmadan modern .NET uygulamaları için 2025 ve 2026 yıllarına kadar esnek bir seçim sunar.
Başlamadan Önce
Önkoşullar
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleme yeteneği
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# Remove 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
IronPDF ile BrowserFetcher.DownloadAsync() gerekmez - oluşturma motoru otomatik olarak bir araya getirilir.
Lisans Yapılandırması
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
API Referansının Tamamı
Namespace Değişiklikleri
// Before: 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
Temel API Eşleştirmeleri
| PuppeteerSharp API | IronPDF API | Notlar |
|---|---|---|
new BrowserFetcher().DownloadAsync() |
Gerekli değil | Tarayıcı indirmesi 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 işleme |
page.SetContentAsync(html) |
renderer.RenderHtmlAsPdf(html) |
Doğrudan işleme |
page.PdfAsync(path) |
pdf.SaveAs(path) |
İşlemeden sonra |
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 kenar boşlukları |
PdfOptions.PrintBackground |
RenderingOptions.PrintHtmlBackgrounds |
Arka plan baskısı |
PdfOptions.HeaderTemplate |
RenderingOptions.HtmlHeader |
HTML üstbilgileri |
PdfOptions.FooterTemplate |
RenderingOptions.HtmlFooter |
HTML altbilgileri |
page.WaitForSelectorAsync() |
RenderingOptions.WaitFor.HtmlElementId |
Element bekleyişi |
Kod Geçiş Örnekleri
Örnek 1: Temel HTML'den PDF'e Dönüşüm
Önce (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
Sonra (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
Bu örnek temel mimari farkı göstermektedir.PuppeteerSharpaltı asenkron işlem gerektirir: BrowserFetcher.DownloadAsync() (300MB+ Chromium indir), Puppeteer.LaunchAsync(), browser.NewPageAsync(), page.SetContentAsync(), ve page.PdfAsync(), artı doğru bir şekilde yok etme ile await using.
IronPDF bu tüm 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'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
Önce (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
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
PuppeteerSharp, bir URL'ye gitmek için GoToAsync() kullanır, ardından PdfAsync(). IronPDF, gezinme ve PDF oluşturma işlemlerini tek bir çağrıda ele alan bir tek RenderUrlAsPdf() metodu sağlar. Detayli bilgi icin eğitimlerimize bakin.
Örnek 3: Kenar Boşlukları ile Özel Sayfa Ayarları
Önce (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
Sonra (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
Bu örnek, iki kütüphane arasındaki PDF seçeneklerinin nasıl eşlendiğini gösterir. PuppeteerSharp, PdfOptions ile birlikte Format, Landscape, ve MarginOptions string değerler içeren "20mm" kullanır. IronPDF, doğrudan kağıt boyutu enumları, yönlendirme enumları ve milimetre cinsinden sayısal boşluk değerlerine sahip RenderingOptions özelliklerini kullanır.
Anahtar eşlemeler:
Format = PaperFormat.A4→PaperSize = PdfPaperSize.A4Landscape = true→PaperOrientation = PdfPaperOrientation.LandscapeMarginOptions.Top = "20mm"→MarginTop = 20(sayısal milimetre)
Bellek Sızıntısı Problemi
PuppeteerSharp, sürekli yük altında bellek birikimiyle ünlüdür:
// ❌PuppeteerSharp- Memory grows with each operation
// Requires explicit browser recycling every N operations
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(); // Memory still accumulates!
}
// Must periodically: await browser.CloseAsync(); and re-launch
// ✅IronPDF- Stable memory, reuse renderer
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 grows with each operation
// Requires explicit browser recycling every N operations
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(); // Memory still accumulates!
}
// Must periodically: await browser.CloseAsync(); and re-launch
// ✅IronPDF- Stable memory, reuse renderer
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 grows with each operation
' Requires explicit browser recycling every N operations
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() ' Memory still accumulates!
Next
' Must periodically: Await browser.CloseAsync() and re-launch
' ✅IronPDF- Stable memory, reuse renderer
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
IronPDF, PuppeteerSharp'ın gerektirdiği tarayıcı havuzu altyapısına olan ihtiyaçı 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
Kritik Geçiş Notları
Asenkron'dan Senkron'a Dönüşüm
PuppeteerSharp, ortamda asenkron/await gerektirir;IronPDFsenkron 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
Kenarlik Birimi Dönüşümü
PuppeteerSharp, dize birimleri kullanır;IronPDFsayısal milimetre 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
Başlık/Alt Bilgi Yer Tutucu Dönüşümü
| PuppeteerSharpSı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çtikten sonra, PuppeteerSharp'un sağlayamayacağı yetenekleri kazanırsınız:
PDF Birleştirme
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = renderer.RenderHtmlAsPdf(html1)
Dim pdf2 = renderer.RenderHtmlAsPdf(html2)
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Filigranlar
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)
Şifre Koruması
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "readonly"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
Dijital İmzalar
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim signature = New PdfSignature("certificate.pfx", "password")
pdf.Sign(signature)
PDF/A Uyumu
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b)
Performans Karşılaştırma Özeti
| Metrik | PuppeteerSharp | IronPDF | Gelişme |
|---|---|---|---|
| İlk PDF (Soğuk Başlatma) | 45s+ | ~20s | %55'ten fazla hızlı |
| Sonraki PDF'ler | Değişken | Tutarlı | Öngörülebilir |
| Bellek Kullanımı | 500MB+ (büyür) | ~50MB (sabit) | %90 daha az hafıza |
| Disk Alanı (Chromium) | 300MB+ | 0 | İndirmeleri ortadan kaldırın |
| Tarayıcı İndirmesi | Gerekli | Gerekli değil | Sıfır kurulum |
| İş 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ı |
Goc Kontrol Listesi
Geçiş Öncesi
- Kod tabanındaki tümPuppeteerSharpkullanımlarını kimliklendirin
- Belge kenar boşluğu değerlerini belgelerken (dizeleri milimetreye çevirin)
- Dönüşüm için başlık/alt bilgi yer tutucu sözdizimini not alın
- Tarayıcı havuzu/geri dönüşüm altyapısını silin
- ironpdf.com adresindenIronPDFlisans anahtarını alın
Paket Değişiklikleri
PuppeteerSharpNuGet paketini kaldır- Yaklaşık 300MB disk alanını geri kazanmak için
.local-chromiumklasörünü sil IronPdfNuGet paketini yükle:dotnet add package IronPdf
Kod Değişiklikleri
- Ad alanı eklerini güncelleyin
BrowserFetcher.DownloadAsync()çağrılarını kaldırPuppeteer.LaunchAsync()ve tarayıcı yönetimini kaldırpage.SetContentAsync()+page.PdfAsync()ileRenderHtmlAsPdf()değiştirpage.GoToAsync()+page.PdfAsync()ileRenderUrlAsPdf()değiştir- 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
- Tarayıcı havuzu altyapısını silin
- Uygulama başlatıldığında lisans başlatma ekleyin
Geçişten Sonra
- PDF çıktısının görsel karşılaştırması
- Bellek istikrarı için yük testi yapın (geri dönüşüm olmadan sabit kalmalı)
- Sayfa numaraları ile başlık/alt bilgi render'ını doğrulayın
- Gerektiği gibi yeni yetenekler (güvenlik, filigranlar, birleştirme) ekleyin

