IRONSOFTWAREHOME
VIDEOLAR

Azure Blob Depolamada Saklanan Görselleri C#'da Nasıl Render Ederiz

Curtis Chau
Curtis Chau
Updated: 19 Temmuz 2026

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ı

AspektPuppeteerSharpIronPDF
Birincil AmaçTarayıcı otomasyonuPDF oluşturma
Chromium Bağımlılığı300MB'den fazla ayrı indirmeYerleşik optimize edilmiş motor
API KarmaşıklığıAsenkron tarayıcı/sayfa yaşam döngüsüEşzamanlı tek satırlık ifadeler
BaşlatmaBrowserFetcher.DownloadAsync() + LaunchAsyncnew ChromePdfRenderer()
Bellek YönetimiManuel tarayıcı geri dönüşümüOtomatik
Yük Altında BellekAğır iş yüklerinde büyüme rapor edildiSürekli çalışmalarda kararlı
PDF/A DesteğiMevcut değilDesteklenen
PDF/UA ErişilebilirliğiMevcut değilDesteklenen
PDF DüzenlemeMevcut değilBirleştir, böl, damgala, düzenle
Dijital İmzalarMevcut değilDesteklenen
İş Parçacığı GüvenliğiSınırlandırılmış (yukarı akış rehberi başına)Tam
LisanslamaMIT (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
IronPDFTamTamTamTam
PuppeteerSharpnetstandard2.0 aracılığıylaTamTamTam

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
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";

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;

Temel API Eşlemeleri

PuppeteerSharp APIIronPDF APINotlar
new BrowserFetcher().DownloadAsync()Gerekli değilTarayıcı indirme yok
Puppeteer.LaunchAsync(options)Gerekli değilTarayıcı yönetimi yok
browser.NewPageAsync()Gerekli değilSayfa 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ğilOtomatik temizleme
await browser.CloseAsync()Gerekli değilOtomatik temizleme
PdfOptions.FormatRenderingOptions.PaperSizeKağıt boyutu
PdfOptions.LandscapeRenderingOptions.PaperOrientationYönlendirme
PdfOptions.MarginOptionsRenderingOptions.MarginTop/Bottom/Left/RightBireysel boşluklar
PdfOptions.PrintBackgroundRenderingOptions.PrintHtmlBackgroundsArka plan yazdırma
PdfOptions.HeaderTemplateRenderingOptions.HtmlHeaderHTML başlıklar
PdfOptions.FooterTemplateRenderingOptions.HtmlFooterHTML 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");
    }
}

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");
    }
}

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");
    }
}

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");
    }
}

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"
            }
        });
    }
}

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");
    }
}

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
}
C#

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;
    }
}

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;
}

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;

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");

Filigranlar

var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);

Şifre Koruma

pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

Dijital İmzalar

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);

PDF/A Uyumluğu

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);

Performans Karşılaştırma Özeti

MetrikPuppeteerSharpIronPDFİyileştirme
İlk PDF (Soğuk Başlatma)45+ saniye20s%55+ daha hızlı
Sonraki PDF'lerDeğişkenTutarlıÖngörülebilir
Bellek Kullanımı500MB+ (büyür)~50MB (kararlı)%90 daha az bellek
Disk Alanı (Chromium)300MB'den fazla0İndirmeleri ortadan kaldır
Tarayıcı İndirmeGereklidirGerekli değilKurulum sıfır
İş Parçacığı GüvenliğiSınırlıTamGüvenilir eşzamanlılık
PDF Oluşturma Süresi45s20s%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ın: PuppeteerSharp, 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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez