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

iTextSharp C# HTML to PDF Alternatifi için .NET Core

PDF işlevselliği gerektiren modern .NET uygulamaları geliştirirken, 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. .NET 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 kritik boyutlar üzerinde inceleyerek işleme doğruluğu, API tasarımı, performans ölçümleri, platform uyumluluğu ve toplam sahip olma maliyeti dahil olmak üzere çeşitli boyutlarda değerlendirmektedir. İster yüksek hacimli bir belge işleme sistemi kuruyor olun, ister uyum için dijital imzalar uyguluyor olun, ya da sadece HTML raporlarını PDF'ye dönüştürüyor olun, bu farkları anlamak, teknik gereksinimlerinize ve bütçe kısıtlamalarınıza uygun bilinçli bir karar vermenizi sağlar.

IronPDF ve EvoPdf İlk Bakışta Nasıl Karşılaştırılır?

Detaylı karşılaştırmalara dalmadan önce, işte .NET geliştiricileri için en çok önemli olan ana kategorilerde bu kütüphanelerin nasıl sıralandığına dair kapsamlı bir bakış:

Ürün Karşılaştırması Genel Bakış
.NET için PDF Oluşturma Konusunda .NET ve EvoPdf Karşılaştırması
Kategori Özellik/Aspect IronPDF EvoPdf Ana Avantaj
Çekirdek Mimari Tasarım Felsefesi Sadelik öncelikli, sezgisel API'lar Zengin özelliklere sahip, geleneksel PDF yaklaşımı IronPDF: Daha hızlı geliştirme
API Karmaşıklığı RenderHtmlAsPdf() gibi basit yöntemler Daha fazla kurulum gerektiren çoklu sınıf yaklaşımı IronPDF: Daha Basit API yüzeyi
Öğrenme Eğrisi Minimum kurulum gereklidir Daha fazla yapılandırma gereklidir IronPDF: Daha hızlı benimseme
Platform Desteği Çapraz Platform Yerel destek, ek yapılandırma yok Platforma özel 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 10, 9, 8, 7, 6, Standard 2.0+, Framework 4.0+ Her İkisi: Modern çerçeve desteği
İşletim Sistemleri Windows, Linux, macOS, Docker yerel Windows, Linux, macOS, Azure IronPDF: Docker için optimize edilmiştir
HTML'den PDF'e Renderleme Motoru Tam Chrome V8 motoru Özel HTML işleme motoru IronPDF: Yüksek tarayıcı sadakati
CSS3/HTML5 Desteği Tam destek Standart özellikler için iyi destek IronPDF: Modern web standartları
JavaScript Yürütme Bekleme ile tam JavaScript desteği İyi JavaScript desteği IronPDF: Dinamik içerik hazır
İşleme Hızı Karmaşık sayfalar ve JavaScript için optimize edilmiştir Basit statik HTML için hızlıdır Doküman karmaşıklığına bağlıdır
Security & Encryption Şifreleme Seviyeleri AES-256, özel işlemciler AES-256 standart Her ikisi de: Endüstri standardı
İzin Seçenekleri Ayrıntılı izin kontrolleri Standart izin seti IronPDF: Daha ince kontrol
Dijital İmzalar Entegre, görsel imzalar Temel imza desteği IronPDF: Daha basit imzalama
İçerik Manipülasyonu Yeniden Değerlendirme Yöntemi Gerçek içerik kaldırma, tek satırlık API Yerleşik gizleme yok IronPDF: Uyumlu
Filigranlama HTML/CSS tabanlı, tam stil Şablon bazlı filigranlar IronPDF: Zengin filigranlar
Damgalama Birleşik damga sınıfları Filigran özelliğiyle aynı IronPDF: Özel araçlar
Dosya Dönüştürmeleri DOCX'ten PDF'ye Dahili DocxToPdfRenderer Evo Word to PDF ($450+) gerektirir IronPDF: Ekstra maliyet yok
Geliştirici Deneyimi Kod Örnekleri 100+ çalışmaya hazır örnek Kod örnekleri mevcut IronPDF: Kapsamlı kaynaklar
Dokümantasyon Kılavuzlar, nasıl yapılır, videolar, API referansı API belgeleri ve örnekler IronPDF: Birden fazla öğrenme yolu
Hata Mesajları Açıklayıcı, eyleme geçirilebilir Standart hata raporlama IronPDF: Daha iyi hata ayıklama
Performans Ölçütleri Büyük Doküman İşleme Yüksek çıktılı toplu işleme Standart toplu işleme IronPDF: Daha iyi ölçeklenebilirlik
İş parçacığı desteği Yerel async/await optimizasyonu Çoklu iş parçacığı desteği IronPDF: Daha iyi ölçeklenebilirlik
Licensing & Pricing Giriş Seviyesi Lite: $999 (1 geliştirici, 1 proje) Dağıtım: $450 (1 sunucu, 1 uygulama) EvoPdf: Daha düşük ilk maliyet
Team License 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ı İçinde Dahil EvoPdf: Yerleşik yeniden dağıtım
Süit Seçeneği Iron Suite: $2,998 (10 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 İyi Kullanım Alanı Kullanım Durumları Modern web uygulamaları, karmaşık PDF'ler, uyumluluk Basit HTML to PDF, temel dönüşümler Bağlama bağlı
Not. EvoPdf, büyük ekipler için rekabetçi fiyatlar sunar. IronPDF, yerleşik redaksiyon ve belge dönüştürme desteği dahil daha kapsamlı işlevsellik sağlar.

IronPDF ve EvoPdf'i Anlamak: Temel Güçler ve Felsefe

.NET'yi .NET PDF Kütüphanesi Pazarında Öne Çıkaran Nedir?

.NET, geliştirme verimliliğini merkezine alan kapsamlı bir PDF çözümünü temsil eder. Basitlik temelinde güçten fedakarlık etmeden inşa edilmiş olan .NET, .NET geliştiricilerinin tanıdık web geliştirme desenlerini yansıtan sezgisel API'lerle PDF belgeleri oluşturmasını, düzenlemesini ve manipüle etmesini sağlar. Kütüphanenin öne çıkan özelliği, CSS3, JavaScript çerçeveleri ve web yazı tipleri dahil en son web standartlarını destekleyen Chrome tabanlı işleme motorudur, bu da piksel netliğinde HTML to PDF dönüşümünü sağlar.

Kütüphane, yüksek doğruluklu belge işleme, karmaşık PDF manipülasyonu ve kurumsal düzeyde güvenlik özellikleri gerektiren senaryolarda mükemmeldir. Kapsamlı özellik seti yalnızca temel PDF oluşturmayı değil, dijital imzalar, form doldurma, IronOCR üzerinden OCR entegrasyonu ve sorunsuz belge formatı dönüşümleri gibi ileri düzey yetenekleri de içerir. .NET, çapraz platform uyumluluğunu basit çerçeve desteğinin ötesinde genişletir ve Windows, Linux, macOS, Docker konteynerleri ve Azure ile AWS gibi bulut platformlarında yerel performans sunar.

EvoPdf PDF Oluşturma Farklı Bir Şekilde Nasıl Yaklaşıyor?

EvoPdf PDF manipülasyonuna daha geleneksel bir yaklaşım benimsemektedir, öncelikle HTML to PDF dönüşümüne odaklanmakta ve özelleştirme ve kontrol vurgusuyla hareket etmektedir. Kütüphane, geliştiricilere dönüştürme süreci üzerinde ayrıntılı kontrol sağlar, işleme parametrelerini, sayfa düzenlerini ve dönüşüm ayarlarını ince bir şekilde ayarlamaya olanak tanır. EvoPdf'in mimarisi, standart web-to-PDF dönüşüm senaryoları için güvenilir, tutarlı sonuçlar sağlamak üzere inşa edilmiştir.

EvoPdf, hafif ayak izi ve basit HTML belgeler için daha hızlı işleme hızıyla özellikle öne çıkar. Karmaşık JavaScript veya CSS3 özellikleri olmayan basit HTML sayfaları için, EvoPdf, düz belgelerin yüksek hacimli toplu işlemeleri için uygundur. Kütüphane ayrıca ASP.NET ortamlarında sunucu tarafı işleme için iyi destek sunar ve web uygulaması senaryoları için optimizasyonlar içerir.

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

IronPDF'in Modern Çapraz Platform Mimari

IronPDF, basit çerçeve desteğinin ötesine geçen sorunsuz çapraz platform uyumluluğu sunar. Kütüphane yerel olarak şurada ç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 App Service, Functions ve VMs
    • AWS Lambda ve EC2
  • Google Cloud Platform
    • Kubernetes konuşlandırmaları

IronPDF'i öne çıkaran, sıfır yapılandırma dağıtım modelidir. Birçok PDF kütüphanesinin ek bağımlılıklar veya çalışma zamanı kurulumlarına ihtiyaç duymasının aksine, IronPDF gerekli bileşenlerini NuGet paketine dahil eder. Bu kendi kendine yeterlidir ve dağıtım karmaşıklığını önemli ölçüde azaltır ve 'benim makinemde çalışıyor' gibi yaygın sorunları ortadan kaldırır.

EvoPdf'in Platform Gereksinimleri ve Sınırlamaları

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

  • .NET Framework Desteği:
    • .NET 10, 9, 8, 7 ve 6
  • .NET Standard 2.0+
  • .NET Framework 4.0+

  • Platform Düşünceleri:
    • Windows ortamları için birincil optimizasyon
    • Linux desteği ek yapılandırma gerektirir
    • macOS desteği .NET Core aracılığıyla
    • Bulut dağıtımı platforma özel ayarlamalar gerektirir

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

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

HTML to PDF Dönüşümü: İşleme Kalitesi ve Performans

Her iki kütüphanenin de en temel özelliği HTML to PDF dönüşümüdür, ancak yaklaşımları ve sonuçları önemli ölçüde farklılık gösterir.

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 bir dizi gelişmiş yetenek göstermektedir:

  • Chrome V8 JavaScript Motoru: Chart.js'yi tam olarak çalıştırarak dinamik görselleştirmeler sunar
  • Web Yazı Tipi Desteği: Google Fontlarını otomatik olarak indirir ve yerleştirir
  • Duyarlı İşleme: Yazdırma optimizasyonu için CSS medya sorgularına saygı gösterir
  • Yüksek DPI Desteği: 300 DPI'da yazdırma için hazır PDF'ler üretir
    • Otomatik Düzen: İçeriği sayfa sınırlarına akıllıca uydurur

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'in yaklaşımı, temel stil ve düzen için iyi destekle basit HTML dönüşümüne odaklanır. Standart HTML ve CSS'i iyi işlerken, CSS Grid, Flexbox animasyonları veya karmaşık JavaScript çerçeveleri gibi modern web özellikleriyle zorlanabilir.

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

Hassas belgelerle uğraşırken güvenlik esastır. Her iki kütüphane de şifreleme yetenekleri sunar, ancak farklı seviyelerde sofistikasyon ile.

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'in güvenlik uygulaması, kurumsal düzeyde özellikler sağlar:

  • Granüler İzinler: Tam olarak kullanıcıların neleri yapabileceğini ince ayarlayın.
  • Görsel Dijital İmzalar: İmza görüntülerini ve zaman damgalarını içerir
  • Metadata Koruma: Belge özelliklerini ve denetim izlerini güvence altına alır
  • Katmanlı 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, IronPDF'dekine kıyasla daha az gelişmiş olan temel belgeleri koruma için uygun güvenlik özellikleri sunar.

İçerik Gizleme: Uyum ve Gizlilik Koruması

Günümüzün gizlilik odaklı ortamında, PDF'lerden hassas bilgilerin kalıcı olarak kaldırılması yeteneği, GDPR, HIPAA ve CCPA gibi düzenlemelere uyum için önemlidir.

IronPDF Gizleme Ö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'in gizleme yetenekleri şunları içerir:

  • Gerçek İçerik Kaldırma: Metni sadece kaplamak yerine kalıcı olarak kaldırır
  • Desen Tanıma: Sosyal Güvenlik numaraları, kredi kartları, e-postalar için regex desteği
  • Görsel Gizleme Stilleri: Denetim izleri için özelleştirilebilir görünüm
  • OCR Entegrasyonu: Taralı belgelerdeki metin gizleme
  • Seçici Gizleme: Belirli sayfaları veya bölgeleri hedefle

IronPDF, yerleşik redaksiyon işlevselliğine sahiptir, GDPR, HIPAA ve CCPA gibi gizlilik düzenlemelerine uyum gerektiren uygulamalar için güçlü bir seçimdir.

Form Kullanımı: Etkileşimli PDF'ler Oluşturma

Her iki kütüphane de PDF formlarını destekler, ancak oluşturma ve manipülasyon 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'in form kullanım özellikleri:

  • Otomatik Form Oluşturma: HTML formlarını PDF formlarına dönüştürür
  • Programatik Manipülasyon: API aracılığıyla form alanlarını doldurma, okuma ve değiştirme
  • Alan Türleri: Metin, onay kutusu, radyo, açılır menü, imza alanları
  • Doğrulama: Alan özelliklerini ve kısıtlamalarını ayarlama
  • Form Düzleştirme: Doldurulmuş formları statik PDF'lere dönüştürme

Performans Karşılaştırmaları: Gerçek Dünya Senaryoları

Döküman karmaşıklığı ve kullanım senaryolarına göre performans özellikleri önemli ölçüde farklılık gösterir:

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

Senaryoya göre performans değerlendirmeleri:

  • Basit HTML: EvoPdf, hafif ağırlıklı statik belgeler için, daha hafif bir render motoruna sahip olması nedeniyle daha hızlı olma eğilimindedir
  • Karmaşık JavaScript: IronPDF daha güvenilir sonuçlar sağlar; EvoPdf dinamik içerik ile tutarsız çıktı üretebilir
  • Toplu İşleme: IronPDF, daha iyi yerleşik async/await paralelizasyon desteği sunar
  • Bellek Kullanımı: EvoPdf, daha düşük bellek taban çizgisine sahiptir; IronPDF, yüksek çıktılı iş yükleri için optimize edilmiştir
  • Büyük Belgeler: IronPDF, yüksek sayfa sayılarına sahip belgeleri optimize edilmiş toplu işlem ile yönetir

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

IronPDF Lisans Yapısı

IronPDF, telif ücretsiz yeniden dağıtım seçeneği ile birlikte Lite, Plus ve Professional lisanslar dahil çeşitli fiyatlandırma seçenekleri sunar. Lisans modeli, ekibinizin ve projelerinizin ihtiyaçlarına göre ölçeklenmek üzere tasarlanmıştır (Nisan 2026 itibariyle fiyatlandırma):

  • Lite License: $999

    • 1 geliştirici
    • 1 lokasyon
    • 1 proje
    • E-posta desteği
    • İdeal: Bireysel geliştiriciler, küçük projeler
  • Plus License: $1,499

    • 3 geliştirici
    • 3 lokasyon
    • 3 proje
    • E-posta, sohbet ve telefon desteği
    • İdeal: Küçük ekipler, birden fazla proje
  • Professional License: $2,999

    • 10 geliştirici
    • 10 lokasyon
    • 10 proje
    • Ekran paylaşımı ile öncelikli destek
    • İdeal: Orta ve büyük ekipler
  • Ek Seçenekler:
    • Telif ücretsiz yeniden dağıtım: +$2,999
    • 5 yıl destek ve güncellemeler: $1,999 (veya $999/yıl)
  • Iron Suite: $2,998 için tüm 10 Iron Software ürünleri.

EvoPdf Lisanslama Seçenekleri

EVO PDF Toolkit ve bağımsız HTML'den PDF'ye dönüştürücü, her biri İki lisans katmanı sunar — Dağıtım ve Şirket (Nisan 2026 itibariyle fiyatlandırma; güncel fiyatlandırmayı evopdf.com/buy.aspx adresinden doğrulayın):

  • Dağıtım Lisansı:
  • EVO HTML to PDF: $450
  • EVO PDF Toolkit: $650

    • Tek sunucu, tek uygulama
    • Redistribüsyon dahil değil
    • İlk yıl standart destek
  • Şirket Lisansı:
  • EVO HTML to PDF: $1,200
  • EVO PDF Toolkit: $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

Toplam Sahip Olma Maliyeti Analizi

Gerçek dünya senaryolarını inceleyerek gerçek maliyet etkilerini anlayalım:

Senaryo 1: 2 Geliştiricili Başlangıç

  • IronPDF Lite: $999 (tek geliştirici; 2 kişilik bir ekip için 2 lisans gerektirir)
  • EvoPdf Company: $1,200 (sınırsız geliştiriciyi kapsar)
  • Kazanan: Başlangıç ekip maliyeti için EvoPdf

Senaryo 2: Gelişen Ekip (5 Geliştirici, Çoklu Proje)

  • IronPDF Plus: $1,499 (3 geliştiriciye kadar kapsar, 5 için Professional gereklidir)
  • IronPDF Professional: $2,999
  • EvoPdf Company: $1,200
  • Kazanan: Takım ölçeklendirmesi için EvoPdf

Senaryo 3: Birden Fazla PDF Aracı Gerektiren Enterprise

  • .NET Professional + IronOCR + IronBarcode: birden fazla bireysel lisans
  • Iron Suite: $2,998 (tüm 10 ürün)
  • EvoPdf Toolkit + Ek Araçlar: $1,400+ araç başına
  • Kazanan: Kapsamlı ihtiyaçlar için Iron Suite

Senaryo 4: Yeniden Dağıtım İle SaaS Ürünü

  • IronPDF Professional + Yeniden Dağıtım: $2,999 + $2,999
  • EvoPdf Company: $1,200 (yeniden dağıtımı içerir)
  • Kazanan: Yeniden dağıtım senaryoları için EvoPdf

Modern CSS Çatılarının Seçiminizin Üzerindeki Etkisi Nedir?

PDF kitaplığı seçerken sıklıkla göz ardı edilen bir faktör, modern CSS çatısı desteğidir. Bootstrap, Tailwind CSS ve Foundation ile web geliştirmede öne çıkan bu çatılar, kütüphanenizin bu çerçeveleri işleme yeteneğinin doğrudan geliştirme verimliliğini ve çıktı kalitesini etkiler.

IronPDF: Kapsamlı Çatı Desteği

IronPDF'nin tam Chrome V8 motoru, modern CSS çatısı için ödünsüz 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 bir şekilde görüntülenir
  • Modern CSS3: Dönüşümler, animasyonlar, özel özellikler tamamen desteklenir
  • Üretim doğrulama: Bootstrap ana sayfasını ve Bootstrap şablonlarını başarıyla işler

Kod Örneği: Bootstrap Zaman Çizgisi 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: Kısıtlamalarla İyi CSS Desteği

EvoPdf'nin özel HTML işleme motoru, bazı modern çatı kısıtlamalarıyla sağlam CSS desteği sağlar:

  • Bootstrap 3: Eski Bootstrap sürümleriyle genellikle iyi çalışır
  • Bootstrap 4+: Flexbox düzenleri ayarlamalar gerektirebilir
  • CSS3 desteği: İyi kapsama (~%90) ancak tam değil
  • Mümkün çözümler: Karmaşık düzenler için genellikle manuel CSS ayarlamaları gerekir

Pratik Hususlar:

Geliştirici deneyimine göre:

  • Temel Bootstrap bileşenleri (düğmeler, uyarılar, tablolar) genellikle doğru şekilde işler
  • Gelişmiş bileşenler (navigasyon çubukları, modüller, karmaşık gridler) özelleştirme gerektirebilir
  • CSS Grid düzenleri test ve potansiyel yedekler gerektirir
  • Özel Bootstrap temaları bazen beklenmedik işleme sorunlarına neden olabilir

Geliştirme Etkisi: Eğer uygulamanız UI'sı için Bootstrap'i yoğun şekilde kullanıyorsa ve web arayüzünüzle eşleşen raporlar veya belgeler oluşturmanız gerekiyorsa, IronPDF'nin sorunsuz render işlemi, önemli ölçüde geliştirme zamanı kazandırır. EvoPdf, şablonlarınızın PDF oluşturma işlemi için ayrı, basitleştirilmiş sürümlerinin oluşturulmasını gerektirebilir.

CSS çatı 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 Verir?

IronPDF'nin Geliştirici Kaynakları

IronPDF, kapsamlı dokümantasyon, 24/5 mühendislik 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: Tipik olarak 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ığı
  • Öğrenme Kaynakları:
    • Başlangıç kılavuzları
    • Mimari dokümantasyon
    • Performans optimizasyonu kılavuzları
    • Güvenlik en iyi uygulamaları
    • Bulut dağıtım kılavuzları

EvoPdf'nin Destek Yapısı

EvoPdf, dokümantasyon ve destek şu şekilde sağlar:

  • Dokümantasyon:

    • API referans dokümantasyonu
    • Yaygın senaryolar için kod örnekleri
    • Web sitesinde 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 katmanları
    • Topluluk yardımı için destek forumu
    • İlk yıldan sonra yenileme gereklidir

Ana ayırt edici fark, IronPDF'nin eğiticisel içeriğe ve doğrudan mühendislik desteğine yaptığı yatırımdır. Bu da öğrenme eğrisini ve sorun giderme süresini önemli ölçüde azaltır.

Her Kütüphane için En İyi Kullanım Senaryoları Nelerdir?

IronPDF Seçmek Ne Zaman Uygundur

IronPDF, aşağıdaki senaryolarda mükemmel performans gösterir:

1. Modern Web Uygulaması Entegrasyonu

  • Dinamik raporlar üreten SaaS platformları
  • Grafiklerle birlikte faturalar oluşturan e-ticaret siteleri
  • PDF'ler olarak ihraç edilen iş zekası panoları
  • React, Angular veya Vue.js kullanan uygulamalar

2. Uyum ve Güvenlik Gereksinimleri

  • HIPAA uyumu gerektiren sağlık sistemleri
  • Denetim izleri isteyen finansal hizmetler
  • Düzenleme ile yasal belge yönetimi
  • Güvenlik emirleri olan hükümet uygulamaları

3. Karmaşık Belge İşleme

  • Çok formatlı belge dönüşümü (DOCX, HTML, Görüntüler)
  • Tarama yapılan belgeler için OCR entegrasyonu
  • Paralel yürütme ile toplu işleme
  • Dijital imzalar bulunan belgeler

4. Çapraz Platform Dağıtımı

  • Docker konteynerize edilmiş uygulamalar
  • Linux tabanlı bulut dağıtımları
  • Mikro hizmet mimarileri
  • Sunucusuz işlevler (AWS Lambda, Azure İşlevleri)

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'i Ne Zaman Seçmelisiniz

EvoPdf şu durumlar için uygundur:

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

  • Karmaşık JavaScript içermeyen temel raporlar
  • Statik HTML şablonları
  • Basit faturalar ve makbuzlar
  • Tutarlı şablonlarla toplu belge üretimi

2. Bütçe Bilincine Sahip 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üşümler

  • E-posta'dan PDF'e arşivleme
  • Statik rapor üretimi
  • Belgeleme sistemleri
  • Baskıya hazır belge oluşturma

Gerçek Dünya Örneği: Fatura Üretim 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 Desenleri ve En İyi Uygulamalar

Üretimde Performansı Optimize Etme

Her iki kütüphane de doğru yapılandırma ve kullanım desenlerinden 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 Desenleri

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 İşleme ve Hata Ayıklama

Ü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

Endüstri Özelinde Uygulama Örnekleri

Finansal Hizmetler: Düzenleyici Uyumluluk

Finansal kuruluşlar 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 üretimine ihtiyaç duyar:

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;
    }
}
Imports System.Threading.Tasks

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 ' High quality for barcodes
            }
        }
    End Sub

    Public Async Function GenerateInvoice(order As Order) As Task(Of Byte())
        ' Build invoice HTML with order details
        Dim html As String = $"
        <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(Function(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>"

        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ş Yapmak

Kütüphaneler arasında geçiş yapmayı düşünüyorsanız, işte bir geçiş yaklaşımı:

EvoPdf'den IronPDF'ye Geçiş Yapmak

// 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 .NET hem de EvoPdf, .NET PDF kütüphane ekosisteminde önemli roller oynar, ancak farklı kullanım durumlarını ve geliştirme felsefelerini hedef alırlar.

IronPDF'yi şunlara ihtiyaç duyduğunuzda seçin:

  • Modern web standardı desteği (CSS3, JavaScript çatıları)
  • Sadece oluşturmanın ötesinde kapsamlı PDF manipulasyonu
  • Kurumsal güvenlik özellikleri ve uyum araçları
  • Çapraz platform dağıtım esnekliği
  • Kapsamlı dokümantasyon ve doğrudan mühendislik desteği
  • Diğer belge işlem araçlarıyla entegrasyon

EvoPdf'yi şunlara ihtiyaç duyduğunuzda seçin:

  • Daha düşük maliyetle basit HTML-PDF dönüşümü
  • Düz belgeler için temel PDF üretimi
  • Büyük ekipler için sınırsız geliştirici lisansları
  • Basit HTML içeriğinin daha hızlı işlenmesi
  • Windows merkezli dağıtım ortamı

Karar, nihayetinde özel 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'nin kapsamlı özellik seti ve Chrome tabanlı render motoru güçlü bir yatırım yapar. Ancak, EvoPdf, maliyetin birincil endişe olduğu daha basit kullanım durumları için geçerli bir seçenek olmaya devam eder.

IronPDF'in 30 günlük ücretsiz deneme süresi ile yeteneklerini belirli kullanımı senaryolarınızda değerlendirmeyi düşünün. Deneme sürümü, IronPDF özelliklerine erişim sağlar ve bu, ortamınızdaki gerçek performansa dayalı olarak bilinçli bir karar vermenizi sağlar.

Bir PDF kütüphanesinin gerçek maliyetinin lisans fiyatının ötesine geçtiğini unutmayın – geliştirme zamanı, bakım yükü ve uygulamanız büyüdükçe ilave özellikler gereksinimini de hesaba katın. Yalnızca mevcut ihtiyaçlarınızı karşılamakla kalmayıp aynı zamanda gelecekteki gereksinimlerinizle de ölçeklenebilecek kütüphaneyi seçin.

[EvoPdf, ait olduğu respektif sahibinin tescilli ticari markasıdır. Bu site EvoPdf ile bağlantılı, onaylı veya desteklenmemektedir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.)}]

Sıkça Sorulan Sorular

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

HTML dizgilerini PDF'lere dönüştürmek için IronPDF'ün RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca, HTML dosyalarını RenderHtmlFileAsPdf kullanarak PDF'lere dönüştürebilirsiniz.

Karmaşık JavaScript ve CSS'yi ele alabilecek en iyi .NET PDF kütüphanesi hangisidir?

IronPDF, tam Chrome V8 işleme motoru kullandığı için karmaşık JavaScript ve CSS'yi ele almak için en iyi seçimdir, React ve Angular gibi modern çerçeveleri destekleyerek %98+ tarayıcı uyumluluğu sağlar.

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

IronPDF, Windows, Linux, macOS ve Docker kapsayıcıları için yerel uyumluluk ile üstün çapraz platform desteği sunar, sıfır-yapılandırma dağıtımına izin verir.

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

IronPDF, AES-256 şifreleme, 15+ ayrıntılı izin ayarı, görsel dijital imzalar ve RedactTextOnAllPages() yöntemi kullanarak gerçek içerik silme gibi kapsamlı güvenlik özellikleri sunar.

Toplu PDF işlemini .NET'te verimli bir şekilde nasıl gerçekleştirebilirim?

IronPDF, yerel async/await optimizasyonu ve daha iyi bellek yönetimi sunarak, büyük belgeleri verimli bir şekilde işlemek için uygun hale gelerek, toplu PDF işleminde üstünlük sağlar.

Hangi kütüphane geliştiriciler için daha iyi destek ve belgeler sunar?

IronPDF, 24/5 mühendislik desteği, kapsamlı API belgeleri, 100+ kod örneği ve video eğitimleri ile kapsamlı destek ve belgeler sunarak, geliştirme süresini önemli ölçüde azaltır.

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

Evet, IronPDF yerleşik DOCX'ten PDF'e dönüştürme özelliği içerir, DocxToPdfRenderer sınıfı aracılığıyla, formatı koruyarak Word belgelerini dönüştürmenize olanak tanır.

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

IronPDF, Chrome tabanlı işleme motoru, kapsamlı PDF manipülasyon özellikleri ve çapraz platform uyumluluğu sayesinde, dinamik içerik üretme ve karmaşık belge işleme için modern web uygulamaları için idealdir.

IronPDF, uyumluluk gereksinimleri için PDF sansürlemeyi nasıl gerçekleştirir?

IronPDF, regex tabanlı içerik kaldırma ve OCR tabanlı sansürleme de dahil olmak üzere kapsamlı sansürleme yetenekleri sunar, GDPR ve HIPAA gibi gizlilik düzenlemelerine uyumu sağlar.

IronPDF'yi SaaS ve e-ticaret platformları için iyi bir seçim yapan nedir?

IronPDF, dinamik fatura oluşturma, dijital imzalarla destek ve modern web teknolojileriyle sorunsuz entegrasyon sağlama yeteneği nedeniyle SaaS ve e-ticaret platformları için uygundur.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ...

Daha Fazla Oku

Iron Destek Ekibi

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