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ış:
| 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ı |
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")
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)
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")
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")
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")
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")
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
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")
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:
- Kapsamlı API Referansı
- Adım adım eğitimler
- 100+ kod örneği
- YouTube'da video eğitimler İzleyin
- Diğer kütüphanelerden geçiş kılavuzları
-
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
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
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
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
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
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
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
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);
' }
'}
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.



