Altbilgi içeriğine atla
ÜRüN KARşıLAşTıRMALARı

IronPDF ve EvoPdf: 2025'te Hangi .NET PDF Kütüphanesi Daha İyi Değer Sağlıyor?

Modern .NET uygulamaları geliştirirken PDF işlevselliği gerektiren, doğru kütüphaneyi seçmek, geliştirme hızınızı, uygulama performansınızı ve uzun vadeli bakım maliyetlerinizi önemli ölçüde etkileyebilir. IronPDF ve EvoPdf, .NET ekosisteminde PDF oluşturma ve düzenleme için iki farklı yaklaşımı temsil eder, her biri farklı geliştirme senaryolarına hitap eden benzersiz güçlü yönlere sahiptir.

Bu kapsamlı karşılaştırma, her iki kütüphaneyi de işleme doğruluğu, API tasarımı, performans ölçümleri, platform uyumluluğu ve toplam sahip olma maliyeti gibi kritik boyutlar üzerinden inceler. İster yüksek hacimli bir belge işleme sistemi kurun, ister uyumluluk için dijital imzalar uygulayın ya da sadece HTML raporlarını PDF'ye dönüştürün, bu farkları anlamak, teknik gereksinimleriniz ve bütçe kısıtlamalarınızla uyumlu bir karar vermenize yardımcı olacaktır.

IronPDF ve EvoPdf'ı Bir Bakışta Nasıl Karşılaştırabilirsiniz?

Detaylı karşılaştırmalara dalmadan önce, bu kütüphanelerin .NET geliştiricileri için önemli kategorilerde nasıl bir araya geldiğine dair kapsamlı bir genel bakış:

Ürün Karşılaştırma Genel Bakışı
.NET PDF Oluşturma için IronPDF ve EvoPdf Karşılaştırması
Kategori Özellik/Aspect IronPDF EvoPdf Ana Avantaj
Çekirdek Mimari Tasarım Felsefesi Basitlik-öncelikli, sezgisel API'ler Özellik açısından zengin, geleneksel PDF yaklaşımı IronPDF: Daha hızlı geliştirme
API Karmaşıklığı RenderHtmlAsPdf() gibi basit yöntemler Daha fazla yapılandırma gerektiren çoklu sınıf yaklaşımı IronPDF: %60 daha az kod
Öğrenme Eğrisi 1-2 gün tipik 3-5 gün tipik IronPDF: Daha hızlı benimseme
Platform Desteği Çapraz Platform Yerel destek, ekstra yapılandırma yok Platforma özgü kurulum gerektirir IronPDF: Daha basit dağıtım
.NET Sürümleri .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ .NET 8, 7, 6, 5, Standard 2.0+, Framework 4.0+ Her ikisi de: Modern çerçeve desteği
İşletim Sistemleri Windows, Linux, macOS, Docker native Windows, Linux, macOS, Azure IronPDF: Docker için optimize edilmiş
HTML'den PDF'ye Render Motoru Tam Chrome V8 motoru Özel HTML işleme motoru IronPDF: %98+ tarayıcı sadakati
CSS3/HTML5 Desteği Tam destek İyi destek (%90 kapsam) IronPDF: Modern web standartları
JavaScript Çalıştırma Bekleme ile tam JavaScript desteği İyi JavaScript desteği IronPDF: Dinamik içerik hazır
İşleme Hızı 1,2-1,8s tipik (karmaşık sayfalar) 0,8-1,2s tipik EvoPdf: Basit HTML için daha hızlı
Security & Encryption Şifreleme Seviyeleri AES-256, özelleştirilmiş işlemler AES-256 standardı Her ikisi de: Endüstri standardı
İzin Seçenekleri 15'ten fazla ayrıntılı izin 8 standart izin IronPDF: Daha ince kontrol
Dijital İmzalar Entegre, görsel imzalar Temel imza desteği IronPDF: Daha basit imzalama
İçerik Manipülasyonu Karartma Yöntemi Gerçek içerik kaldırma, tek satırlık API Yerleşik redaksiyon yok IronPDF: Uyumluluk hazır
Filigran ekleme HTML/CSS tabanlı, tam stilizasyon Şablon tabanlı filigranlar IronPDF: Zengin filigranlar
Damgalama Birleşik damgalama sınıfları Filigran özelliği ile aynı IronPDF: Adanmış araçlar
Dosya Dönüştürme DOCX'ten PDF'ye Yerleşik DocxToPdfRenderer Evo Word'dan PDF'ye ($450)+ gereklidir IronPDF: Ekstra maliyet yok
Geliştirici Deneyimi Kod Örnekleri 100+ çalışmaya hazır örnekler 50+ örnek IronPDF: Kapsamlı kaynaklar
Belgelendirme Eğitimler, nasıl yapılır kılavuzları, videolar, API referansı API belgeleri ve örnekler IronPDF: Çoklu öğrenme yolları
Hata Mesajları Açıklayıcı, uygulanabilir Standart hata raporlaması IronPDF: Daha iyi hata ayıklama
Performans Olcumleri Büyük Belge İşleme 1000 sayfa/dakika filigranlama 700 sayfa/dk filigranlama IronPDF: %30 daha hızlı
Eşzamanlılık Desteği Yerel async/await optimize edilmiş Çoklu iş parçacığı desteği IronPDF: Daha iyi ölçeklenebilirlik
Licensing & Pricing Giriş Seviyesi Lite: $799 (1 dev, 1 project) Dağıtım: 450$ (1 sunucu, 1 uygulama) EvoPdf: Düşük başlangıç maliyeti
Ekip Lisansı Plus: 1.499$ (3 geliştirici, 3 proje) Şirket: $1,200 (sınırsız geliştirici) EvoPdf: Büyük ekipler için daha iyi
Yeniden Dağıtım +1.999$ telif ücretsiz Şirket Lisansına Dahil EvoPdf: Yerleşik yeniden dağıtım
Suite Seçeneği Iron Suite: $1,498 (9 products) EVO PDF Toolkit: 1.400$ IronPDF: Daha fazla ürün dahil
Destek Destek Dahil Evet, 24/5 mühendislik desteği Evet, ilk yıl standart destek IronPDF: Doğrudan mühendislik erişimi
En İyisi İçin Kullanım Durumları Modern web uygulamaları, karmaşık PDF'ler, uyumluluk Basit HTML'den PDF'ye, temel dönüşümler Bağlam bağımlı
Not. EvoPdf büyük ekipler için rekabetçi fiyatlar sunar ancak redaksiyon gibi bazı gelişmiş özelliklerden yoksundur. IronPDF, yerleşik belge dönüştürme desteği ile daha kapsamlı işlevsellik sunar.

IronPDF ve EvoPdf: Temel Güçler ve Felsefenin Anlaşılması

IronPDF'yi .NET PDF Kütüphane Piyasasında Öne Çıkaran Nedir?

IronPDF, geliştirici verimliliği odaklı tasarlanmış kapsamlı bir PDF çözümünü temsil eder. Basitlik üstüne kurulu ancak güçten ödün vermeyen IronPDF, .NET geliştiricilerinin tanıdık web geliştirme modellerini aynalayan sezgisel API'ler kullanarak PDF belgeleri yaratmasına, düzenlemesine ve manipüle etmesine olanak tanır. Kütüphanenin öne çıkan özelliği, en son web standartlarını içeren CSS3, JavaScript çerçeveleri ve web fontlarını desteklerken piksel mükemmelliğinde HTML'den PDF'ye dönüşümü sağlayan Chrome tabanlı işleme motorudur.

Kütüphane, yüksek kaliteli belge işleme, karmaşık PDF manipülasyonu ve kurumsal seviyede güvenlik özellikleri gerektiren senaryolarda başarılıdır. Geniş özellik seti, sadece temel PDF oluşturmayı değil, dijital imzalar, form doldurma, IronOCR ile OCR entegrasyonu ve sorunsuz belge formatı dönüştürmeleri gibi gelişmiş yetenekleri de içerir. IronPDF'nin çapraz platform uyumluluğu, basit framework desteğinin ötesine geçer, Windows, Linux, macOS, Docker konteynerleri ve Azure ve AWS gibi bulut platformlarında yerel performans sunar.

EvoPdf, PDF Oluşturmayı Farklı Şekilde Nasıl Yaklaşıyor?

EvoPdf, geleneksel bir PDF manipülasyonu yaklaşımı benimser, öncelikle özelleştirme ve kontrol üzerinde durarak HTML'den PDF'ye dönüşüme odaklanır. Kütüphane geliştiricilere dönüştürme süreci üzerinde ince ayar yapma, işleme parametrelerini, sayfa düzenlerini ve dönüştürme ayarlarını ince ayar yapma imkanı sağlayan detay kontrol sunar. EvoPdf'nin mimarisi, standart web'den PDF'ye dönüştürme senaryoları için güvenilir ve tutarlı sonuçlar sağlamaya yöneliktir.

EvoPdf'nin özellikle parladığı alan, hafif ayak izi ve basit HTML belgeleri için daha hızlı işleme hızıdır. Karmaşık JavaScript veya CSS3 özellikleri olmayan basit HTML sayfaları için, EvoPdf tipik olarak 0,8-1,2 saniye içinde dönüşümleri tamamlayabilir ve bu da onu doğrudan belgelerin yüksek hacimli toplu işlendiği için uygun hale getirir. Kütüphane ayrıca ASP.NET ortamlarında sunucu tarafı işleme için iyi destek sunar ve web uygulamaları senaryoları için optimize edilmiştir.

Çapraz Platform Yetileri Kütüphaneler Arasında Nasıl Karşılaştırılır?

IronPDF'nin Modern Çapraz Platform Mimarisi

IronPDF, basit framework desteğinin ötesine geçen sorunsuz çapraz platform uyumluluğu sağlar. Kütüphane yerel olarak çalışır:

  • .NET Sürüm Desteği:

    • .NET 10, 9, 8, 7, 6, 5 ve Core 3.1+
    • .NET Standard 2.0+
    • .NET Framework 4.6.2+
    • C#, VB.NET ve F# için tam destek
  • İşletim Sistemi Uyumluluğu:

    • Windows (x86, x64, ARM)
    • Linux (Ubuntu, Debian, CentOS, Alpine)
    • macOS (Intel ve Apple Silicon)
    • Önceden yapılandırılmış görüntülerle Docker konteynerleri
  • Bulut Platform Entegrasyonu:
    • Azure Uygulama Hizmeti, Fonksiyonlar ve VM'ler
    • AWS Lambda ve EC2
    • Google Cloud Platform
    • Kubernetes dağıtımları

IronPDF'yi öne çıkaran özellik, sıfır yapılandırma dağıtım modelidir. Çoğu PDF kütüphanesinin ek bağımlılıklar veya çalışma zamanı kurulumları gerektirirken, IronPDF gerekli tüm bileşenleri NuGet paketi içine dahil eder. Bu kendine yeten yaklaşım, dağıtım karmaşıklığını büyük ölçüde azaltır ve yaygın "benim makinemde çalışıyor" sorunlarını ortadan kaldırır.

EvoPdf'nin Platform Gereksinimleri ve Kısıtlamaları

EvoPdf, benzer bir .NET sürüm aralığını destekler ancak çapraz platform senaryoları için daha dikkatli bir yapılandırma gerektirir:

  • .NET Framework Desteği:

    • .NET 8, 7, 6 ve 5
    • .NET Standard 2.0+
    • .NET Framework 4.8.1, 4.7.2, 4.6.1 ve 4.0+
  • Platform Düşünceleri:
    • Windows ortamları için birinci öncelikli optimizasyon
    • Linux desteği ek yapılandırma gerektirir
    • .NET Core üzerinden macOS desteği
    • Bulut dağıtımı, platforma özgü ayarlamalar gerektirir

Çapraz platform dağıtımları için, EvoPdf kullanıcıları genellikle Windows ve Linux ortamları arasında geçiş yaparken, platforma özgü bağımlılıkları ve yapılandırmaları yönetmek zorundadır. Bu ek kurulum karmaşıklığı, geliştirme zaman çizelgelerini etkileyebilir ve bakım yükünü artırabilir.

Ortak Görevler İçin Hangi Kütüphane Daha İyi PDF İşlevselliği Sunar?

HTML to PDF Dönüştürme: Görüntüleme Kalitesi ve Performans

Her iki kutuphanenin de en temel özelliği HTML'yi PDF'e dönüştürmektir, ancak yaklaşımları ve sonuçları önemli ölçüde farklıdır.

IronPDF HTML to PDF Örneği

using IronPdf;

// Initialize the Chrome-based renderer with advanced options
var renderer = new ChromePdfRenderer
{
    // Configure rendering options for optimal quality
    RenderingOptions = new ChromePdfRenderOptions
    {
        // Set high-quality rendering at 300 DPI for print-ready PDFs
        DPI = 300,

        // Enable JavaScript execution with custom timeout
        EnableJavaScript = true,
        RenderDelay = 2000, // Wait 2 seconds for dynamic content

        // Configure page layout
        MarginTop = 20,
        MarginBottom = 20,
        MarginLeft = 15,
        MarginRight = 15,

        // Enable modern web features
        CssMediaType = PdfCssMediaType.Print,
        ViewPortWidth = 1920,

        // Optimize for web fonts and images
        CreatePdfFormsFromHtml = true,
        FitToPaperMode = FitToPaperModes.Automatic
    }
};

// Convert complex HTML with CSS3 and JavaScript
var htmlContent = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap' rel='stylesheet'>
    <style>
        body { font-family: 'Roboto', sans-serif; }
        .chart-container { width: 100%; height: 400px; }
        @media print {
            .no-print { display: none; }
            .page-break { page-break-after: always; }
        }
    </style>
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
</head>
<body>
    <h1>Dynamic Sales Report</h1>
    <div class='chart-container'>
        <canvas id='salesChart'></canvas>
    </div>
    <script>
        // Dynamic chart generation
        const ctx = document.getElementById('salesChart').getContext('2d');
        new Chart(ctx, {
            type: 'line',
            data: {
                labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
                datasets: [{
                    label: 'Sales 2025',
                    data: [65, 78, 90, 81, 96],
                    borderColor: 'rgb(75, 192, 192)',
                    tension: 0.4
                }]
            }
        });
    </script>
</body>
</html>";

// Generate PDF with full JavaScript chart rendering
var pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Apply post-processing optimizations
pdf.CompressImages(90);
pdf.SaveAs("sales-report.pdf");
using IronPdf;

// Initialize the Chrome-based renderer with advanced options
var renderer = new ChromePdfRenderer
{
    // Configure rendering options for optimal quality
    RenderingOptions = new ChromePdfRenderOptions
    {
        // Set high-quality rendering at 300 DPI for print-ready PDFs
        DPI = 300,

        // Enable JavaScript execution with custom timeout
        EnableJavaScript = true,
        RenderDelay = 2000, // Wait 2 seconds for dynamic content

        // Configure page layout
        MarginTop = 20,
        MarginBottom = 20,
        MarginLeft = 15,
        MarginRight = 15,

        // Enable modern web features
        CssMediaType = PdfCssMediaType.Print,
        ViewPortWidth = 1920,

        // Optimize for web fonts and images
        CreatePdfFormsFromHtml = true,
        FitToPaperMode = FitToPaperModes.Automatic
    }
};

// Convert complex HTML with CSS3 and JavaScript
var htmlContent = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap' rel='stylesheet'>
    <style>
        body { font-family: 'Roboto', sans-serif; }
        .chart-container { width: 100%; height: 400px; }
        @media print {
            .no-print { display: none; }
            .page-break { page-break-after: always; }
        }
    </style>
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
</head>
<body>
    <h1>Dynamic Sales Report</h1>
    <div class='chart-container'>
        <canvas id='salesChart'></canvas>
    </div>
    <script>
        // Dynamic chart generation
        const ctx = document.getElementById('salesChart').getContext('2d');
        new Chart(ctx, {
            type: 'line',
            data: {
                labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
                datasets: [{
                    label: 'Sales 2025',
                    data: [65, 78, 90, 81, 96],
                    borderColor: 'rgb(75, 192, 192)',
                    tension: 0.4
                }]
            }
        });
    </script>
</body>
</html>";

// Generate PDF with full JavaScript chart rendering
var pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Apply post-processing optimizations
pdf.CompressImages(90);
pdf.SaveAs("sales-report.pdf");
Imports IronPdf

' Initialize the Chrome-based renderer with advanced options
Private renderer = New ChromePdfRenderer With {
	.RenderingOptions = New ChromePdfRenderOptions With {
		.DPI = 300,
		.EnableJavaScript = True,
		.RenderDelay = 2000,
		.MarginTop = 20,
		.MarginBottom = 20,
		.MarginLeft = 15,
		.MarginRight = 15,
		.CssMediaType = PdfCssMediaType.Print,
		.ViewPortWidth = 1920,
		.CreatePdfFormsFromHtml = True,
		.FitToPaperMode = FitToPaperModes.Automatic
	}
}

' Convert complex HTML with CSS3 and JavaScript
Private htmlContent = "
<!DOCTYPE html>
<html>
<head>
    <link href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap' rel='stylesheet'>
    <style>
        body { font-family: 'Roboto', sans-serif; }
        .chart-container { width: 100%; height: 400px; }
        @media print {
            .no-print { display: none; }
            .page-break { page-break-after: always; }
        }
    </style>
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
</head>
<body>
    <h1>Dynamic Sales Report</h1>
    <div class='chart-container'>
        <canvas id='salesChart'></canvas>
    </div>
    <script>
        // Dynamic chart generation
        const ctx = document.getElementById('salesChart').getContext('2d');
        new Chart(ctx, {
            type: 'line',
            data: {
                labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
                datasets: [{
                    label: 'Sales 2025',
                    data: [65, 78, 90, 81, 96],
                    borderColor: 'rgb(75, 192, 192)',
                    tension: 0.4
                }]
            }
        });
    </script>
</body>
</html>"

' Generate PDF with full JavaScript chart rendering
Private pdf = renderer.RenderHtmlAsPdf(htmlContent)

' Apply post-processing optimizations
pdf.CompressImages(90)
pdf.SaveAs("sales-report.pdf")
$vbLabelText   $csharpLabel

Bu IronPDF örneği birkaç gelişmiş yeteneği göstermektedir:

  • Chrome V8 JavaScript Motoru: Dinamik görselleştirmeler oluşturmak için Chart.js'i tam olarak çalıştırır
  • Web Font Desteği: Google Fonts'u otomatik olarak indirir ve gömer
  • Duyarlı Görüntüleme: Baskı optimizasyonu için CSS medya sorgularına saygı gösterir
  • Yüksek DPI Desteği: 300 DPI'da baskı hazır PDF'ler üretir
  • Otomatik Düzen: İçeriği sayfa sınırlarına akıllıca sığdırır

EvoPdf HTML to PDF Örneği

using EvoPdf;

// Create converter with configuration
HtmlToPdfConverter converter = new HtmlToPdfConverter();

// Set license key (required for production use)
converter.LicenseKey = "your-license-key";

// Configure conversion settings
converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
converter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
converter.PdfDocumentOptions.TopMargin = 20;
converter.PdfDocumentOptions.BottomMargin = 20;
converter.PdfDocumentOptions.LeftMargin = 15;
converter.PdfDocumentOptions.RightMargin = 15;

// Enable JavaScript execution
converter.JavaScriptEnabled = true;
converter.ConversionDelay = 2; // seconds

// Set authentication if needed
converter.AuthenticationOptions.Username = "username";
converter.AuthenticationOptions.Password = "password";

// Convert HTML string
string htmlString = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice</h1>
    <table>
        <tr>
            <th>Item</th>
            <th>Quantity</th>
            <th>Price</th>
        </tr>
        <tr>
            <td>Product A</td>
            <td>5</td>
            <td>$50.00</td>
        </tr>
    </table>
</body>
</html>";

// Perform conversion
byte[] pdfBytes = converter.ConvertHtml(htmlString, "");

// Save to file
System.IO.File.WriteAllBytes("invoice.pdf", pdfBytes);
using EvoPdf;

// Create converter with configuration
HtmlToPdfConverter converter = new HtmlToPdfConverter();

// Set license key (required for production use)
converter.LicenseKey = "your-license-key";

// Configure conversion settings
converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
converter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
converter.PdfDocumentOptions.TopMargin = 20;
converter.PdfDocumentOptions.BottomMargin = 20;
converter.PdfDocumentOptions.LeftMargin = 15;
converter.PdfDocumentOptions.RightMargin = 15;

// Enable JavaScript execution
converter.JavaScriptEnabled = true;
converter.ConversionDelay = 2; // seconds

// Set authentication if needed
converter.AuthenticationOptions.Username = "username";
converter.AuthenticationOptions.Password = "password";

// Convert HTML string
string htmlString = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice</h1>
    <table>
        <tr>
            <th>Item</th>
            <th>Quantity</th>
            <th>Price</th>
        </tr>
        <tr>
            <td>Product A</td>
            <td>5</td>
            <td>$50.00</td>
        </tr>
    </table>
</body>
</html>";

// Perform conversion
byte[] pdfBytes = converter.ConvertHtml(htmlString, "");

// Save to file
System.IO.File.WriteAllBytes("invoice.pdf", pdfBytes);
Imports EvoPdf

' Create converter with configuration
Private converter As New HtmlToPdfConverter()

' Set license key (required for production use)
converter.LicenseKey = "your-license-key"

' Configure conversion settings
converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4
converter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait
converter.PdfDocumentOptions.TopMargin = 20
converter.PdfDocumentOptions.BottomMargin = 20
converter.PdfDocumentOptions.LeftMargin = 15
converter.PdfDocumentOptions.RightMargin = 15

' Enable JavaScript execution
converter.JavaScriptEnabled = True
converter.ConversionDelay = 2 ' seconds

' Set authentication if needed
converter.AuthenticationOptions.Username = "username"
converter.AuthenticationOptions.Password = "password"

' Convert HTML string
Dim htmlString As String = "
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice</h1>
    <table>
        <tr>
            <th>Item</th>
            <th>Quantity</th>
            <th>Price</th>
        </tr>
        <tr>
            <td>Product A</td>
            <td>5</td>
            <td>$50.00</td>
        </tr>
    </table>
</body>
</html>"

' Perform conversion
Dim pdfBytes() As Byte = converter.ConvertHtml(htmlString, "")

' Save to file
System.IO.File.WriteAllBytes("invoice.pdf", pdfBytes)
$vbLabelText   $csharpLabel

EvoPdf'nin yaklaşımı, temel stil ve düzeni iyi destekleyen basit HTML dönüştürmeye odaklanır. Standart HTML ve CSS ile iyi başa çıkarken, modern web özellikleri, örneğin, CSS Grid, Flexbox animasyonları veya karmaşık JavaScript çerçeveleriyle zorlanabilir.

PDF Güvenliği ve Şifreleme: Hassas Belgeleri Koruma

Hassas belgelerle uğraşırken güvenlik önemlidir. Her iki kutuphane de şifreleme yetenekleri sunar, ancak farklı derecelerde sofistikelik sunar.

IronPDF Gelişmiş Güvenlik Uygulaması

using IronPdf;
using IronPdf.Security;

// Load an existing PDF or create new one
var pdf = PdfDocument.FromFile("confidential-report.pdf");

// Configure comprehensive security settings
pdf.SecuritySettings = new SecuritySettings
{
    // Set owner password (full permissions)
    OwnerPassword = "admin-complex-password-2025",

    // Set user password (restricted permissions)
    UserPassword = "user-password-readonly",

    // Configure granular permissions
    AllowAccessibilityExtractContent = false,
    AllowAnnotations = false,
    AllowAssembleDocument = false,
    AllowCopy = false,
    AllowFillForms = true,
    AllowFullQualityPrint = false,
    AllowModifyDocument = false,
    AllowPrint = true,

    // Use strongest encryption available
    EncryptionLevel = EncryptionLevel.AES256Bit
};

// Add metadata security
pdf.MetaData.Author = "Authorized Personnel Only";
pdf.MetaData.ModifiedDate = DateTime.UtcNow;
pdf.MetaData.Title = "Confidential: Internal Use Only";

// Apply digital signature for authenticity
var signature = new PdfSignature("certificate.pfx", "cert-password")
{
    SigningReason = "Document Approval",
    SigningLocation = "Corporate Headquarters",
    SigningContact = "security@company.com",

    // Visual signature appearance
    IsVisible = true,
    X = 100,
    Y = 100,
    Width = 200,
    Height = 50,
    PageIndex = 0,

    // Custom appearance
    SignatureImage = new PdfSignatureImage("signature.png"),
    DateFormat = "yyyy-MM-dd HH:mm:ss"
};

pdf.Sign(signature);

// Add watermark for additional security
pdf.ApplyWatermark("<h2 style='color:red; opacity:0.5;'>CONFIDENTIAL</h2>", 
    45, VerticalAlignment.Middle, HorizontalAlignment.Center);

pdf.SaveAs("secured-document.pdf");
using IronPdf;
using IronPdf.Security;

// Load an existing PDF or create new one
var pdf = PdfDocument.FromFile("confidential-report.pdf");

// Configure comprehensive security settings
pdf.SecuritySettings = new SecuritySettings
{
    // Set owner password (full permissions)
    OwnerPassword = "admin-complex-password-2025",

    // Set user password (restricted permissions)
    UserPassword = "user-password-readonly",

    // Configure granular permissions
    AllowAccessibilityExtractContent = false,
    AllowAnnotations = false,
    AllowAssembleDocument = false,
    AllowCopy = false,
    AllowFillForms = true,
    AllowFullQualityPrint = false,
    AllowModifyDocument = false,
    AllowPrint = true,

    // Use strongest encryption available
    EncryptionLevel = EncryptionLevel.AES256Bit
};

// Add metadata security
pdf.MetaData.Author = "Authorized Personnel Only";
pdf.MetaData.ModifiedDate = DateTime.UtcNow;
pdf.MetaData.Title = "Confidential: Internal Use Only";

// Apply digital signature for authenticity
var signature = new PdfSignature("certificate.pfx", "cert-password")
{
    SigningReason = "Document Approval",
    SigningLocation = "Corporate Headquarters",
    SigningContact = "security@company.com",

    // Visual signature appearance
    IsVisible = true,
    X = 100,
    Y = 100,
    Width = 200,
    Height = 50,
    PageIndex = 0,

    // Custom appearance
    SignatureImage = new PdfSignatureImage("signature.png"),
    DateFormat = "yyyy-MM-dd HH:mm:ss"
};

pdf.Sign(signature);

// Add watermark for additional security
pdf.ApplyWatermark("<h2 style='color:red; opacity:0.5;'>CONFIDENTIAL</h2>", 
    45, VerticalAlignment.Middle, HorizontalAlignment.Center);

pdf.SaveAs("secured-document.pdf");
Imports IronPdf
Imports IronPdf.Security

' Load an existing PDF or create new one
Private pdf = PdfDocument.FromFile("confidential-report.pdf")

' Configure comprehensive security settings
pdf.SecuritySettings = New SecuritySettings With {
	.OwnerPassword = "admin-complex-password-2025",
	.UserPassword = "user-password-readonly",
	.AllowAccessibilityExtractContent = False,
	.AllowAnnotations = False,
	.AllowAssembleDocument = False,
	.AllowCopy = False,
	.AllowFillForms = True,
	.AllowFullQualityPrint = False,
	.AllowModifyDocument = False,
	.AllowPrint = True,
	.EncryptionLevel = EncryptionLevel.AES256Bit
}

' Add metadata security
pdf.MetaData.Author = "Authorized Personnel Only"
pdf.MetaData.ModifiedDate = DateTime.UtcNow
pdf.MetaData.Title = "Confidential: Internal Use Only"

' Apply digital signature for authenticity
Dim signature = New PdfSignature("certificate.pfx", "cert-password") With {
	.SigningReason = "Document Approval",
	.SigningLocation = "Corporate Headquarters",
	.SigningContact = "security@company.com",
	.IsVisible = True,
	.X = 100,
	.Y = 100,
	.Width = 200,
	.Height = 50,
	.PageIndex = 0,
	.SignatureImage = New PdfSignatureImage("signature.png"),
	.DateFormat = "yyyy-MM-dd HH:mm:ss"
}

pdf.Sign(signature)

' Add watermark for additional security
pdf.ApplyWatermark("<h2 style='color:red; opacity:0.5;'>CONFIDENTIAL</h2>", 45, VerticalAlignment.Middle, HorizontalAlignment.Center)

pdf.SaveAs("secured-document.pdf")
$vbLabelText   $csharpLabel

IronPDF'nin güvenlik uygulaması, kurumsal düzeyde özellikler sunar:

  • 15+ Detaylı İzinler: Kullanıcıların yapabileceklerini ince ayarlarla belirleyin
  • Görsel Dijital İmzalar: İmza görüntüleri ve zaman damgalarını içerebilir
  • Meta Veri Koruması: Belge özelliklerini ve denetim izlerini güvence altına alır
  • Kademeli Güvenlik: Şifreleme, imzalar ve filigranları birleştirir

EvoPdf Güvenlik Yapılandırması

using EvoPdf;

// Create security manager
PdfSecurityOptions securityOptions = new PdfSecurityOptions();

// Set basic security parameters
securityOptions.UserPassword = "user123";
securityOptions.OwnerPassword = "owner456";
securityOptions.KeySize = EncryptionKeySize.Key256Bit;

// Configure permissions
securityOptions.CanPrint = true;
securityOptions.CanCopyContent = false;
securityOptions.CanEditContent = false;
securityOptions.CanEditAnnotations = false;
securityOptions.CanFillFormFields = true;
securityOptions.CanAssembleDocument = false;

// Apply security to existing PDF
PdfSecurityManager securityManager = new PdfSecurityManager(securityOptions);
securityManager.SaveSecuredPdfToFile("input.pdf", "secured-output.pdf");
using EvoPdf;

// Create security manager
PdfSecurityOptions securityOptions = new PdfSecurityOptions();

// Set basic security parameters
securityOptions.UserPassword = "user123";
securityOptions.OwnerPassword = "owner456";
securityOptions.KeySize = EncryptionKeySize.Key256Bit;

// Configure permissions
securityOptions.CanPrint = true;
securityOptions.CanCopyContent = false;
securityOptions.CanEditContent = false;
securityOptions.CanEditAnnotations = false;
securityOptions.CanFillFormFields = true;
securityOptions.CanAssembleDocument = false;

// Apply security to existing PDF
PdfSecurityManager securityManager = new PdfSecurityManager(securityOptions);
securityManager.SaveSecuredPdfToFile("input.pdf", "secured-output.pdf");
Imports EvoPdf

' Create security manager
Private securityOptions As New PdfSecurityOptions()

' Set basic security parameters
securityOptions.UserPassword = "user123"
securityOptions.OwnerPassword = "owner456"
securityOptions.KeySize = EncryptionKeySize.Key256Bit

' Configure permissions
securityOptions.CanPrint = True
securityOptions.CanCopyContent = False
securityOptions.CanEditContent = False
securityOptions.CanEditAnnotations = False
securityOptions.CanFillFormFields = True
securityOptions.CanAssembleDocument = False

' Apply security to existing PDF
Dim securityManager As New PdfSecurityManager(securityOptions)
securityManager.SaveSecuredPdfToFile("input.pdf", "secured-output.pdf")
$vbLabelText   $csharpLabel

EvoPdf, temel belge korumasına uygun temel güvenlik özellikleri sunar, ancak IronPDF'de bulunan bazı gelişmiş seçeneklerden yoksundur.

İçerik Geri Alma: Uyumluluk ve Gizlilik Koruması

Bugünün gizlilik odaklı ortamında, düzenlemelere, örneğin GDPR, HIPAA ve CCPA, uyum için PDF'lerden hassas bilgileri kalıcı olarak silme yeteneği çok önemlidir.

IronPDF Geri Alma Örneği

using IronPdf;

// Load PDF containing sensitive information
PdfDocument pdf = PdfDocument.FromFile("customer-records.pdf");

// Redact using multiple strategies
// 1. Redact specific text patterns (SSN format)
pdf.RedactTextOnAllPages(@"\b\d{3}-\d{2}-\d{4}\b", 
    isRegex: true, 
    new RedactionOptions
    {
        RedactionColor = Color.Black,
        RedactionStyle = RedactionStyle.Filled,
        DrawRedactionBorder = true,
        BorderColor = Color.Red
    });

// 2. Redact specific phrases
pdf.RedactTextOnPages("Confidential", 
    new[] { 0, 1, 2 }, // Specific pages
    caseSensitive: false);

// 3. Redact regions by coordinates
pdf.RedactRegion(new Rectangle(100, 200, 300, 50), 0);

// 4. Use advanced pattern matching for credit cards
string creditCardPattern = @"\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})\b";
pdf.RedactTextOnAllPages(creditCardPattern, isRegex: true);

// Apply OCR-based redaction for scanned documents
pdf.ApplyOcr(new TesseractLanguage[] { TesseractLanguage.English });
pdf.RedactTextOnAllPages("Salary:");

// Save with audit trail
pdf.MetaData.CustomProperties.Add("Redacted", DateTime.UtcNow.ToString());
pdf.MetaData.CustomProperties.Add("RedactedBy", Environment.UserName);
pdf.SaveAs("redacted-records.pdf");
using IronPdf;

// Load PDF containing sensitive information
PdfDocument pdf = PdfDocument.FromFile("customer-records.pdf");

// Redact using multiple strategies
// 1. Redact specific text patterns (SSN format)
pdf.RedactTextOnAllPages(@"\b\d{3}-\d{2}-\d{4}\b", 
    isRegex: true, 
    new RedactionOptions
    {
        RedactionColor = Color.Black,
        RedactionStyle = RedactionStyle.Filled,
        DrawRedactionBorder = true,
        BorderColor = Color.Red
    });

// 2. Redact specific phrases
pdf.RedactTextOnPages("Confidential", 
    new[] { 0, 1, 2 }, // Specific pages
    caseSensitive: false);

// 3. Redact regions by coordinates
pdf.RedactRegion(new Rectangle(100, 200, 300, 50), 0);

// 4. Use advanced pattern matching for credit cards
string creditCardPattern = @"\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})\b";
pdf.RedactTextOnAllPages(creditCardPattern, isRegex: true);

// Apply OCR-based redaction for scanned documents
pdf.ApplyOcr(new TesseractLanguage[] { TesseractLanguage.English });
pdf.RedactTextOnAllPages("Salary:");

// Save with audit trail
pdf.MetaData.CustomProperties.Add("Redacted", DateTime.UtcNow.ToString());
pdf.MetaData.CustomProperties.Add("RedactedBy", Environment.UserName);
pdf.SaveAs("redacted-records.pdf");
Imports IronPdf

' Load PDF containing sensitive information
Private pdf As PdfDocument = PdfDocument.FromFile("customer-records.pdf")

' Redact using multiple strategies
' 1. Redact specific text patterns (SSN format)
pdf.RedactTextOnAllPages("\b\d{3}-\d{2}-\d{4}\b", isRegex:= True, New RedactionOptions With {
	.RedactionColor = Color.Black,
	.RedactionStyle = RedactionStyle.Filled,
	.DrawRedactionBorder = True,
	.BorderColor = Color.Red
})

' 2. Redact specific phrases
pdf.RedactTextOnPages("Confidential", { 0, 1, 2 }, caseSensitive:= False)

' 3. Redact regions by coordinates
pdf.RedactRegion(New Rectangle(100, 200, 300, 50), 0)

' 4. Use advanced pattern matching for credit cards
Dim creditCardPattern As String = "\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})\b"
pdf.RedactTextOnAllPages(creditCardPattern, isRegex:= True)

' Apply OCR-based redaction for scanned documents
pdf.ApplyOcr(New TesseractLanguage() { TesseractLanguage.English })
pdf.RedactTextOnAllPages("Salary:")

' Save with audit trail
pdf.MetaData.CustomProperties.Add("Redacted", DateTime.UtcNow.ToString())
pdf.MetaData.CustomProperties.Add("RedactedBy", Environment.UserName)
pdf.SaveAs("redacted-records.pdf")
$vbLabelText   $csharpLabel

IronPDF'nin geri alma yetenekleri şunları içerir:

  • Gerçek İçerik Kaldırma: Metni kalıcı olarak kaldırır, sadece gizlemez
  • Desen Tanıma: SSN'ler, kredi kartları, e-postalar için regex desteği
  • Görsel Geri Alma Stilleri: Denetim izleri için özelleştirilebilir görünüm
  • OCR Entegrasyonu: Tarama belgelerindeki metni gizler
  • Seçici Geri Alma: Belirli sayfaları veya bölgeleri hedefleyin

EvoPdf, yerleşik geri alma işlevselliği içermez, bu da gizlilik düzenlemelerine uyum gerektiren uygulamalar için önemli bir sınırlama olabilir.

Form İşleme: Etkileşimli PDF'ler Oluşturma

Her iki kutuphane de PDF formlarını destekler, ancak oluşturma ve işleme yaklaşımları farklıdır.

IronPDF Form Örneği

using IronPdf;
using IronPdf.Forms;

// Create a new PDF with an HTML form
var html = @"
<html>
<body>
    <h2>Employee Information Form</h2>
    <form>
        <label>Full Name:</label>
        <input type='text' name='fullName' required />

        <label>Email:</label>
        <input type='email' name='email' required />

        <label>Department:</label>
        <select name='department'>
            <option value=''>Select Department</option>
            <option value='IT'>Information Technology</option>
            <option value='HR'>Human Resources</option>
            <option value='Sales'>Sales</option>
        </select>

        <label>Start Date:</label>
        <input type='date' name='startDate' />

        <label>
            <input type='checkbox' name='agreement' />
            I agree to the terms and conditions
        </label>

        <button type='submit'>Submit</button>
    </form>
</body>
</html>";

var renderer = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions
    {
        CreatePdfFormsFromHtml = true // Enable form field creation
    }
};

var pdf = renderer.RenderHtmlAsPdf(html);

// Programmatically fill form fields
pdf.Form.SetFieldValue("fullName", "John Doe");
pdf.Form.SetFieldValue("email", "john.doe@company.com");
pdf.Form.SetFieldValue("department", "IT");
pdf.Form.SetFieldValue("startDate", DateTime.Now.ToString("yyyy-MM-dd"));
pdf.Form.SetCheckBoxValue("agreement", true);

// Make specific fields read-only
pdf.Form.Fields["email"].ReadOnly = true;

// Add form field validation
foreach (var field in pdf.Form.Fields)
{
    if (field.Name == "email")
    {
        field.Annotation.BorderColor = Color.Blue;
        field.Annotation.BackgroundColor = Color.LightGray;
    }
}

// Flatten form (convert to static content)
var flattenedPdf = pdf.Flatten();
flattenedPdf.SaveAs("completed-form.pdf");

// Or save as fillable form
pdf.SaveAs("fillable-form.pdf");
using IronPdf;
using IronPdf.Forms;

// Create a new PDF with an HTML form
var html = @"
<html>
<body>
    <h2>Employee Information Form</h2>
    <form>
        <label>Full Name:</label>
        <input type='text' name='fullName' required />

        <label>Email:</label>
        <input type='email' name='email' required />

        <label>Department:</label>
        <select name='department'>
            <option value=''>Select Department</option>
            <option value='IT'>Information Technology</option>
            <option value='HR'>Human Resources</option>
            <option value='Sales'>Sales</option>
        </select>

        <label>Start Date:</label>
        <input type='date' name='startDate' />

        <label>
            <input type='checkbox' name='agreement' />
            I agree to the terms and conditions
        </label>

        <button type='submit'>Submit</button>
    </form>
</body>
</html>";

var renderer = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions
    {
        CreatePdfFormsFromHtml = true // Enable form field creation
    }
};

var pdf = renderer.RenderHtmlAsPdf(html);

// Programmatically fill form fields
pdf.Form.SetFieldValue("fullName", "John Doe");
pdf.Form.SetFieldValue("email", "john.doe@company.com");
pdf.Form.SetFieldValue("department", "IT");
pdf.Form.SetFieldValue("startDate", DateTime.Now.ToString("yyyy-MM-dd"));
pdf.Form.SetCheckBoxValue("agreement", true);

// Make specific fields read-only
pdf.Form.Fields["email"].ReadOnly = true;

// Add form field validation
foreach (var field in pdf.Form.Fields)
{
    if (field.Name == "email")
    {
        field.Annotation.BorderColor = Color.Blue;
        field.Annotation.BackgroundColor = Color.LightGray;
    }
}

// Flatten form (convert to static content)
var flattenedPdf = pdf.Flatten();
flattenedPdf.SaveAs("completed-form.pdf");

// Or save as fillable form
pdf.SaveAs("fillable-form.pdf");
Imports IronPdf
Imports IronPdf.Forms

' Create a new PDF with an HTML form
Private html = "
<html>
<body>
    <h2>Employee Information Form</h2>
    <form>
        <label>Full Name:</label>
        <input type='text' name='fullName' required />

        <label>Email:</label>
        <input type='email' name='email' required />

        <label>Department:</label>
        <select name='department'>
            <option value=''>Select Department</option>
            <option value='IT'>Information Technology</option>
            <option value='HR'>Human Resources</option>
            <option value='Sales'>Sales</option>
        </select>

        <label>Start Date:</label>
        <input type='date' name='startDate' />

        <label>
            <input type='checkbox' name='agreement' />
            I agree to the terms and conditions
        </label>

        <button type='submit'>Submit</button>
    </form>
</body>
</html>"

Private renderer = New ChromePdfRenderer With {
	.RenderingOptions = New ChromePdfRenderOptions With {.CreatePdfFormsFromHtml = True}
}

Private pdf = renderer.RenderHtmlAsPdf(html)

' Programmatically fill form fields
pdf.Form.SetFieldValue("fullName", "John Doe")
pdf.Form.SetFieldValue("email", "john.doe@company.com")
pdf.Form.SetFieldValue("department", "IT")
pdf.Form.SetFieldValue("startDate", DateTime.Now.ToString("yyyy-MM-dd"))
pdf.Form.SetCheckBoxValue("agreement", True)

' Make specific fields read-only
pdf.Form.Fields("email").ReadOnly = True

' Add form field validation
For Each field In pdf.Form.Fields
	If field.Name = "email" Then
		field.Annotation.BorderColor = Color.Blue
		field.Annotation.BackgroundColor = Color.LightGray
	End If
Next field

' Flatten form (convert to static content)
Dim flattenedPdf = pdf.Flatten()
flattenedPdf.SaveAs("completed-form.pdf")

' Or save as fillable form
pdf.SaveAs("fillable-form.pdf")
$vbLabelText   $csharpLabel

IronPDF'nin form işleme özellikleri:

  • Otomatik Form Oluşturma: HTML formlarını PDF formlarına dönüştürür
  • Programlı İşleme: API aracılığıyla form alanlarını doldurun, okuyun ve değiştirin
  • Alan Türleri: Metin, onay kutusu, radyo, açılır kutu, imza alanları
  • Doğrulama: Alan özelliklerini ve kısıtlamalarını ayarlayın
  • Form Yereleştirme: Doldurulmuş formları statik PDF'lere dönüştürün

Performans Kriterleri: Gerçek Dünya Senaryoları

Performans özellikleri, belge karmaşıklığına ve kullanım senaryosuna bağlı olarak önemli ölçüde değişir:

Toplu İşleme Performans Testi

// Performance comparison for batch processing
public class PerformanceBenchmark
{
    public static async Task RunBenchmark()
    {
        var htmlTemplates = GenerateInvoiceTemplates(1000);
        var stopwatch = new Stopwatch();

        // IronPDF batch processing with optimization
        Console.WriteLine("IronPDF Batch Processing:");
        stopwatch.Start();

        var renderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                RenderDelay = 0, // No delay for static content
                EnableJavaScript = false, // Disable JS for speed
                DPI = 150 // Lower DPI for faster rendering
            }
        };

        // Parallel processing
        var tasks = htmlTemplates.Select(async (html, index) =>
        {
            var pdf = await renderer.RenderHtmlAsPdfAsync(html);
            await pdf.SaveAsAsync($"ironpdf-invoice-{index}.pdf");
        });

        await Task.WhenAll(tasks);

        stopwatch.Stop();
        Console.WriteLine($"Time: {stopwatch.ElapsedMilliseconds}ms");
        Console.WriteLine($"Average: {stopwatch.ElapsedMilliseconds / 1000.0}ms per PDF");

        // Memory usage
        var process = Process.GetCurrentProcess();
        Console.WriteLine($"Memory: {process.WorkingSet64 / 1024 / 1024}MB");
    }
}
// Performance comparison for batch processing
public class PerformanceBenchmark
{
    public static async Task RunBenchmark()
    {
        var htmlTemplates = GenerateInvoiceTemplates(1000);
        var stopwatch = new Stopwatch();

        // IronPDF batch processing with optimization
        Console.WriteLine("IronPDF Batch Processing:");
        stopwatch.Start();

        var renderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                RenderDelay = 0, // No delay for static content
                EnableJavaScript = false, // Disable JS for speed
                DPI = 150 // Lower DPI for faster rendering
            }
        };

        // Parallel processing
        var tasks = htmlTemplates.Select(async (html, index) =>
        {
            var pdf = await renderer.RenderHtmlAsPdfAsync(html);
            await pdf.SaveAsAsync($"ironpdf-invoice-{index}.pdf");
        });

        await Task.WhenAll(tasks);

        stopwatch.Stop();
        Console.WriteLine($"Time: {stopwatch.ElapsedMilliseconds}ms");
        Console.WriteLine($"Average: {stopwatch.ElapsedMilliseconds / 1000.0}ms per PDF");

        // Memory usage
        var process = Process.GetCurrentProcess();
        Console.WriteLine($"Memory: {process.WorkingSet64 / 1024 / 1024}MB");
    }
}
' Performance comparison for batch processing
Public Class PerformanceBenchmark
	Public Shared Async Function RunBenchmark() As Task
		Dim htmlTemplates = GenerateInvoiceTemplates(1000)
		Dim stopwatch As New Stopwatch()

		' IronPDF batch processing with optimization
		Console.WriteLine("IronPDF Batch Processing:")
		stopwatch.Start()

		Dim renderer = New ChromePdfRenderer With {
			.RenderingOptions = New ChromePdfRenderOptions With {
				.RenderDelay = 0,
				.EnableJavaScript = False,
				.DPI = 150
			}
		}

		' Parallel processing
		Dim tasks = htmlTemplates.Select(Async Function(html, index)
			Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
			Await pdf.SaveAsAsync($"ironpdf-invoice-{index}.pdf")
		End Function)

		Await Task.WhenAll(tasks)

		stopwatch.Stop()
		Console.WriteLine($"Time: {stopwatch.ElapsedMilliseconds}ms")
		Console.WriteLine($"Average: {stopwatch.ElapsedMilliseconds / 1000.0}ms per PDF")

		' Memory usage
		Dim process As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess()
		Console.WriteLine($"Memory: {process.WorkingSet64 \ 1024 \ 1024}MB")
	End Function
End Class
$vbLabelText   $csharpLabel

Gerçek dünya testinden performans bulguları:

  • Basit HTML: EvoPdf %30-40 daha hızlı (0,8s vs 1,2s)
  • Karmaşık JavaScript: IronPDF daha güvenilir, EvoPdf başarısız olabilir
  • Toplu İşleme: IronPDF daha iyi paralel işleme
  • Bellek Kullanımı: EvoPdf daha düşük başlangıç, IronPDF daha iyi çöp toplama
  • Büyük Belgeler: IronPDF 1000+ sayfalık belgelerde %30 daha hızlı

Farklı Ekip Boyutları için Fiyatlandırma Modelleri Nasıl Karşılaştırılır?

IronPDF Lisanslama Yapısı

IronPDF, Telif ücretsiz yeniden dağıtim seçeneğiyle birlikte Lite, Plus ve Professional lisanslar dahil çeşitli fiyat seçenekleri sunar. Lisanslama modeli, ekibiniz ve projeniz ihtiyaçları doğrultusunda ölçeklenmek üzere tasarlanmıştır (2025 fiyatları):

  • Lite Lisans: $799

    • 1 geliştirici
    • 1 konum
    • 1 proje
    • E-posta desteği
    • Ideal for: Bireysel geliştiriciler, küçük projeler
  • Plus Lisans: $1,199

    • 3 geliştirici
    • 3 konum
    • 3 proje
    • E-posta, sohbet ve telefon desteği
    • Ideal for: Küçük ekipler, çoklu projeler
  • Professional Lisans: $2,399
    • 10 geliştirici
    • 10 konum
    • 10 proje
  • Ekran paylaşımı ile öncelikli destek

    • Ideal for: Orta ve büyük ekipler
  • Ek Seçenekler:
    • Telif ücretsiz yeniden dağıtım: +$2,399
    • 5 yıllık destek ve güncellemeler: $1,999 (veya $999/yıl)
    • Iron Suite: $1,498 for all 9 Iron Software urunleri

EvoPdf Lisanslama Seçenekleri

EVO PDF Araç Seti dağıtım versiyonu için $650 ve şirket versiyonu için $1,400 maliyetindedir, oysa bağımsız HTML'den PDF dönüştürücüsü dağıtım için $450 ve şirket versiyonu için $1,200 maliyetindedir:

  • Dağıtım Lisansı:

    • EVO HTML'den PDF'ye: $450
    • EVO PDF Araç Seti: $650
    • Tek sunucu, tek uygulama
    • Yeniden dağıtım yapılamaz
    • İlk yıl standart destek
  • Şirket Lisansı:
    • EVO HTML'den PDF'ye: $1,200
    • EVO PDF Araç Seti: $1,400
    • Sınırsız geliştirici
    • Sınırsız dağıtım
    • Tam yeniden dağıtım hakları
    • İlk yıl öncelikli destek

Sahip Olma Maliyeti Analizi

Gerçek dünya senaryolarını ele alarak gerçek maliyet sonuçlarını anlamaya çalışalım:

Senaryo 1: 2 Geliştiricili Startup

  • IronPDF Lite: $799 (2 lisans gerektirir = $1,498)
  • EvoPdf Şirket: $1,200 (sınırsız geliştirici kapsar)
  • Kazanan: İlk maliyet için EvoPdf

Senaryo 2: Büyüyen Ekip (5 Geliştirici, Çok Sayıda Proje)

  • IronPDF Plus: $1,199 (3 geliştirici kapsar, Professional gerekir)
  • IronPDF Professional: $2,399
  • EvoPdf Şirket: $1,200
  • Kazanan: Ekip ölçeklendirmesi için EvoPdf

Senaryo 3: Çeşitli PDF Araçları Gereken Kurumsal

  • IronPDF Professional + IronOCR + IronBarcode: ~9.000 $
  • Iron Suite: $1,498 (tüm 9 ürün)
  • EvoPdf Araç Seti + Ek Araçlar: Her araç başına + $1,400
  • Kazanan: Kapsamlı ihtiyaçlar için Iron Suite

Senaryo 4: Yeniden Dağıtımlı SaaS Ürünü

  • IronPDF Professional + Yeniden Dağıtım: $4,998
  • EvoPdf Şirketi: $1,200 (yeniden dağıtım dahil)
  • Kazanan: Yeniden dağıtım senaryoları için EvoPdf

Modern CSS Çerçeveleri Seçiminizi Nasıl Etkiler?

PDF kütüphanesi seçerken genellikle hafife alınan bir faktör, modern CSS çerçeveleri için destektir. Bootstrap, Tailwind CSS ve Foundation web geliştirmede hakimdir, kütüphanenizin bu çerçeveleri yönetme yeteneği geliştirme verimliliğini ve çıktı kalitesini doğrudan etkiler.

IronPDF: Kapsamlı Çerçeve Desteği

IronPDF'nin tam Chrome V8 motoru, hiçbir taviz vermeden tüm modern CSS çerçevelerine yerel destek sağlar:

  • Bootstrap 5: Karmaşık düzenler için tam flexbox ve CSS Grid desteği
  • Tailwind CSS: Tüm yardımcı sınıflar doğru şekilde render edilir
  • Modern CSS3: Dönüşümler, animasyonlar, özel özelliklerin tümü desteklenir
  • Üretim Doğrulama: Bootstrap ana sayfası ve Bootstrap şablonlarını başarıyla oluşturur

Kod Örneği: Bootstrap Zaman Çizelgesi Bileşeni

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapTimeline = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .timeline { position: relative; padding: 20px 0; }
        .timeline::before {
            content: '';
            position: absolute;
            left: 50%;
            width: 2px;
            height: 100%;
            background: #dee2e6;
        }
        .timeline-item { position: relative; margin: 20px 0; }
    </style>
</head>
<body>
    <div class='container py-5'>
        <h2 class='text-center mb-5'>Project Timeline</h2>
        <div class='timeline'>
            <div class='timeline-item'>
                <div class='row'>
                    <div class='col-md-6'>
                        <div class='card shadow-sm'>
                            <div class='card-body'>
                                <h5 class='card-title'>Phase 1: Planning</h5>
                                <p class='text-muted'>Q1 2025</p>
                                <p class='card-text'>Initial project scope and requirements gathering completed.</p>
                                <span class='badge bg-success'>Completed</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapTimeline);
pdf.SaveAs("project-timeline.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapTimeline = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .timeline { position: relative; padding: 20px 0; }
        .timeline::before {
            content: '';
            position: absolute;
            left: 50%;
            width: 2px;
            height: 100%;
            background: #dee2e6;
        }
        .timeline-item { position: relative; margin: 20px 0; }
    </style>
</head>
<body>
    <div class='container py-5'>
        <h2 class='text-center mb-5'>Project Timeline</h2>
        <div class='timeline'>
            <div class='timeline-item'>
                <div class='row'>
                    <div class='col-md-6'>
                        <div class='card shadow-sm'>
                            <div class='card-body'>
                                <h5 class='card-title'>Phase 1: Planning</h5>
                                <p class='text-muted'>Q1 2025</p>
                                <p class='card-text'>Initial project scope and requirements gathering completed.</p>
                                <span class='badge bg-success'>Completed</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapTimeline);
pdf.SaveAs("project-timeline.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim bootstrapTimeline As String = "
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .timeline { position: relative; padding: 20px 0; }
        .timeline::before {
            content: '';
            position: absolute;
            left: 50%;
            width: 2px;
            height: 100%;
            background: #dee2e6;
        }
        .timeline-item { position: relative; margin: 20px 0; }
    </style>
</head>
<body>
    <div class='container py-5'>
        <h2 class='text-center mb-5'>Project Timeline</h2>
        <div class='timeline'>
            <div class='timeline-item'>
                <div class='row'>
                    <div class='col-md-6'>
                        <div class='card shadow-sm'>
                            <div class='card-body'>
                                <h5 class='card-title'>Phase 1: Planning</h5>
                                <p class='text-muted'>Q1 2025</p>
                                <p class='card-text'>Initial project scope and requirements gathering completed.</p>
                                <span class='badge bg-success'>Completed</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
    </div>
</body>
</html>"

Dim pdf = renderer.RenderHtmlAsPdf(bootstrapTimeline)
pdf.SaveAs("project-timeline.pdf")
$vbLabelText   $csharpLabel

EvoPdf: Sınırlı İyi CSS Desteği

EvoPdf'nin özel HTML oluşturma motoru, bazı modern çerçeve sınırlamaları ile sağlam CSS desteği sağlar:

  • Bootstrap 3: Genelde eski Bootstrap sürümleriyle iyi çalışır
  • Bootstrap 4+: Flexbox düzenleri ayarlama gerektirebilir
  • CSS3 desteği: İyi kapsama (~%90) ama tamamlanmamış
  • Mevcut çözümler: Karmaşık düzenler için genellikle manuel CSS ayarlamaları gerekiyor

Uygulamalı Hususlar:

Geliştirici deneyimine göre:

  • Temel Bootstrap bileşenleri (düğmeler, uyarılar, tablolar) genelde doğru oluşturulur
  • Gelişmiş bileşenler (navigasyon çubukları, modallar, karmaşık ızgaralar) özelleştirme gerektirebilir
  • CSS Grid düzenleri test ve potansiyel yedeklemeler gerektirir
  • Özel Bootstrap temaları bazen beklenmedik oluşturma sorunları yaşayabilir

Geliştirme Etkisi: Uygulamanız UI için Bootstrap'i kapsamlı kullanıyorsa ve web arayüzünüzle eşleşen raporlar veya belgeler oluşturmanız gerekiyorsa, IronPDF'nin sorunsuz oluşturma süreci önemli ölçüde geliştirici zamanını kurtarır. EvoPdf, şablonlarınızın PDF oluşturması için ayrı, basitleştirilmiş sürümlerinin oluşturulmasını gerektirebilir.

CSS çerçevesi uyumluluğu hakkında kapsamlı bilgi için Bootstrap & Flexbox CSS Rehberi'ne bakın.

Hangi Dokümantasyon ve Destek Seçenekleri Geliştiricilere Daha İyi Hizmet Eder?

IronPDF'nin Geliştirici Kaynakları

IronPDF kapsamlı dokümantasyon, 24/5 mühendis desteği, video eğitimleri, bir topluluk forumu ve düzenli güncellemeler sağlar. Destek ekosistemi şunları içerir:

  • Dokümantasyon Kalitesi:

  • Destek Kanalları:

    • 24/5 mühendislik desteği (geliştiricilere doğrudan erişim)
    • Yanıt süresi: genellikle 24-48 saat
    • Plus+ lisansları için canlı sohbet
    • Professional lisanslar için telefon desteği
    • Karmaşık sorunlar için ekran paylaşımı
    • Topluluk forumu ve Stack Overflow varlığı
  • Öğrenim Kaynakları:
    • Başlangıç kılavuzları
    • Mimari dokümantasyonu
    • Performans optimizasyon kılavuzları
    • Güvenlik en iyi uygulamaları
    • Bulut dağıtım kılavuzları

EvoPdf'nin Destek Yapısı

EvoPdf, dokümantasyonu ve destek sunar:

  • Dokümantasyon:

    • API referans dokümantasyonu
    • Yaygın senaryolar için kod örnekleri
    • Web sitesindeki canlı demo bölümü
    • Temel sorun giderme kılavuzları
  • Destek Seçenekleri:
    • E-posta ve telefon desteği (ilk yıl dahil)
    • Standart ve öncelikli destek seviyeleri
    • Topluluk yardımı için destek forumu
    • İlk yılın ardından yenileme gerekir

Ana fark, IronPDF'nin eğitim içeriği ve doğrudan mühendislik desteğine yaptığı yatırımdır, bu da öğrenme eğrisini önemli ölçüde düşürür ve sorun giderme zamanını azaltır.

Her Bir Kütüphane İçin En İyi Kullanım Durumları Nedir?

Ne Zaman IronPDF Secilir?

IronPDF, aşağıdaki senaryolarda başarı gösterir:

1. Modern Web Uygulama Entegrasyonu

  • Dinamik raporlar üreten SaaS platformları
  • Grafiklerle fatura oluşturan e-ticaret siteleri
  • PDF olarak dışa aktarılan iş zekası gösterge panelleri
  • React, Angular veya Vue.js kullanan uygulamalar

2. Uyumluluk ve Güvenlik Gereksinimleri

  • HIPAA uyumluluğunu gerektiren sağlık sistemleri
  • Denetim izleri gerektiren finansal hizmetler
  • Karartma seçeneğiyle yasal belge yönetimi
  • Güvenlik yönergelerine sahip hükümet uygulamaları

3. Karmaşık Belge İşleme

  • Çok formatlı belge dönüşümü (DOCX, HTML, Görseller)
  • Tarama belgeleri için OCR entegrasyonu
  • Paralel işlemeyle toplu işleme
  • Dijital imzalı belgeler

4. Platformlar Arası Dağıtım

  • Docker ile konteynerize edilmiş uygulamalar
  • Linux tabanlı bulut dağıtımları
  • Mikroservis mimarileri
  • Sunucusuz fonksiyonlar (AWS Lambda, Azure Functions)

Gerçek Dünya Örneği: Sağlık Raporu Oluşturma

public class HealthcareReportGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public HealthcareReportGenerator()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                DPI = 300, // High quality for medical imaging
                EnableJavaScript = true,
                RenderDelay = 3000, // Allow charts to fully render
                CreatePdfFormsFromHtml = true
            }
        };
    }

    public async Task<byte[]> GeneratePatientReport(PatientData patient)
    {
        // Generate HTML with patient data and charts
        var html = await GenerateReportHtml(patient);

        // Convert to PDF
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Apply security and compliance
        pdf.SecuritySettings = new SecuritySettings
        {
            AllowPrint = true,
            AllowCopy = false,
            EncryptionLevel = EncryptionLevel.AES256Bit,
            UserPassword = patient.AccessCode
        };

        // Redact SSN except last 4 digits
        pdf.RedactTextOnAllPages(@"\b\d{3}-\d{2}-(\d{4})\b", 
            replacement: "XXX-XX-$1", 
            isRegex: true);

        // Add audit metadata
        pdf.MetaData.Author = "Healthcare System";
        pdf.MetaData.Title = $"Patient Report - {patient.PatientId}";
        pdf.MetaData.CreationDate = DateTime.UtcNow;
        pdf.MetaData.CustomProperties.Add("HIPAA_Compliant", "true");

        // Add digital signature
        var signature = new PdfSignature("hospital-cert.pfx", "password")
        {
            SigningReason = "Medical Record Authenticity",
            SigningLocation = "Hospital Name"
        };
        pdf.Sign(signature);

        return pdf.BinaryData;
    }
}
public class HealthcareReportGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public HealthcareReportGenerator()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                DPI = 300, // High quality for medical imaging
                EnableJavaScript = true,
                RenderDelay = 3000, // Allow charts to fully render
                CreatePdfFormsFromHtml = true
            }
        };
    }

    public async Task<byte[]> GeneratePatientReport(PatientData patient)
    {
        // Generate HTML with patient data and charts
        var html = await GenerateReportHtml(patient);

        // Convert to PDF
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Apply security and compliance
        pdf.SecuritySettings = new SecuritySettings
        {
            AllowPrint = true,
            AllowCopy = false,
            EncryptionLevel = EncryptionLevel.AES256Bit,
            UserPassword = patient.AccessCode
        };

        // Redact SSN except last 4 digits
        pdf.RedactTextOnAllPages(@"\b\d{3}-\d{2}-(\d{4})\b", 
            replacement: "XXX-XX-$1", 
            isRegex: true);

        // Add audit metadata
        pdf.MetaData.Author = "Healthcare System";
        pdf.MetaData.Title = $"Patient Report - {patient.PatientId}";
        pdf.MetaData.CreationDate = DateTime.UtcNow;
        pdf.MetaData.CustomProperties.Add("HIPAA_Compliant", "true");

        // Add digital signature
        var signature = new PdfSignature("hospital-cert.pfx", "password")
        {
            SigningReason = "Medical Record Authenticity",
            SigningLocation = "Hospital Name"
        };
        pdf.Sign(signature);

        return pdf.BinaryData;
    }
}
Public Class HealthcareReportGenerator
	Private ReadOnly _renderer As ChromePdfRenderer

	Public Sub New()
		_renderer = New ChromePdfRenderer With {
			.RenderingOptions = New ChromePdfRenderOptions With {
				.DPI = 300,
				.EnableJavaScript = True,
				.RenderDelay = 3000,
				.CreatePdfFormsFromHtml = True
			}
		}
	End Sub

	Public Async Function GeneratePatientReport(ByVal patient As PatientData) As Task(Of Byte())
		' Generate HTML with patient data and charts
		Dim html = Await GenerateReportHtml(patient)

		' Convert to PDF
		Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)

		' Apply security and compliance
		pdf.SecuritySettings = New SecuritySettings With {
			.AllowPrint = True,
			.AllowCopy = False,
			.EncryptionLevel = EncryptionLevel.AES256Bit,
			.UserPassword = patient.AccessCode
		}

		' Redact SSN except last 4 digits
		pdf.RedactTextOnAllPages("\b\d{3}-\d{2}-(\d{4})\b", replacement:= "XXX-XX-$1", isRegex:= True)

		' Add audit metadata
		pdf.MetaData.Author = "Healthcare System"
		pdf.MetaData.Title = $"Patient Report - {patient.PatientId}"
		pdf.MetaData.CreationDate = DateTime.UtcNow
		pdf.MetaData.CustomProperties.Add("HIPAA_Compliant", "true")

		' Add digital signature
		Dim signature = New PdfSignature("hospital-cert.pfx", "password") With {
			.SigningReason = "Medical Record Authenticity",
			.SigningLocation = "Hospital Name"
		}
		pdf.Sign(signature)

		Return pdf.BinaryData
	End Function
End Class
$vbLabelText   $csharpLabel

EvoPdf'yi Ne Zaman Tercih Etmeli

EvoPdf şunlar için uygundur:

1. Basit HTML'den PDF Dönüşümü

  • Karmaşık JavaScript içermeyen temel raporlar
  • Durağan HTML şablonları
  • Basit faturalar ve makbuzlar
  • Tutarlı şablonlarla toplu belge oluşturma

2. Bütçe Dostu Ekipler

  • Tek bir lisansla sınırsız geliştirici
  • Temel özellikler için daha düşük giriş maliyeti
  • Gelişmiş PDF manipülasyonu gerektirmeyen projeler

3. Belirli Sunucu Ortamları

  • Windows merkezli dağıtımlar
  • Basit PDF gereksinimleri olan uygulamalar
  • Eski sistem entegrasyonu

4. Yüksek Hacimli Basit Dönüştürmeler

  • E-postadan PDF'e arşivleme
  • Statik rapor oluşturma
  • Belge sistemleri
  • Baskıya hazır belge oluşturma

Gerçek Dünya Örneği: Fatura Oluşturma Sistemi

public class InvoiceGenerator
{
    private readonly HtmlToPdfConverter _converter;

    public InvoiceGenerator()
    {
        _converter = new HtmlToPdfConverter
        {
            LicenseKey = "your-license-key",
            JavaScriptEnabled = false, // Not needed for static invoices
            ConversionDelay = 0
        };

        // Configure for A4 invoices
        _converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
        _converter.PdfDocumentOptions.TopMargin = 30;
        _converter.PdfDocumentOptions.BottomMargin = 30;
    }

    public byte[] GenerateInvoice(InvoiceData data)
    {
        // Load HTML template
        var template = File.ReadAllText("invoice-template.html");

        // Simple string replacement for data
        var html = template
            .Replace("{{InvoiceNumber}}", data.InvoiceNumber)
            .Replace("{{Date}}", data.Date.ToString("yyyy-MM-dd"))
            .Replace("{{CustomerName}}", data.CustomerName)
            .Replace("{{Total}}", data.Total.ToString("C"));

        // Convert to PDF
        return _converter.ConvertHtml(html, "");
    }
}
public class InvoiceGenerator
{
    private readonly HtmlToPdfConverter _converter;

    public InvoiceGenerator()
    {
        _converter = new HtmlToPdfConverter
        {
            LicenseKey = "your-license-key",
            JavaScriptEnabled = false, // Not needed for static invoices
            ConversionDelay = 0
        };

        // Configure for A4 invoices
        _converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
        _converter.PdfDocumentOptions.TopMargin = 30;
        _converter.PdfDocumentOptions.BottomMargin = 30;
    }

    public byte[] GenerateInvoice(InvoiceData data)
    {
        // Load HTML template
        var template = File.ReadAllText("invoice-template.html");

        // Simple string replacement for data
        var html = template
            .Replace("{{InvoiceNumber}}", data.InvoiceNumber)
            .Replace("{{Date}}", data.Date.ToString("yyyy-MM-dd"))
            .Replace("{{CustomerName}}", data.CustomerName)
            .Replace("{{Total}}", data.Total.ToString("C"));

        // Convert to PDF
        return _converter.ConvertHtml(html, "");
    }
}
Public Class InvoiceGenerator
	Private ReadOnly _converter As HtmlToPdfConverter

	Public Sub New()
		_converter = New HtmlToPdfConverter With {
			.LicenseKey = "your-license-key",
			.JavaScriptEnabled = False,
			.ConversionDelay = 0
		}

		' Configure for A4 invoices
		_converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4
		_converter.PdfDocumentOptions.TopMargin = 30
		_converter.PdfDocumentOptions.BottomMargin = 30
	End Sub

	Public Function GenerateInvoice(ByVal data As InvoiceData) As Byte()
		' Load HTML template
		Dim template = File.ReadAllText("invoice-template.html")

		' Simple string replacement for data
		Dim html = template.Replace("{{InvoiceNumber}}", data.InvoiceNumber).Replace("{{Date}}", data.Date.ToString("yyyy-MM-dd")).Replace("{{CustomerName}}", data.CustomerName).Replace("{{Total}}", data.Total.ToString("C"))

		' Convert to PDF
		Return _converter.ConvertHtml(html, "")
	End Function
End Class
$vbLabelText   $csharpLabel

Gelişmiş Uygulama Kalıpları ve En İyi Uygulamalar

Üretimde Performans Optimizasyonu

Her iki kütüphane de uygun yapılandırma ve kullanım kalıplarından faydalanır:

IronPDF Performans Optimizasyonu

public class OptimizedPdfService
{
    private readonly ChromePdfRenderer _renderer;
    private readonly SemaphoreSlim _semaphore;

    public OptimizedPdfService(int maxConcurrency = 4)
    {
        _semaphore = new SemaphoreSlim(maxConcurrency);

        _renderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                // Optimize for performance
                EnableJavaScript = false, // Only if not needed
                RenderDelay = 0,
                DPI = 150, // Balance quality vs speed
                CssMediaType = PdfCssMediaType.Screen,
                Timeout = 30,

                // Memory optimization
                OptimizeForLowMemory = true
            }
        };

        // Enable connection pooling
        Installation.ChromeGpuMode = ChromeGpuModes.Disabled;
        Installation.LinuxAndDockerDependenciesAutoConfig = false;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        await _semaphore.WaitAsync();
        try
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

            // Optimize file size
            pdf.CompressImages(85);
            pdf.RemoveUnusedResources();

            return pdf.BinaryData;
        }
        finally
        {
            _semaphore.Release();
        }
    }
}
public class OptimizedPdfService
{
    private readonly ChromePdfRenderer _renderer;
    private readonly SemaphoreSlim _semaphore;

    public OptimizedPdfService(int maxConcurrency = 4)
    {
        _semaphore = new SemaphoreSlim(maxConcurrency);

        _renderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                // Optimize for performance
                EnableJavaScript = false, // Only if not needed
                RenderDelay = 0,
                DPI = 150, // Balance quality vs speed
                CssMediaType = PdfCssMediaType.Screen,
                Timeout = 30,

                // Memory optimization
                OptimizeForLowMemory = true
            }
        };

        // Enable connection pooling
        Installation.ChromeGpuMode = ChromeGpuModes.Disabled;
        Installation.LinuxAndDockerDependenciesAutoConfig = false;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        await _semaphore.WaitAsync();
        try
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

            // Optimize file size
            pdf.CompressImages(85);
            pdf.RemoveUnusedResources();

            return pdf.BinaryData;
        }
        finally
        {
            _semaphore.Release();
        }
    }
}
Public Class OptimizedPdfService
	Private ReadOnly _renderer As ChromePdfRenderer
	Private ReadOnly _semaphore As SemaphoreSlim

	Public Sub New(Optional ByVal maxConcurrency As Integer = 4)
		_semaphore = New SemaphoreSlim(maxConcurrency)

		_renderer = New ChromePdfRenderer With {
			.RenderingOptions = New ChromePdfRenderOptions With {
				.EnableJavaScript = False,
				.RenderDelay = 0,
				.DPI = 150,
				.CssMediaType = PdfCssMediaType.Screen,
				.Timeout = 30,
				.OptimizeForLowMemory = True
			}
		}

		' Enable connection pooling
		Installation.ChromeGpuMode = ChromeGpuModes.Disabled
		Installation.LinuxAndDockerDependenciesAutoConfig = False
	End Sub

	Public Async Function GeneratePdfAsync(ByVal html As String) As Task(Of Byte())
		Await _semaphore.WaitAsync()
		Try
			Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)

			' Optimize file size
			pdf.CompressImages(85)
			pdf.RemoveUnusedResources()

			Return pdf.BinaryData
		Finally
			_semaphore.Release()
		End Try
	End Function
End Class
$vbLabelText   $csharpLabel

EvoPdf Performans Kalıpları

public class EvoPdfOptimizedService
{
    private readonly ObjectPool<HtmlToPdfConverter> _converterPool;

    public EvoPdfOptimizedService()
    {
        // Create object pool for converter reuse
        _converterPool = new DefaultObjectPool<HtmlToPdfConverter>(
            new ConverterPoolPolicy(), 
            Environment.ProcessorCount * 2);
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        var converter = _converterPool.Get();
        try
        {
            // Configure for speed
            converter.ConversionDelay = 0;
            converter.JavaScriptEnabled = false;

            // Use async pattern
            return await Task.Run(() => converter.ConvertHtml(html, ""));
        }
        finally
        {
            _converterPool.Return(converter);
        }
    }

    private class ConverterPoolPolicy : IPooledObjectPolicy<HtmlToPdfConverter>
    {
        public HtmlToPdfConverter Create()
        {
            return new HtmlToPdfConverter
            {
                LicenseKey = "your-license-key"
            };
        }

        public bool Return(HtmlToPdfConverter obj)
        {
            // Reset to default state
            obj.ConversionDelay = 2;
            return true;
        }
    }
}
public class EvoPdfOptimizedService
{
    private readonly ObjectPool<HtmlToPdfConverter> _converterPool;

    public EvoPdfOptimizedService()
    {
        // Create object pool for converter reuse
        _converterPool = new DefaultObjectPool<HtmlToPdfConverter>(
            new ConverterPoolPolicy(), 
            Environment.ProcessorCount * 2);
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        var converter = _converterPool.Get();
        try
        {
            // Configure for speed
            converter.ConversionDelay = 0;
            converter.JavaScriptEnabled = false;

            // Use async pattern
            return await Task.Run(() => converter.ConvertHtml(html, ""));
        }
        finally
        {
            _converterPool.Return(converter);
        }
    }

    private class ConverterPoolPolicy : IPooledObjectPolicy<HtmlToPdfConverter>
    {
        public HtmlToPdfConverter Create()
        {
            return new HtmlToPdfConverter
            {
                LicenseKey = "your-license-key"
            };
        }

        public bool Return(HtmlToPdfConverter obj)
        {
            // Reset to default state
            obj.ConversionDelay = 2;
            return true;
        }
    }
}
Public Class EvoPdfOptimizedService
	Private ReadOnly _converterPool As ObjectPool(Of HtmlToPdfConverter)

	Public Sub New()
		' Create object pool for converter reuse
		_converterPool = New DefaultObjectPool(Of HtmlToPdfConverter)(New ConverterPoolPolicy(), Environment.ProcessorCount * 2)
	End Sub

	Public Async Function GeneratePdfAsync(ByVal html As String) As Task(Of Byte())
		Dim converter = _converterPool.Get()
		Try
			' Configure for speed
			converter.ConversionDelay = 0
			converter.JavaScriptEnabled = False

			' Use async pattern
			Return Await Task.Run(Function() converter.ConvertHtml(html, ""))
		Finally
			_converterPool.Return(converter)
		End Try
	End Function

	Private Class ConverterPoolPolicy
		Implements IPooledObjectPolicy(Of HtmlToPdfConverter)

		Public Function Create() As HtmlToPdfConverter
			Return New HtmlToPdfConverter With {.LicenseKey = "your-license-key"}
		End Function

		Public Function [Return](ByVal obj As HtmlToPdfConverter) As Boolean
			' Reset to default state
			obj.ConversionDelay = 2
			Return True
		End Function
	End Class
End Class
$vbLabelText   $csharpLabel

Hata Yonetimi ve Hata Ayiklama

Üretim uygulamaları için sağlam hata yönetimi hayati önem taşır:

IronPDF Hata Yönetimi

public class RobustPdfGenerator
{
    private readonly ILogger<RobustPdfGenerator> _logger;
    private readonly ChromePdfRenderer _renderer;

    public async Task<Result<byte[]>> TryGeneratePdfAsync(string html)
    {
        try
        {
            // Enable detailed logging
            IronPdf.Logging.Logger.EnableDebugging = true;
            IronPdf.Logging.Logger.LogFilePath = "ironpdf.log";
            IronPdf.Logging.Logger.LoggingLevel = LoggingLevels.All;

            var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

            // Validate output
            if (pdf.PageCount == 0)
            {
                return Result<byte[]>.Failure("Generated PDF has no pages");
            }

            return Result<byte[]>.Success(pdf.BinaryData);
        }
        catch (IronPdf.Exceptions.IronPdfRenderException ex)
        {
            _logger.LogError(ex, "Rendering failed: {Message}", ex.Message);

            // Attempt fallback with simpler settings
            return await FallbackRender(html);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Unexpected error in PDF generation");
            return Result<byte[]>.Failure($"PDF generation failed: {ex.Message}");
        }
    }

    private async Task<Result<byte[]>> FallbackRender(string html)
    {
        var fallbackRenderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                EnableJavaScript = false,
                DPI = 96,
                Timeout = 60
            }
        };

        try
        {
            var pdf = await fallbackRenderer.RenderHtmlAsPdfAsync(html);
            return Result<byte[]>.Success(pdf.BinaryData);
        }
        catch (Exception ex)
        {
            return Result<byte[]>.Failure($"Fallback render failed: {ex.Message}");
        }
    }
}
public class RobustPdfGenerator
{
    private readonly ILogger<RobustPdfGenerator> _logger;
    private readonly ChromePdfRenderer _renderer;

    public async Task<Result<byte[]>> TryGeneratePdfAsync(string html)
    {
        try
        {
            // Enable detailed logging
            IronPdf.Logging.Logger.EnableDebugging = true;
            IronPdf.Logging.Logger.LogFilePath = "ironpdf.log";
            IronPdf.Logging.Logger.LoggingLevel = LoggingLevels.All;

            var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

            // Validate output
            if (pdf.PageCount == 0)
            {
                return Result<byte[]>.Failure("Generated PDF has no pages");
            }

            return Result<byte[]>.Success(pdf.BinaryData);
        }
        catch (IronPdf.Exceptions.IronPdfRenderException ex)
        {
            _logger.LogError(ex, "Rendering failed: {Message}", ex.Message);

            // Attempt fallback with simpler settings
            return await FallbackRender(html);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Unexpected error in PDF generation");
            return Result<byte[]>.Failure($"PDF generation failed: {ex.Message}");
        }
    }

    private async Task<Result<byte[]>> FallbackRender(string html)
    {
        var fallbackRenderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                EnableJavaScript = false,
                DPI = 96,
                Timeout = 60
            }
        };

        try
        {
            var pdf = await fallbackRenderer.RenderHtmlAsPdfAsync(html);
            return Result<byte[]>.Success(pdf.BinaryData);
        }
        catch (Exception ex)
        {
            return Result<byte[]>.Failure($"Fallback render failed: {ex.Message}");
        }
    }
}
Public Class RobustPdfGenerator
	Private ReadOnly _logger As ILogger(Of RobustPdfGenerator)
	Private ReadOnly _renderer As ChromePdfRenderer

	Public Async Function TryGeneratePdfAsync(ByVal html As String) As Task(Of Result(Of Byte()))
		Try
			' Enable detailed logging
			IronPdf.Logging.Logger.EnableDebugging = True
			IronPdf.Logging.Logger.LogFilePath = "ironpdf.log"
			IronPdf.Logging.Logger.LoggingLevel = LoggingLevels.All

			Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)

			' Validate output
			If pdf.PageCount = 0 Then
				Return Result(Of Byte()).Failure("Generated PDF has no pages")
			End If

			Return Result(Of Byte()).Success(pdf.BinaryData)
		Catch ex As IronPdf.Exceptions.IronPdfRenderException
			_logger.LogError(ex, "Rendering failed: {Message}", ex.Message)

			' Attempt fallback with simpler settings
			Return Await FallbackRender(html)
		Catch ex As Exception
			_logger.LogError(ex, "Unexpected error in PDF generation")
			Return Result(Of Byte()).Failure($"PDF generation failed: {ex.Message}")
		End Try
	End Function

	Private Async Function FallbackRender(ByVal html As String) As Task(Of Result(Of Byte()))
		Dim fallbackRenderer = New ChromePdfRenderer With {
			.RenderingOptions = New ChromePdfRenderOptions With {
				.EnableJavaScript = False,
				.DPI = 96,
				.Timeout = 60
			}
		}

		Try
			Dim pdf = Await fallbackRenderer.RenderHtmlAsPdfAsync(html)
			Return Result(Of Byte()).Success(pdf.BinaryData)
		Catch ex As Exception
			Return Result(Of Byte()).Failure($"Fallback render failed: {ex.Message}")
		End Try
	End Function
End Class
$vbLabelText   $csharpLabel

Sektör-Specifik Uygulama Örnekleri

Finansal Hizmetler: Yasal Uyumluluk

Finansal kurumlar uyumluluk için belirli özellikler gerektirir:

public class FinancialStatementGenerator
{
    public async Task<byte[]> GenerateQuarterlyReport(FinancialData data)
    {
        var renderer = new ChromePdfRenderer();

        // Generate report with charts and tables
        var html = await BuildFinancialReportHtml(data);
        var pdf = renderer.RenderHtmlAsPdf(html);

        // Add compliance watermark
        pdf.ApplyWatermark(@"
            <div style='text-align: center; color: rgba(0,0,0,0.1); font-size: 120px;
                        transform: rotate(-45deg); font-family: Arial;'>
                DRAFT
            </div>", 30, VerticalAlignment.Middle, HorizontalAlignment.Center);

        // Embed audit information
        pdf.MetaData.Author = "Financial Reporting System";
        pdf.MetaData.Keywords = "Quarterly Report, SOX Compliant";
        pdf.MetaData.CustomProperties.Add("ReportPeriod", data.Quarter);
        pdf.MetaData.CustomProperties.Add("GeneratedBy", Environment.UserName);
        pdf.MetaData.CustomProperties.Add("Timestamp", DateTime.UtcNow.ToString("O"));

        // Apply tamper-evident signature
        var cert = new X509Certificate2("financial-cert.pfx", "password");
        var signature = new PdfSignature(cert)
        {
            SigningReason = "Financial Report Certification",
            SigningLocation = "Corporate Finance Department",
            IsVisible = true,
            SignatureImage = new PdfSignatureImage("cfo-signature.png")
        };

        pdf.Sign(signature);

        // Lock document from editing
        pdf.SecuritySettings = new SecuritySettings
        {
            AllowModifyDocument = false,
            AllowCopy = true,
            AllowPrint = true,
            EncryptionLevel = EncryptionLevel.AES256Bit
        };

        return pdf.BinaryData;
    }
}
public class FinancialStatementGenerator
{
    public async Task<byte[]> GenerateQuarterlyReport(FinancialData data)
    {
        var renderer = new ChromePdfRenderer();

        // Generate report with charts and tables
        var html = await BuildFinancialReportHtml(data);
        var pdf = renderer.RenderHtmlAsPdf(html);

        // Add compliance watermark
        pdf.ApplyWatermark(@"
            <div style='text-align: center; color: rgba(0,0,0,0.1); font-size: 120px;
                        transform: rotate(-45deg); font-family: Arial;'>
                DRAFT
            </div>", 30, VerticalAlignment.Middle, HorizontalAlignment.Center);

        // Embed audit information
        pdf.MetaData.Author = "Financial Reporting System";
        pdf.MetaData.Keywords = "Quarterly Report, SOX Compliant";
        pdf.MetaData.CustomProperties.Add("ReportPeriod", data.Quarter);
        pdf.MetaData.CustomProperties.Add("GeneratedBy", Environment.UserName);
        pdf.MetaData.CustomProperties.Add("Timestamp", DateTime.UtcNow.ToString("O"));

        // Apply tamper-evident signature
        var cert = new X509Certificate2("financial-cert.pfx", "password");
        var signature = new PdfSignature(cert)
        {
            SigningReason = "Financial Report Certification",
            SigningLocation = "Corporate Finance Department",
            IsVisible = true,
            SignatureImage = new PdfSignatureImage("cfo-signature.png")
        };

        pdf.Sign(signature);

        // Lock document from editing
        pdf.SecuritySettings = new SecuritySettings
        {
            AllowModifyDocument = false,
            AllowCopy = true,
            AllowPrint = true,
            EncryptionLevel = EncryptionLevel.AES256Bit
        };

        return pdf.BinaryData;
    }
}
Public Class FinancialStatementGenerator
	Public Async Function GenerateQuarterlyReport(ByVal data As FinancialData) As Task(Of Byte())
		Dim renderer = New ChromePdfRenderer()

		' Generate report with charts and tables
		Dim html = Await BuildFinancialReportHtml(data)
		Dim pdf = renderer.RenderHtmlAsPdf(html)

		' Add compliance watermark
		pdf.ApplyWatermark("
            <div style='text-align: center; color: rgba(0,0,0,0.1); font-size: 120px;
                        transform: rotate(-45deg); font-family: Arial;'>
                DRAFT
            </div>", 30, VerticalAlignment.Middle, HorizontalAlignment.Center)

		' Embed audit information
		pdf.MetaData.Author = "Financial Reporting System"
		pdf.MetaData.Keywords = "Quarterly Report, SOX Compliant"
		pdf.MetaData.CustomProperties.Add("ReportPeriod", data.Quarter)
		pdf.MetaData.CustomProperties.Add("GeneratedBy", Environment.UserName)
		pdf.MetaData.CustomProperties.Add("Timestamp", DateTime.UtcNow.ToString("O"))

		' Apply tamper-evident signature
		Dim cert = New X509Certificate2("financial-cert.pfx", "password")
		Dim signature = New PdfSignature(cert) With {
			.SigningReason = "Financial Report Certification",
			.SigningLocation = "Corporate Finance Department",
			.IsVisible = True,
			.SignatureImage = New PdfSignatureImage("cfo-signature.png")
		}

		pdf.Sign(signature)

		' Lock document from editing
		pdf.SecuritySettings = New SecuritySettings With {
			.AllowModifyDocument = False,
			.AllowCopy = True,
			.AllowPrint = True,
			.EncryptionLevel = EncryptionLevel.AES256Bit
		}

		Return pdf.BinaryData
	End Function
End Class
$vbLabelText   $csharpLabel

E-Ticaret: Dinamik Fatura Oluşturma

E-ticaret platformları hızlı ve güvenilir fatura oluşturma ihtiyaçındadır:

public class EcommerceInvoiceService
{
    private readonly ChromePdfRenderer _renderer;

    public EcommerceInvoiceService()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                MarginTop = 10,
                MarginBottom = 10,
                PaperSize = PdfPaperSize.A4,
                DPI = 200 // High quality for barcodes
            }
        };
    }

    public async Task<byte[]> GenerateInvoice(Order order)
    {
        // Build invoice HTML with order details
        var html = $@"
        <html>
        <head>
            <style>
                @page {{ size: A4; margin: 0; }}
                body {{ font-family: Arial, sans-serif; }}
                .invoice-header {{ background: #f0f0f0; padding: 20px; }}
                .barcode {{ text-align: center; margin: 20px 0; }}
                table {{ width: 100%; border-collapse: collapse; }}
                th, td {{ padding: 10px; border-bottom: 1px solid #ddd; }}
            </style>
        </head>
        <body>
            <div class='invoice-header'>
                <h1>Invoice #{order.InvoiceNumber}</h1>
                <p>Date: {order.Date:yyyy-MM-dd}</p>
            </div>

            <div class='barcode'>
                <img src='data:image/png;base64,{GenerateBarcode(order.InvoiceNumber)}' />
            </div>

            <table>
                <tr>
                    <th>Item</th>
                    <th>Quantity</th>
                    <th>Price</th>
                    <th>Total</th>
                </tr>
                {string.Join("", order.Items.Select(item => $@"
                <tr>
                    <td>{item.Name}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.Price:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>"))}
                <tr>
                    <td colspan='3'><strong>Total</strong></td>
                    <td><strong>${order.Total:F2}</strong></td>
                </tr>
            </table>

            <div class='footer'>
                <p>Thank you for your business!</p>
                <p>Return policy and terms at: www.example.com/terms</p>
            </div>
        </body>
        </html>";

        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Add QR code for mobile payment verification
        var qrStamper = new ImageStamper($"https://api.qrserver.com/v1/create-qr-code/?data={order.PaymentId}")
        {
            HorizontalAlignment = HorizontalAlignment.Right,
            VerticalAlignment = VerticalAlignment.Bottom,
            Width = 100,
            Height = 100
        };

        pdf.ApplyStamp(qrStamper);

        return pdf.BinaryData;
    }
}
public class EcommerceInvoiceService
{
    private readonly ChromePdfRenderer _renderer;

    public EcommerceInvoiceService()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions = new ChromePdfRenderOptions
            {
                MarginTop = 10,
                MarginBottom = 10,
                PaperSize = PdfPaperSize.A4,
                DPI = 200 // High quality for barcodes
            }
        };
    }

    public async Task<byte[]> GenerateInvoice(Order order)
    {
        // Build invoice HTML with order details
        var html = $@"
        <html>
        <head>
            <style>
                @page {{ size: A4; margin: 0; }}
                body {{ font-family: Arial, sans-serif; }}
                .invoice-header {{ background: #f0f0f0; padding: 20px; }}
                .barcode {{ text-align: center; margin: 20px 0; }}
                table {{ width: 100%; border-collapse: collapse; }}
                th, td {{ padding: 10px; border-bottom: 1px solid #ddd; }}
            </style>
        </head>
        <body>
            <div class='invoice-header'>
                <h1>Invoice #{order.InvoiceNumber}</h1>
                <p>Date: {order.Date:yyyy-MM-dd}</p>
            </div>

            <div class='barcode'>
                <img src='data:image/png;base64,{GenerateBarcode(order.InvoiceNumber)}' />
            </div>

            <table>
                <tr>
                    <th>Item</th>
                    <th>Quantity</th>
                    <th>Price</th>
                    <th>Total</th>
                </tr>
                {string.Join("", order.Items.Select(item => $@"
                <tr>
                    <td>{item.Name}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.Price:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>"))}
                <tr>
                    <td colspan='3'><strong>Total</strong></td>
                    <td><strong>${order.Total:F2}</strong></td>
                </tr>
            </table>

            <div class='footer'>
                <p>Thank you for your business!</p>
                <p>Return policy and terms at: www.example.com/terms</p>
            </div>
        </body>
        </html>";

        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Add QR code for mobile payment verification
        var qrStamper = new ImageStamper($"https://api.qrserver.com/v1/create-qr-code/?data={order.PaymentId}")
        {
            HorizontalAlignment = HorizontalAlignment.Right,
            VerticalAlignment = VerticalAlignment.Bottom,
            Width = 100,
            Height = 100
        };

        pdf.ApplyStamp(qrStamper);

        return pdf.BinaryData;
    }
}
Public Class EcommerceInvoiceService
	Private ReadOnly _renderer As ChromePdfRenderer

	Public Sub New()
		_renderer = New ChromePdfRenderer With {
			.RenderingOptions = New ChromePdfRenderOptions With {
				.MarginTop = 10,
				.MarginBottom = 10,
				.PaperSize = PdfPaperSize.A4,
				.DPI = 200
			}
		}
	End Sub

	Public Async Function GenerateInvoice(ByVal order As Order) As Task(Of Byte())
		' Build invoice HTML with order details
, order.InvoiceNumbstring.Format(r, order.Date, GenerateBarcode(order.InvoiceNumber), String.Join(TangibleTempVerbatimDoubleQuote, order.Items.Select(Function(item) $TangibleTempVerbatimCloseTag"ignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignore<tr><td>{item.Name}</td><td>{item.Quantity}</td><td>${item.Price:F2}</td><td>${item.Total:F2}</td></tr>")), TangibleStringInterpolationMarker) var html = $"TangibleTempVerbatimOpenTagTangibleTempVerbatimStringLiteralLineJoin        <html>TangibleTempVerbatimStringLiteralLineJoin        <head>TangibleTempVerbatimStringLiteralLineJoin            <style>TangibleTempVerbatimStringLiteralLineJoin                @page {{ size: A4; margin: 0; }}TangibleTempVerbatimStringLiteralLineJoin                body {{ font-family: Arial, sans-serif; }}TangibleTempVerbatimStringLiteralLineJoin                .invoice-header {{ background: #f0f0f0; padding: 20px; }}TangibleTempVerbatimStringLiteralLineJoin                .barcode {{ text-align: center; margin: 20px 0; }}TangibleTempVerbatimStringLiteralLineJoin                table {{ width: 100%; border-collapse: collapse; }}TangibleTempVerbatimStringLiteralLineJoin                th, td {{ padding: 10px; border-bottom: 1px solid #ddd; }}TangibleTempVerbatimStringLiteralLineJoin            </style>TangibleTempVerbatimStringLiteralLineJoin        </head>TangibleTempVerbatimStringLiteralLineJoin        <body>TangibleTempVerbatimStringLiteralLineJoin            <div class='invoice-header'>TangibleTempVerbatimStringLiteralLineJoin                <h1>Invoice #{0}</h1>TangibleTempVerbatimStringLiteralLineJoin                <p>Date: {1:yyyy-MM-dd}</p>TangibleTempVerbatimStringLiteralLineJoin            </div>TangibleTempVerbatimStringLiteralLineJoinTangibleTempVerbatimStringLiteralLineJoin            <div class='barcode'>TangibleTempVerbatimStringLiteralLineJoin                <img src='data:image/png;base64,{2}' />TangibleTempVerbatimStringLiteralLineJoin            </div>TangibleTempVerbatimStringLiteralLineJoinTangibleTempVerbatimStringLiteralLineJoin            <table>TangibleTempVerbatimStringLiteralLineJoin                <tr>TangibleTempVerbatimStringLiteralLineJoin                    <th>Item</th>TangibleTempVerbatimStringLiteralLineJoin                    <th>Quantity</th>TangibleTempVerbatimStringLiteralLineJoin                    <th>Price</th>TangibleTempVerbatimStringLiteralLineJoin                    <th>Total</th>TangibleTempVerbatimStringLiteralLineJoin                </tr>TangibleTempVerbatimStringLiteralLineJoin                {3}ignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignoreignore<tr><td colspan='3'><strong>Total</strong></td><td><strong>${order.Total:F2}</strong></td></tr></table><div class='footer'><p>Thank you for your business!</p><p>Return policy and terms at: www.example.com/terms</p></div></body></html>"

		Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)

		' Add QR code for mobile payment verification
		Dim qrStamper = New ImageStamper($"https://api.qrserver.com/v1/create-qr-code/?data={order.PaymentId}") With {
			.HorizontalAlignment = HorizontalAlignment.Right,
			.VerticalAlignment = VerticalAlignment.Bottom,
			.Width = 100,
			.Height = 100
		}

		pdf.ApplyStamp(qrStamper)

		Return pdf.BinaryData
	End Function
End Class
$vbLabelText   $csharpLabel

Geçiş Stratejileri: Kütüphaneler Arasında Geçiş

Eğer kütüphaneler arasında geçiş düşünüyorsanız, işte bir geçiş yaklaşımı:

EvoPdf'den IronPDF'e Geçiş

// EvoPdf pattern
HtmlToPdfConverter evoPdfConverter = new HtmlToPdfConverter();
evoPdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
byte[] pdfBytes = evoPdfConverter.ConvertUrl(url);

// Equivalent IronPDF pattern
var ironPdfRenderer = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions
    {
        PaperSize = PdfPaperSize.A4
    }
};
var pdf = ironPdfRenderer.RenderUrlAsPdf(url);
byte[] pdfBytes = pdf.BinaryData;

// Migration wrapper for gradual transition
public interface IPdfConverter
{
    byte[] ConvertHtmlToPdf(string html);
    byte[] ConvertUrlToPdf(string url);
}

public class IronPdfAdapter : IPdfConverter
{
    private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] ConvertHtmlToPdf(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }

    public byte[] ConvertUrlToPdf(string url)
    {
        return _renderer.RenderUrlAsPdf(url).BinaryData;
    }
}

public class EvoPdfAdapter : IPdfConverter
{
    private readonly HtmlToPdfConverter _converter = new HtmlToPdfConverter();

    public byte[] ConvertHtmlToPdf(string html)
    {
        return _converter.ConvertHtml(html, "");
    }

    public byte[] ConvertUrlToPdf(string url)
    {
        return _converter.ConvertUrl(url);
    }
}
// EvoPdf pattern
HtmlToPdfConverter evoPdfConverter = new HtmlToPdfConverter();
evoPdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
byte[] pdfBytes = evoPdfConverter.ConvertUrl(url);

// Equivalent IronPDF pattern
var ironPdfRenderer = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions
    {
        PaperSize = PdfPaperSize.A4
    }
};
var pdf = ironPdfRenderer.RenderUrlAsPdf(url);
byte[] pdfBytes = pdf.BinaryData;

// Migration wrapper for gradual transition
public interface IPdfConverter
{
    byte[] ConvertHtmlToPdf(string html);
    byte[] ConvertUrlToPdf(string url);
}

public class IronPdfAdapter : IPdfConverter
{
    private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] ConvertHtmlToPdf(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }

    public byte[] ConvertUrlToPdf(string url)
    {
        return _renderer.RenderUrlAsPdf(url).BinaryData;
    }
}

public class EvoPdfAdapter : IPdfConverter
{
    private readonly HtmlToPdfConverter _converter = new HtmlToPdfConverter();

    public byte[] ConvertHtmlToPdf(string html)
    {
        return _converter.ConvertHtml(html, "");
    }

    public byte[] ConvertUrlToPdf(string url)
    {
        return _converter.ConvertUrl(url);
    }
}
' EvoPdf pattern
Dim evoPdfConverter As New HtmlToPdfConverter()
evoPdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4
Dim pdfBytes() As Byte = evoPdfConverter.ConvertUrl(url)

' Equivalent IronPDF pattern
Dim ironPdfRenderer = New ChromePdfRenderer With {
	.RenderingOptions = New ChromePdfRenderOptions With {.PaperSize = PdfPaperSize.A4}
}
Dim pdf = ironPdfRenderer.RenderUrlAsPdf(url)
Dim pdfBytes() As Byte = pdf.BinaryData

' Migration wrapper for gradual transition
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'public interface IPdfConverter
'{
'	byte[] ConvertHtmlToPdf(string html);
'	byte[] ConvertUrlToPdf(string url);
'}

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'public class IronPdfAdapter : IPdfConverter
'{
'	private readonly ChromePdfRenderer _renderer = New ChromePdfRenderer();
'
'	public byte[] ConvertHtmlToPdf(string html)
'	{
'		Return _renderer.RenderHtmlAsPdf(html).BinaryData;
'	}
'
'	public byte[] ConvertUrlToPdf(string url)
'	{
'		Return _renderer.RenderUrlAsPdf(url).BinaryData;
'	}
'}

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'public class EvoPdfAdapter : IPdfConverter
'{
'	private readonly HtmlToPdfConverter _converter = New HtmlToPdfConverter();
'
'	public byte[] ConvertHtmlToPdf(string html)
'	{
'		Return _converter.ConvertHtml(html, "");
'	}
'
'	public byte[] ConvertUrlToPdf(string url)
'	{
'		Return _converter.ConvertUrl(url);
'	}
'}
$vbLabelText   $csharpLabel

Sonuç: Projeniz İçin Doğru Seçimi Yapmak

Hem IronPDF hem de EvoPdf, .NET PDF kütüphane ekosisteminde önemli roller oynar, ancak farklı kullanım durumları ve geliştirme felsefelerini hedeflerler.

IronPDF'i şunlar için seçin:

  • Modern web standart desteği (CSS3, JavaScript çerçeveleri)
  • Sadece oluşturmanın ötesinde kapsamlı PDF manipülasyonu
  • Kurumsal güvenlik özellikleri ve uyum araçları
  • Platformlar arası dağıtım esnekliği
  • Kapsamlı dokümantasyon ve doğrudan mühendis desteği
  • Diğer belge işleme araçları ile entegrasyon

EvoPdf'yi şunlar için seçin:

  • Daha düşük maliyetli basit HTML'den PDF'e dönüştürme
  • Basit belgeler için temel PDF oluşturma
  • Büyük ekipler için sınırsız geliştirici lisansları
  • Basit HTML içeriğin daha hızlı işlenmesi
  • Windows merkezli dağıtım ortamı

Karar nihayetinde belirli gereksinimlerinize, bütçe kısıtlamalarınıza ve uzun vadeli ölçeklenebilirlik ihtiyaçlarınıza bağlıdır. Çoğu modern uygulama için sağlam PDF yetenekleri gerektiren IronPDF'in kapsamlı özellik seti ve üstün render motoru yatırımı haklı çıkarır. Ancak, EvoPdf, maliyetin birincil endişe olduğu daha basit kullanım durumları için geçerli bir seçenek olmaya devam eder.

Consider starting with the 30-day free trial of IronPDF to evaluate its capabilities in your specific use case. Deneme, tüm özellikleri sınırlamasız olarak içerir ve çevrenizdeki gerçek performansa dayalı bilinçli bir karar vermenizi sağlar.

Bir PDF kütüphanesinin gerçek maliyeti, lisans fiyatının ötesine geçer—geliştirme süresi, bakım süresi ve uygulamanız büyüdükçe ek özelliklere olan potansiyel ihtiyaçı da göz önünde bulundurun. Sadece mevcut ihtiyaçlarınızı karşılayan değil, gelecekteki gereksinimlerinizle de ölçeklenebilecek kütüphaneyi seçin.

Lütfen dikkate alinEvoPdf tescilli markası sahibinin mülkiyetindedir. Bu site EvoPdf ile bağlantılı, desteklenen veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerinin mülkiyetindedir. Karşılaştırmalar yalnızca bilgilendirme amaçlıdır ve yazım sırasında kamuya açık bilgileri yansıtır.

Sıkça Sorulan Sorular

HTML'yi bir .NET kütüphanesi kullanarak C#'ta PDF'ye nasıl dönüştürebilirim?

HTML dizgilerini PDF'lere dönüştürmek için IronPDF'nin RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca RenderHtmlFileAsPdf kullanarak HTML dosyalarının PDF'lere dönüştürülmesini de sağlayabilirsiniz.

Karmaşık JavaScript ve CSS'yi işlemek için en iyi .NET PDF kütüphanesi nedir?

IronPDF, karmaşık JavaScript ve CSS'yi ele almak için en iyi seçimdir çünkü tam bir Chrome V8 render motoru kullanır ve modern çerçeveleri destekleyerek %98+ tarayıcı uyumluluğu sağlar.

Hangi .NET PDF kütüphanesi daha iyi çapraz platform desteği sunuyor?

IronPDF, Windows, Linux, macOS ve Docker konteynerları için doğal uyumluluk sunarak daha üstün çapraz platform desteği sağlar ve sıfır yapılandırma ile dağıtıma izin verir.

IronPDF'nin güvenlik ve uyumluluk için anahtar özellikleri nelerdir?

IronPDF, AES-256 şifreleme, 15'ten fazla ayrıntılı izin ayarı, görsel dijital imzalar ve RedactTextOnAllPages() yöntemi kullanarak gerçek içerik düzenleme dahil olmak üzere kapsamlı güvenlik özellikleri sağlar.

Batch PDF işlemesini .NET'te verimli bir şekilde nasıl gerçekleştiririm?

IronPDF, native async/await optimizasyonu ve daha iyi bellek yönetimi sunarak büyük belgeleri verimli bir şekilde işlemek için batch PDF işlemesinde başarılıdır.

Hangi kütüphane geliştiriciler için daha iyi destek ve dokümantasyon sağlar?

IronPDF, 24/5 mühendislik desteği, kapsamlı API dokümantasyonu, 100+ örnek kod ve video eğitimleri ile önemli ölçüde geliştirme süresini azaltarak kapsamlı destek ve dokümantasyon sağlar.

Bir .NET kütüphanesi kullanarak DOCX dosyalarını PDF'ye dönüştürebilir miyim?

Evet, IronPDF'nin yerleşik DocxToPdfRenderer sınıfı aracılığıyla DOCX'ten PDF'ye dönüştürme özelliği vardır ve Word belgelerini biçimlendirmeyi koruyarak dönüştürmenize olanak tanır.

Modern web uygulamaları için IronPDF kullanmanın avantajları nelerdir?

IronPDF, dinamik içerik üretimi ve karmaşık belge işlemesi için uygun hale getiren Chrome tabanlı render motoru, kapsamlı PDF manipülasyonu özellikleri ve çapraz platform uyumluluğu sayesinde modern web uygulamaları için idealdir.

IronPDF, uyumluluk gereklilikleri için PDF düzenlemeyi nasıl ele alır?

IronPDF, GDPR ve HIPAA gibi gizlilik düzenlemelerine uyum sağlamak için regex tabanlı içerik çıkarma ve OCR tabanlı düzenleme dahil olmak üzere kapsamlı düzenleme yetenekleri sunar.

IronPDF, SaaS ve e-ticaret platformları için neden iyi bir seçimdir?

IronPDF, dinamik faturalar oluşturabilme, dijital imzaları destekleyebilme ve modern web teknolojileri ile sorunsuz entegrasyon sağlayabilmesi sayesinde SaaS ve e-ticaret platformları için uygun hale gelir.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

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