ActivePDF vs IronPDF: HTML to PDF Eğitimi ve Kapsamlı Karşılaştırma
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Aspose PDF on pricing, HTML support, and licensing.
.NET ve Aspose.PDF for .NET, C# uygulamalarında PDF işlemleri için iki güçlü yaklaşımı temsil eder. .NET, sadeliği ve modern web standartlarına desteği vurgulayarak, HTML, CSS3 ve JavaScript'i doğrudan yüksek kaliteli PDF'lere dönüştüren yalın API'ler sunar. Aspose.PDF, kapsamlı özelleştirme seçenekleri sunan, kurumsal düzeyde doküman işleme için tasarlanmış kapsamlı bir araç seti sağlar.
Temel fark, tasarım felsefelerinde yatmaktadır. IronPDF, RenderHtmlAsPdf() gibi sezgisel yöntemlerle geliştirici verimliliğine odaklanır ve minimum kod gerektirir. Aspose.PDF, daha karmaşık bir API yapısı aracılığıyla ayrıntılı kontrol sağlar, bu da onu özel belge iş akışları için uygun hale getirir ancak daha fazla uygulama çabası gerektirir.
.NET ve Aspose.PDF for .NET Arasındaki Temel Farklar Nelerdir?
Konuyu hızlıca özetlemek isteyenleriniz için, bu makalede tartışılan IronPDF ve Aspose.PDF arasındaki tüm ana ayrılık noktalarını özetleyen kapsamlı bir tablo aşağıda bulunmaktadır:
| Kategori | Özellik/Boyut | IronPDF | Aspose.PDF | Ana Avantaj |
|---|---|---|---|---|
| Çekirdek Mimari | Tasarım Felsefesi | Sadelik öncelikli, sezgisel API'lar | Enterprise odaklı, detaylı kontrol | IronPDF: Daha hızlı geliştirme |
| API Karmaşıklığı | RenderHtmlAsPdf() gibi basit yöntemler |
Çok sınıflı yaklaşım, manuel kurulum | IronPDF: %70 daha az kod | |
| Öğrenme Eğrisi | 1-2 gün tipik | 1-2 hafta tipik | IronPDF: Daha hızlı benimseme | |
| Platform Desteği | Çapraz Platform | Yerel destek, ek paket yok | Aspose.Pdf.Drawing paketi 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+ | Drawing paketi ile benzer destek | Her İkisi: Modern çerçeve desteği | |
| İşletim Sistemleri | Windows, Linux, macOS, Docker yerel | Her platform için yapılandırma gerektirir | IronPDF: Gerçek yaz-bir-kez dağıt | |
| Bulut Platformları | Azure/AWS optimize edilmiş | Standart destek | IronPDF: Bulut hazır | |
| HTML'den PDF'e | Renderleme Motoru | Tam Chrome V8 motoru | Özel HTML ayrıştırıcı | IronPDF: %98+ tarayıcı uyumluluğu |
| CSS3/HTML5 Desteği | Tam destek | Sınırlı (%70-80 uyumluluk) | IronPDF: Modern web standartları | |
| JavaScript Yürütme | Tam JavaScript desteği | Temel/Sınırlı | IronPDF: Dinamik içerik | |
| Web Yazı Tipleri | Google Yazı Tipleri, sistem yazı tipleri | Yalnızca gömülü yazı tipleri | IronPDF: Tipografi esnekliği | |
| İşleme Hızı | 0,8-1,2s tipik | 0,3-0,5s tipik | Aspose: Basit HTML için daha hızlı | |
| Bellek Kullanımı | 150-200 MB (Chrome motoru) | 80-120 MB | Aspose: Daha düşük bellek | |
| Security & Encryption | Şifreleme Seviyeleri | AES-256, özel işlemciler | AES-256 standart | Her ikisi de: Endüstri standardı |
| İzin Seçenekleri | 15+'den fazla ayrıntılı izin | 8 temel izin | IronPDF: Daha ince kontrol | |
| API Basitliği | Tek SecuritySettings sınıfı |
Birden fazla sınıf gereklidir | IronPDF: Birleştirilmiş yaklaşım | |
| Dijital İmzalar | Entegre, görsel imzalar | Manuel alan oluşturma | IronPDF: Daha basit imzalama | |
| Sertifika Desteği | PKCS#11, HSM desteği | Benzer ancak daha fazla kurulum | Her ikisi de: Enterprise PKI | |
| İçerik Manipülasyonu | Yeniden Değerlendirme Yöntemi | Gerçek içerik kaldırma, tek satırlık API | Açıklama tabanlı, çok adımlı | IronPDF: Uyumlu |
| Yeniden Değerlendirme Performansı | 1000 sayfa: ~2 dakika | 1000 sayfa: ~6 dakika | IronPDF: 3 kat daha hızlı | |
| Filigranlama | HTML/CSS tabanlı, tam stil | Sadece TextStamp, sınırlı stil | IronPDF: Zengin filigranlar | |
| Damgalama | Birleşik damga sınıfları | Ayrı damga türleri | IronPDF: Tutarlı API | |
| Toplu İşlemler | Optimize edilmiş paralel işleme | Standart döngüler | IronPDF: %40 daha hızlı toplu işlemler | |
| Dosya Dönüştürmeleri | DOCX'ten PDF'ye | Dahili DocxToPdfRenderer |
Aspose.Words gerektirir ($1,199) | IronPDF: Ekstra maliyet yok |
| Excel Desteği | HTML/CSV işleme yoluyla | Aspose.Cells gerektirir ($1,199) | IronPDF: İçeriğin İşlevselliği | |
| PDF'ten HTML'ye | Stil ile desteklenir | Desteklenir, temel çıktı | Her ikisi de: İşlevsel | |
| Markdown Desteği | HTML dönüşümü yoluyla | Desteklenmiyor | IronPDF: Daha fazla format | |
| Performans Ölçütleri | Büyük Doküman İşleme | 1000 sayfa/dk filigran | 600 sayfa/dk filigran | IronPDF: %40 daha hızlı |
| İş parçacığı desteği | Yerel async/await optimizasyonu | Standart iş parçacığı | IronPDF: Daha iyi ölçeklenebilirlik | |
| Bellek Verimliliği | Optimize edilmiş önbellek | Standart bellek kullanımı | IronPDF: Daha büyük toplu işlemleri yönetir | |
| Geliştirici Deneyimi | Kod Örnekleri | 100+ çalışmaya hazır örnek | Temel örnekler | IronPDF: Kapsamlı kaynaklar |
| Dokümantasyon | Eğitimler, nasıl yapılır, videolar | Geleneksel API dökümanları | IronPDF: Birden fazla öğrenme yolu | |
| IntelliSense | Tam IntelliSense desteği | Standart destek | Her İkisi: IDE entegrasyonu | |
| Hata Mesajları | Açıklayıcı, eyleme geçirilebilir | Teknik mesajlar | IronPDF: Daha iyi hata ayıklama | |
| Licensing & Pricing | Giriş Seviyesi | Lite: $999 (1 geliştirici, 1 proje) | Küçük İşletme: {{Aspose_pdf.small_business}}/yıl'dan itibaren (1 geliştirici, 1 yer) | IronPDF: Daha uygun maliyetli giriş |
| Team License | Plus: $1,499 (3 geliştirici, 3 proje) | OEM: $5,037 (1 geliştirici, sınırsız konum) | IronPDF: Daha iyi ekip değeri | |
| Enterprise | Professional: $2,999 (10 geliştirici, 10 proje) | SDK: $33,580 (1 geliştirici, 50 dağıtım) | IronPDF: %91 daha düşük maliyet | |
| Ek Ürünler | Tek bir lisansa dahil | Ayrı lisanslar gereklidir | IronPDF: Her şey dahil | |
| Yeniden Dağıtım | +$2,999 telif ücretsiz | Dahil ancak sınırlı dağıtımlar | IronPDF: Daha net koşullar | |
| Süit Seçeneği | Iron Suite: $2,998 (10 ürün) | Süit seçeneği yok | IronPDF: Olağanüstü değer | |
| Destek | Destek Dahil | Evet, 24/5 mühendislik desteği | Sadece forum (ücretli destek +{{Aspose_pdf.paid_support}}/yıl) | IronPDF: Destek dahil |
| Yanıt Süresi | 24-48 saat tipik | Kademeye göre değişir | IronPDF: Öngörülebilir SLA | |
| Destek Kanalları | E-posta, sohbet, telefon, ekran paylaşımı | Forum, ücretli e-posta/telefon | IronPDF: Daha fazla kanal | |
| Doğrudan Mühendislik Erişimi | Evet | Destek seviyeleri aracılığıyla | IronPDF: Uzman yardımı | |
| Özel Özellikler | Barkod Entegrasyonu | HTML/JavaScript yoluyla | Dahili değil | IronPDF: Barkod desteği |
| QR Kod Desteği | IronQR entegrasyonu yoluyla | Özel uygulama gerektirir | IronPDF: Yerel QR kodları | |
| OCR Yetenekleri | Via IronOCR entegrasyonu | Aspose.OCR gerektirir | IronPDF: Entegre paket | |
| Yazdırma Optimizasyonu | IronPrint entegrasyonu yoluyla | Standart yazdırma | IronPDF: Gelişmiş yazdırma | |
| Toplam Maliyet (Tipik Enterprise) | PDF + DOCX + Excel | $2,999 (Professional) | $5,037+ (birden fazla ürün) | IronPDF: %68 maliyet tasarrufu |
| Suite Seçeneği ile | $2,998 (10 ürün) | Mevcut değil | IronPDF: Bireysel yerine %70 tasarruf | |
| En İyi Kullanım Alanı | Kullanım Durumları | Modern web uygulamaları, hızlı geliştirme, maliyet bilincine sahip ekipler | Eski sistemler, belirli işletme ihtiyaçları | IronPDF: Çoğu senaryo |
| Ekip Büyüklüğü | 1-10+ geliştirici | Özel kaynaklara sahip büyük işletmeler | IronPDF: Ölçeklenebilir lisanslama | |
| Proje Türleri | SaaS, web uygulamaları, belge otomasyonu | Karmaşık form işleme, XFA formları | Bağlama bağlı |
PDF Kütüphane Yeteneklerinin Özeti
.NET, .NET geliştiricileri için verimli belge oluşturmayı hedefleyen kapsamlı bir PDF kütüphanesi sunar. Kütüphane, HTML, ASPX ve URL'ler gibi çeşitli kaynaklardan PDF belgeleri oluşturma, düzenleme ve işleme konularında ustadır.
Gücü, modern web standartları—CSS3, HTML5 ve JavaScript—için yerel destek sağlamasında yatar ve minimum yapılandırmayla piksel mükemmelliğinde PDF işleme sağlar. Kütüphanenin mimarisi, karmaşık işlemleri dahili olarak ele alan özlü API'ler aracılığıyla geliştirici deneyimini önceliklendirir.
Aspose.PDF .NET için, karmaşık PDF dosya manipülasyonu yapabilen sofistike bir belge işleme API'si olarak çalışır. Kütüphane, geliştiricilerin WinForms, WPF, ASP.NET ve .NET Core uygulamaları genelinde PDF dosyaları oluşturmasına, üzerinde değişiklik yapmasına ve dönüştürmesine olanak tanır.
Tamamen yönetilen C# ile yazılmış olan Aspose.PDF, gelişmiş belge işlemleri gerektiren işletme uygulamaları için mimari esneklik ve ham performansı vurgular, karmaşık form işleme ve belge montajı gibi işlemler de bunlara dahildir.
Çapraz Platform Yetenekleri Nasıl Karşılaştırılır?
IronPDF, ek paketler olmadan yerel çapraz platform uyumluluğu sağlar, Windows, Linux, macOS, Docker, Azure ve AWS ortamlarını sorunsuz olarak destekler. Kütüphane, platform-specifik uygulamaları ortadan kaldırarak, birleşik kod tabanı aracılığıyla platformlar arasında tutarlı davranış sağlar.
Aspose.PDF'nin çapraz platform işlevselliği, dağıtım senaryolarına karmaşıklık ekleyen ayrı bir Aspose.Pdf.Drawing paketi gerektirir. Bu mimari karar, özellikle kapsayıcı ortamlarda, proje yapılandırmasını ve bağımlılık yönetimini etkiler.
IronPDF Platform Desteği Ayrıntıları
IronPDF'nin geniş uyumluluk matrisi şunları içerir:
- .NET Sürümleri: .NET 10, 9, 8, 7, 6, 5, Core 3.1+ ve Framework 4.6.2+ için tam destek
- İşletim Sistemleri: Windows (7+), Linux (Ubuntu, Debian, CentOS), macOS (10+)
- Bulut Platformları: Optimize edilmiş performansla yerel Azure ve AWS entegrasyonu
- Kapsayıcı Desteği: Önceden yapılandırılmış bağımlılıklara sahip Docker görüntüleri mevcut
- Mimari: x64, x86, ARM64 desteklenen platformlar arasında
Kütüphanenin dağıtım dokümantasyonu her platform yapılandırması için ayrıntılı kılavuz sağlar.
Karşılaştırma Tablosu: Platform Desteği
| Platform Özelliği | IronPDF | Aspose.PDF | Uygulama Farkı |
|---|---|---|---|
| .NET 8/9 Desteği | Yerel | Çizim Paketi ile | IronPDF ek paketler gerektirmez |
| Linux Dağıtımı | Dahili | Ayrı Paket | Aspose'un Aspose.Pdf.Drawing'a ihtiyacı var |
| Docker Desteği | Resmi Görseller | Manuel Konfig | IronPDF önceden hazırlanmış konteynerler sağlar |
| Azure İşlevleri | Optimizasyon | Destekleniyor | IronPDF Azure'a özgü optimizasyonlar içerir |
| macOS ARM64 | Yerel | Sınırlı | IronPDF, Apple Silicon'u tam olarak destekler |
HTML'den PDF'ye Dönüştürme Performansı Nasıl Karşılaştırılır?
HTML'den PDF'ye dönüştürme, web tabanlı uygulamalar için kritik bir özelliği temsil eder. Her iki kütüphane de bu zorluğa farklı yaklaşıyor, bu da kod karmaşıklığı ve çıktı kalitesini etkiliyor.
IronPDF, tam bir Chrome işleme motorundan faydalanarak JavaScript yürütümünü ve duyarlı tasarım işleme işleminin tarayıcı çıktısıyla tam olarak eşleşmesini sağlar. Aspose.PDF, modern tarayıcılardan farklı şekilde HTML işleyen kendi HTML ayrıştırma motorunu kullanır.
IronPDF HTML Dönüşüm Örneği
using IronPdf;
// Enable enhanced security for production environments
Installation.EnableWebSecurity = true;
// Initialize the Chrome-based renderer with custom options
var renderer = new ChromePdfRenderer()
{
RenderingOptions = new ChromePdfRenderOptions()
{
MarginTop = 10,
MarginBottom = 10,
CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
EnableJavaScript = true,
WaitFor = new WaitFor()
{
// Wait for AJAX/animations to complete
RenderDelay = 500
}
}
};
// Convert HTML string with full CSS3/JS support
var pdf = renderer.RenderHtmlAsPdf(@"
<html>
<head>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto');
body { font-family: 'Roboto', sans-serif; }
.chart { width: 100%; height: 400px; }
</style>
</head>
<body>
<h1>Sales Report 2024</h1>
<div class='chart' id='revenue-chart'></div>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
// Complex JavaScript charts render perfectly
new Chart(document.getElementById('revenue-chart'), {
type: 'bar',
data: { /* chart data */ }
});
</script>
</body>
</html>");
// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("sales-report.pdf");
// Convert existing web page with authentication
var advancedPdf = renderer.RenderUrlAsPdf("https://app.internal.com/reports",
new ChromePdfRenderOptions()
{
CustomCookies = new Dictionary<string, string>()
{
{ "auth_token", "secure_token_value" }
},
// Capture background images and colors
PrintHtmlBackgrounds = true
});
using IronPdf;
// Enable enhanced security for production environments
Installation.EnableWebSecurity = true;
// Initialize the Chrome-based renderer with custom options
var renderer = new ChromePdfRenderer()
{
RenderingOptions = new ChromePdfRenderOptions()
{
MarginTop = 10,
MarginBottom = 10,
CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
EnableJavaScript = true,
WaitFor = new WaitFor()
{
// Wait for AJAX/animations to complete
RenderDelay = 500
}
}
};
// Convert HTML string with full CSS3/JS support
var pdf = renderer.RenderHtmlAsPdf(@"
<html>
<head>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto');
body { font-family: 'Roboto', sans-serif; }
.chart { width: 100%; height: 400px; }
</style>
</head>
<body>
<h1>Sales Report 2024</h1>
<div class='chart' id='revenue-chart'></div>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
// Complex JavaScript charts render perfectly
new Chart(document.getElementById('revenue-chart'), {
type: 'bar',
data: { /* chart data */ }
});
</script>
</body>
</html>");
// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("sales-report.pdf");
// Convert existing web page with authentication
var advancedPdf = renderer.RenderUrlAsPdf("https://app.internal.com/reports",
new ChromePdfRenderOptions()
{
CustomCookies = new Dictionary<string, string>()
{
{ "auth_token", "secure_token_value" }
},
// Capture background images and colors
PrintHtmlBackgrounds = true
});
Imports IronPdf
' Enable enhanced security for production environments
Installation.EnableWebSecurity = True
' Initialize the Chrome-based renderer with custom options
Dim renderer = New ChromePdfRenderer() With {
.RenderingOptions = New ChromePdfRenderOptions() With {
.MarginTop = 10, .MarginBottom = 10, .CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print, .EnableJavaScript = True, .WaitFor = New WaitFor() With {.RenderDelay = 500}
}
}
' Convert HTML string with full CSS3/JS support
Dim pdf = renderer.RenderHtmlAsPdf("
<html>
<head>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto');
body { font-family: 'Roboto', sans-serif; }
.chart { width: 100%; height: 400px; }
</style>
</head>
<body>
<h1>Sales Report 2024</h1>
<div class='chart' id='revenue-chart'></div>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
// Complex JavaScript charts render perfectly
new Chart(document.getElementById('revenue-chart'), {
type: 'bar',
data: { /* chart data */ }
});
</script>
</body>
</html>")
' Save with compression
pdf.CompressImages(90)
pdf.SaveAs("sales-report.pdf")
' Convert existing web page with authentication
Dim advancedPdf = renderer.RenderUrlAsPdf("https://app.internal.com/reports", New ChromePdfRenderOptions() With {
.CustomCookies = New Dictionary(Of String, String)() From {
{"auth_token", "secure_token_value"}
},
.PrintHtmlBackgrounds = True
})
ChromePdfRenderer sınıfı, basitliği korurken işleme süreci üzerinde kapsamlı kontrol sağlar. RenderingOptions özelliği, kağıt boyutu, kenar boşlukları, JavaScript işlemi ve CSS medya türleri dahil olmak üzere 50'den fazla yapılandırma seçeneği sunar. Dahili WaitFor işlevi, dönüşümden önce dinamik içeriğin tamamen yüklenmesini sağlar ve bu, modern tek sayfa uygulamaları için kritiktir.
Aspose.PDF HTML Dönüşüm Örneği
using Aspose.Pdf;
using Aspose.Pdf.Text;
// Create new document
Document document = new Document();
Page page = document.Pages.Add();
// Configure page settings
page.PageInfo.Width = 612;
page.PageInfo.Height = 792;
page.PageInfo.Margin = new MarginInfo(72, 72, 72, 72);
// Add HTML content - limited CSS support
HtmlFragment htmlFragment = new HtmlFragment(@"
<h1 style='color: blue; font-size: 24pt'>Sales Report 2024</h1>
<p>Quarterly revenue analysis...</p>
<table border='1'>
<tr><th>Quarter</th><th>Revenue</th></tr>
<tr><td>Q1</td><td>$1.2M</td></tr>
</table>");
// Basic rendering options
htmlFragment.HtmlLoadOptions = new HtmlLoadOptions()
{
PageInfo = new PageInfo() { Width = 612, Height = 792 },
// Sınırlı JavaScript support
IsEmbedFonts = true
};
page.Paragraphs.Add(htmlFragment);
// For complex HTML, load from file
HtmlLoadOptions options = new HtmlLoadOptions("https://example.com");
options.PageInfo.IsLandscape = false;
Document htmlDoc = new Document("report.html", options);
// Merge with existing document
document.Pages.Add(htmlDoc.Pages);
document.Save("output.pdf");
using Aspose.Pdf;
using Aspose.Pdf.Text;
// Create new document
Document document = new Document();
Page page = document.Pages.Add();
// Configure page settings
page.PageInfo.Width = 612;
page.PageInfo.Height = 792;
page.PageInfo.Margin = new MarginInfo(72, 72, 72, 72);
// Add HTML content - limited CSS support
HtmlFragment htmlFragment = new HtmlFragment(@"
<h1 style='color: blue; font-size: 24pt'>Sales Report 2024</h1>
<p>Quarterly revenue analysis...</p>
<table border='1'>
<tr><th>Quarter</th><th>Revenue</th></tr>
<tr><td>Q1</td><td>$1.2M</td></tr>
</table>");
// Basic rendering options
htmlFragment.HtmlLoadOptions = new HtmlLoadOptions()
{
PageInfo = new PageInfo() { Width = 612, Height = 792 },
// Sınırlı JavaScript support
IsEmbedFonts = true
};
page.Paragraphs.Add(htmlFragment);
// For complex HTML, load from file
HtmlLoadOptions options = new HtmlLoadOptions("https://example.com");
options.PageInfo.IsLandscape = false;
Document htmlDoc = new Document("report.html", options);
// Merge with existing document
document.Pages.Add(htmlDoc.Pages);
document.Save("output.pdf");
Imports Aspose.Pdf
Imports Aspose.Pdf.Text
' Create new document
Dim document As New Document()
Dim page As Page = document.Pages.Add()
' Configure page settings
page.PageInfo.Width = 612
page.PageInfo.Height = 792
page.PageInfo.Margin = New MarginInfo(72, 72, 72, 72)
' Add HTML content - limited CSS support
Dim htmlFragment As New HtmlFragment("
<h1 style='color: blue; font-size: 24pt'>Sales Report 2024</h1>
<p>Quarterly revenue analysis...</p>
<table border='1'>
<tr><th>Quarter</th><th>Revenue</th></tr>
<tr><td>Q1</td><td>$1.2M</td></tr>
</table>")
' Basic rendering options
htmlFragment.HtmlLoadOptions = New HtmlLoadOptions() With {
.PageInfo = New PageInfo() With {.Width = 612, .Height = 792},
' Sınırlı JavaScript support
.IsEmbedFonts = True
}
page.Paragraphs.Add(htmlFragment)
' For complex HTML, load from file
Dim options As New HtmlLoadOptions("https://example.com")
options.PageInfo.IsLandscape = False
Dim htmlDoc As New Document("report.html", options)
' Merge with existing document
document.Pages.Add(htmlDoc.Pages)
document.Save("output.pdf")
Aspose.PDF'nin HTML işleme, manuel sayfa kurulumunu ve sınırlı CSS3 desteği gerektirir. HtmlFragment sınıfı, temel HTML'yi işler ancak flexbox ve grid düzenleri gibi modern web özelliklerinden yoksundur—bu sınırlamalar, Aspose'un destek forumlarında birçok kullanıcının esnek ve grid stil görüntüleme dönüştürmelerinin beklendiği gibi olmadığını bildirdiği raporlarla doğrulanmıştır. Karmaşık JavaScript yürütümü de sınırlıdır. Bootstrap 5 mizanpajları gibi modern web tasarımlarının düzgün bir şekilde dönüştürülmesini gerektiren üretim uygulamaları için ek ön işleme veya alternatif çözümler gerekebilir.
Gerçek Dünyada Performans Karşılaştırması
Ana performans farklılıkları ortaya çıkar:
| Metrik | IronPDF | Aspose.PDF | Etkisi |
|---|---|---|---|
| HTML/CSS Uyumluluğu | %98+ tarayıcı uyumu | %70-80 tahmini | Görsel tutarlılık |
| JavaScript Desteği | Tam V8 motoru | Temel/Sınırlı | Dinamik içerik işleme |
| İşleme Hızı | 0,8-1,2s tipik | 0,3-0,5s tipik | Aspose basit HTML için daha hızlı |
| Bellek Kullanımı | 150-200 MB | 80-120 MB | IronPDF, Chrome motorunu kullanır |
| Yazı Tipi İşleme | Sistem + Web yazı tipleri | Yalnızca gömülü yazı tipleri | Tipografi seçenekleri |
PDF Güvenlik Özellikleri Nasıl Karşılaştırılır?
Güvenlik, hassas bilgiler içeren PDF belgeleri için önemini korur. Her iki kütüphane de şifreleme olanakları sağlar, ancak uygulama yaklaşımları ve özellik setleri önemli ölçüde farklılaşır.
IronPDF Şifreleme Uygulaması
using IronPdf;
using IronPdf.Security;
// Load existing PDF or create new one
var pdf = PdfDocument.FromFile("financial-report.pdf");
// Configure comprehensive security settings
pdf.SecuritySettings = new SecuritySettings()
{
UserPassword = "user_pwd_2024",
OwnerPassword = "admin_pwd_2024",
AllowUserCopyPasteContent = false,
AllowUserEditing = IronPdf.Security.PdfEditSecurity.NoEdit,
AllowUserFormData = false,
AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint,
AllowUserAnnotations = false,
// Advanced encryption options
EncryptionAlgorithm = IronPdf.Security.PdfEncryptionAlgorithm.AES256,
UseStrongEncryption = true
};
// Apply digital restrictions
pdf.MetaData.Title = "Confidential Report";
pdf.MetaData.Author = "Finance Department";
pdf.MetaData.Keywords = "Internal Only, Q4 2024";
pdf.MetaData.ModifiedDate = DateTime.UtcNow;
// Advanced: Add custom security handler
pdf.SecuritySettings.CustomSecurityHandler = new CustomSecurityHandler()
{
// Implement custom DRM or watermarking
OnDocumentOpen = (doc) => LogAccess(doc),
RequireTokenValidation = true
};
// Granular permission control
var permissions = new PdfPermissions()
{
AllowAccessibilityExtractContent = true, // Screen readers
AllowAssembleDocument = false,
AllowExtractContentForAccessibility = true,
AllowFillForms = false,
AllowFullQualityPrint = false,
AllowModifyAnnotations = false,
AllowModifyContents = false,
AllowPrint = false
};
pdf.ApplySecuritySettings(permissions);
pdf.SaveAs("secured-report.pdf");
using IronPdf;
using IronPdf.Security;
// Load existing PDF or create new one
var pdf = PdfDocument.FromFile("financial-report.pdf");
// Configure comprehensive security settings
pdf.SecuritySettings = new SecuritySettings()
{
UserPassword = "user_pwd_2024",
OwnerPassword = "admin_pwd_2024",
AllowUserCopyPasteContent = false,
AllowUserEditing = IronPdf.Security.PdfEditSecurity.NoEdit,
AllowUserFormData = false,
AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint,
AllowUserAnnotations = false,
// Advanced encryption options
EncryptionAlgorithm = IronPdf.Security.PdfEncryptionAlgorithm.AES256,
UseStrongEncryption = true
};
// Apply digital restrictions
pdf.MetaData.Title = "Confidential Report";
pdf.MetaData.Author = "Finance Department";
pdf.MetaData.Keywords = "Internal Only, Q4 2024";
pdf.MetaData.ModifiedDate = DateTime.UtcNow;
// Advanced: Add custom security handler
pdf.SecuritySettings.CustomSecurityHandler = new CustomSecurityHandler()
{
// Implement custom DRM or watermarking
OnDocumentOpen = (doc) => LogAccess(doc),
RequireTokenValidation = true
};
// Granular permission control
var permissions = new PdfPermissions()
{
AllowAccessibilityExtractContent = true, // Screen readers
AllowAssembleDocument = false,
AllowExtractContentForAccessibility = true,
AllowFillForms = false,
AllowFullQualityPrint = false,
AllowModifyAnnotations = false,
AllowModifyContents = false,
AllowPrint = false
};
pdf.ApplySecuritySettings(permissions);
pdf.SaveAs("secured-report.pdf");
Imports IronPdf
Imports IronPdf.Security
' Load existing PDF or create new one
Private pdf = PdfDocument.FromFile("financial-report.pdf")
' Configure comprehensive security settings
pdf.SecuritySettings = New SecuritySettings() With {
.UserPassword = "user_pwd_2024",
.OwnerPassword = "admin_pwd_2024",
.AllowUserCopyPasteContent = False,
.AllowUserEditing = IronPdf.Security.PdfEditSecurity.NoEdit,
.AllowUserFormData = False,
.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint,
.AllowUserAnnotations = False,
.EncryptionAlgorithm = IronPdf.Security.PdfEncryptionAlgorithm.AES256,
.UseStrongEncryption = True
}
' Apply digital restrictions
pdf.MetaData.Title = "Confidential Report"
pdf.MetaData.Author = "Finance Department"
pdf.MetaData.Keywords = "Internal Only, Q4 2024"
pdf.MetaData.ModifiedDate = DateTime.UtcNow
' Advanced: Add custom security handler
pdf.SecuritySettings.CustomSecurityHandler = New CustomSecurityHandler() With {
.OnDocumentOpen = Function(doc) LogAccess(doc),
.RequireTokenValidation = True
}
' Granular permission control
Dim permissions = New PdfPermissions() With {
.AllowAccessibilityExtractContent = True,
.AllowAssembleDocument = False,
.AllowExtractContentForAccessibility = True,
.AllowFillForms = False,
.AllowFullQualityPrint = False,
.AllowModifyAnnotations = False,
.AllowModifyContents = False,
.AllowPrint = False
}
pdf.ApplySecuritySettings(permissions)
pdf.SaveAs("secured-report.pdf")
IronPDF'nin güvenlik uygulaması, SecuritySettings sınıfı aracılığıyla ayrıntılı kontrol sağlar. API, özelleştirilebilir güvenlik işleyicileri ile işletme DRM senaryolarını etkinleştirerek hem şifre tabanlı hem de sertifika tabanlı şifrelemeyi destekler.
Aspose.PDF Şifreleme Uygulaması
using Aspose.Pdf;
using Aspose.Pdf.Facades;
// Load document
Document pdfDocument = new Document("financial-report.pdf");
// Basic encryption
pdfDocument.Encrypt(
userPassword: "user123",
ownerPassword: "owner123",
permissions: Permissions.PrintDocument | Permissions.ModifyContent,
cryptoAlgorithm: CryptoAlgorithm.AESx256
);
// Advanced security with certificates
using (PdfFileSecurity fileSecurity = new PdfFileSecurity())
{
fileSecurity.BindPdf(pdfDocument);
// Certificate-based encryption
X509Certificate2 certificate = new X509Certificate2("recipient.cer");
fileSecurity.EncryptFile(
null, // No user password
"owner_password",
DocumentPrivilege.Print | DocumentPrivilege.Copy,
KeySize.x256,
Algorithm.AES,
new X509Certificate2[] { certificate }
);
}
// Set document restrictions
pdfDocument.Security = new PdfSecurity()
{
IsEncrypted = true,
EncryptionAlgorithm = EncryptionAlgorithm.AES_256,
Permissions = AccessPermissions.ExtractContent |
AccessPermissions.ExtractContentWithDisabilities
};
pdfDocument.Save("encrypted.pdf");
using Aspose.Pdf;
using Aspose.Pdf.Facades;
// Load document
Document pdfDocument = new Document("financial-report.pdf");
// Basic encryption
pdfDocument.Encrypt(
userPassword: "user123",
ownerPassword: "owner123",
permissions: Permissions.PrintDocument | Permissions.ModifyContent,
cryptoAlgorithm: CryptoAlgorithm.AESx256
);
// Advanced security with certificates
using (PdfFileSecurity fileSecurity = new PdfFileSecurity())
{
fileSecurity.BindPdf(pdfDocument);
// Certificate-based encryption
X509Certificate2 certificate = new X509Certificate2("recipient.cer");
fileSecurity.EncryptFile(
null, // No user password
"owner_password",
DocumentPrivilege.Print | DocumentPrivilege.Copy,
KeySize.x256,
Algorithm.AES,
new X509Certificate2[] { certificate }
);
}
// Set document restrictions
pdfDocument.Security = new PdfSecurity()
{
IsEncrypted = true,
EncryptionAlgorithm = EncryptionAlgorithm.AES_256,
Permissions = AccessPermissions.ExtractContent |
AccessPermissions.ExtractContentWithDisabilities
};
pdfDocument.Save("encrypted.pdf");
Imports Aspose.Pdf
Imports Aspose.Pdf.Facades
' Load document
Private pdfDocument As New Document("financial-report.pdf")
' Basic encryption
pdfDocument.Encrypt(userPassword:= "user123", ownerPassword:= "owner123", permissions:= Permissions.PrintDocument Or Permissions.ModifyContent, cryptoAlgorithm:= CryptoAlgorithm.AESx256)
' Advanced security with certificates
Using fileSecurity As New PdfFileSecurity()
fileSecurity.BindPdf(pdfDocument)
' Certificate-based encryption
Dim certificate As New X509Certificate2("recipient.cer")
fileSecurity.EncryptFile(Nothing, "owner_password", DocumentPrivilege.Print Or DocumentPrivilege.Copy, KeySize.x256, Algorithm.AES, New X509Certificate2() { certificate })
End Using
' Set document restrictions
pdfDocument.Security = New PdfSecurity() With {
.IsEncrypted = True,
.EncryptionAlgorithm = EncryptionAlgorithm.AES_256,
.Permissions = AccessPermissions.ExtractContent Or AccessPermissions.ExtractContentWithDisabilities
}
pdfDocument.Save("encrypted.pdf")
Aspose.PDF, temel şifrelemeyi gelişmiş güvenlik özelliklerinden ayırır ve sertifika işlemleri için PdfFileSecurity sınıfını gerektirir. Fonksiyonel olmasına rağmen, API, IronPDF'nin birleşik yaklaşımına kıyasla eşdeğer güvenlik yapılandırmaları için daha fazla kod gerektirir.
Güvenlik Özelliği Karşılaştırma Matrisi
| Güvenlik Özelliği | IronPDF | Aspose.PDF | Açıklamalar |
|---|---|---|---|
| AES-256 Şifreleme | Dahili | Destekleniyor | Her ikisi de mevcut standartları uygular |
| Sertifika Şifreleme | Yerel API | Fasadenler Yoluyla | Aspose ek sınıflar gerektirir |
| Özelleştirilebilir Güvenlik İşleyicileri | Genişletilebilir | Sınırlı | IronPDF, özelleştirilmiş DRM'yi sağlar |
| Gizleme Araçları | Tek-çizgili API | Manuel süreç | IronPDF, uyum basitleştirir |
| Dijital İmzalar | Entegre | Destekleniyor | Her ikisi de PKI altyapısını destekler |
| İzin Ayrıntılığı | 15+ seçenek | 8 seçenek | IronPDF daha hassas kontrol sunar |
PDF İçerik Redaksiyon Özellikleri Nasıl Karşılaştırılır?
İçerik redaksiyonu, GDPR ve HIPAA gibi düzenlemelerle uyum için kritik olan hassas bilgilerin kalıcı olarak kaldırılmasını sağlar. Uygulama yaklaşımı hem güvenlik hem de kullanılabilirliği önemli ölçüde etkiler.
IronPDF Redaksiyon Örneği
using IronPdf;
// Load PDF containing sensitive data
PdfDocument pdf = PdfDocument.FromFile("medical-records.pdf");
// Simple redaction - removes all instances permanently
pdf.RedactTextOnAllPages("SSN: *", "XXX-XX-XXXX");
pdf.RedactTextOnAllPages(@"\b\d{3}-\d{2}-\d{4}\b"); // Regex for SSN pattern
// Advanced redaction with options
var redactionOptions = new RedactionOptions()
{
RedactionColor = Color.Black,
RedactionOpacity = 1.0f,
UseRegex = true,
MatchCase = false,
// Redact across form fields and annotations
SearchInFormFields = true,
SearchInAnnotations = true
};
// Redact specific pages with custom rendering
pdf.RedactTextOnPages("CONFIDENTIAL",
new[] { 0, 1, 5 }, // Page indices
redactionOptions);
// Area-based redaction for images/signatures
pdf.RedactArea(new Rectangle(100, 100, 200, 50), 2); // Page 3
// Verify redaction (for compliance logging)
var redactionLog = pdf.GetRedactionLog();
Console.WriteLine($"Redacted {redactionLog.Count} items");
pdf.SaveAs("redacted-medical-records.pdf");
using IronPdf;
// Load PDF containing sensitive data
PdfDocument pdf = PdfDocument.FromFile("medical-records.pdf");
// Simple redaction - removes all instances permanently
pdf.RedactTextOnAllPages("SSN: *", "XXX-XX-XXXX");
pdf.RedactTextOnAllPages(@"\b\d{3}-\d{2}-\d{4}\b"); // Regex for SSN pattern
// Advanced redaction with options
var redactionOptions = new RedactionOptions()
{
RedactionColor = Color.Black,
RedactionOpacity = 1.0f,
UseRegex = true,
MatchCase = false,
// Redact across form fields and annotations
SearchInFormFields = true,
SearchInAnnotations = true
};
// Redact specific pages with custom rendering
pdf.RedactTextOnPages("CONFIDENTIAL",
new[] { 0, 1, 5 }, // Page indices
redactionOptions);
// Area-based redaction for images/signatures
pdf.RedactArea(new Rectangle(100, 100, 200, 50), 2); // Page 3
// Verify redaction (for compliance logging)
var redactionLog = pdf.GetRedactionLog();
Console.WriteLine($"Redacted {redactionLog.Count} items");
pdf.SaveAs("redacted-medical-records.pdf");
Imports IronPdf
' Load PDF containing sensitive data
Private pdf As PdfDocument = PdfDocument.FromFile("medical-records.pdf")
' Simple redaction - removes all instances permanently
pdf.RedactTextOnAllPages("SSN: *", "XXX-XX-XXXX")
pdf.RedactTextOnAllPages("\b\d{3}-\d{2}-\d{4}\b") ' Regex for SSN pattern
' Advanced redaction with options
Dim redactionOptions As New RedactionOptions() With {
.RedactionColor = Color.Black,
.RedactionOpacity = 1.0F,
.UseRegex = True,
.MatchCase = False,
.SearchInFormFields = True,
.SearchInAnnotations = True
}
' Redact specific pages with custom rendering
pdf.RedactTextOnPages("CONFIDENTIAL", { 0, 1, 5 }, redactionOptions)
' Area-based redaction for images/signatures
pdf.RedactArea(New Rectangle(100, 100, 200, 50), 2) ' Page 3
' Verify redaction (for compliance logging)
Dim redactionLog = pdf.GetRedactionLog()
Console.WriteLine($"Redacted {redactionLog.Count} items")
pdf.SaveAs("redacted-medical-records.pdf")
IronPDF'nin RedactTextOnAllPages() metodu, içeriği sadece siyah kutularla kaplamaktan ziyade, PDF yapısından kalıcı olarak kaldırarak gerçek gizleme uygulaması yapar. redaksiyon öğreticisi, denetime-uyumlu iş akışlarını, denetim yol takiplerini ve metin dışı içerik için alan bazlı redaksiyonları gösterir.
Aspose.PDF Redaksiyon Örneği
using Aspose.Pdf;
using Aspose.Pdf.Redaction;
using Aspose.Pdf.Text;
Document document = new Document("medical-records.pdf");
// Find text to redact
TextFragmentAbsorber textAbsorber = new TextFragmentAbsorber("CONFIDENTIAL");
textAbsorber.TextSearchOptions = new TextSearchOptions(true); // Regex enabled
// Elle redaction process
foreach (Page page in document.Pages)
{
page.Accept(textAbsorber);
foreach (TextFragment textFragment in textAbsorber.TextFragments)
{
// Create redaction annotation
RedactionAnnotation redaction = new RedactionAnnotation(page, textFragment.Rectangle)
{
FillColor = Color.Black,
BorderColor = Color.Black,
OverlayText = "[REDACTED]",
TextAlignment = HorizontalAlignment.Center
};
page.Annotations.Add(redaction);
// Apply redaction (makes it permanent)
redaction.Redact();
// Elle text removal
textFragment.Text = string.Empty;
}
}
// Secondary pass for form fields
var formEditor = new Form(document);
foreach (Field field in document.Form.Fields)
{
if (field.Value.Contains("SSN:"))
{
field.Value = "XXX-XX-XXXX";
field.ReadOnly = true;
}
}
document.Save("redacted.pdf");
using Aspose.Pdf;
using Aspose.Pdf.Redaction;
using Aspose.Pdf.Text;
Document document = new Document("medical-records.pdf");
// Find text to redact
TextFragmentAbsorber textAbsorber = new TextFragmentAbsorber("CONFIDENTIAL");
textAbsorber.TextSearchOptions = new TextSearchOptions(true); // Regex enabled
// Elle redaction process
foreach (Page page in document.Pages)
{
page.Accept(textAbsorber);
foreach (TextFragment textFragment in textAbsorber.TextFragments)
{
// Create redaction annotation
RedactionAnnotation redaction = new RedactionAnnotation(page, textFragment.Rectangle)
{
FillColor = Color.Black,
BorderColor = Color.Black,
OverlayText = "[REDACTED]",
TextAlignment = HorizontalAlignment.Center
};
page.Annotations.Add(redaction);
// Apply redaction (makes it permanent)
redaction.Redact();
// Elle text removal
textFragment.Text = string.Empty;
}
}
// Secondary pass for form fields
var formEditor = new Form(document);
foreach (Field field in document.Form.Fields)
{
if (field.Value.Contains("SSN:"))
{
field.Value = "XXX-XX-XXXX";
field.ReadOnly = true;
}
}
document.Save("redacted.pdf");
Imports Aspose.Pdf
Imports Aspose.Pdf.Redaction
Imports Aspose.Pdf.Text
Dim document As New Document("medical-records.pdf")
' Find text to redact
Dim textAbsorber As New TextFragmentAbsorber("CONFIDENTIAL")
textAbsorber.TextSearchOptions = New TextSearchOptions(True) ' Regex enabled
' Elle redaction process
For Each page As Page In document.Pages
page.Accept(textAbsorber)
For Each textFragment As TextFragment In textAbsorber.TextFragments
' Create redaction annotation
Dim redaction As New RedactionAnnotation(page, textFragment.Rectangle) With {
.FillColor = Color.Black,
.BorderColor = Color.Black,
.OverlayText = "[REDACTED]",
.TextAlignment = HorizontalAlignment.Center
}
page.Annotations.Add(redaction)
' Apply redaction (makes it permanent)
redaction.Redact()
' Elle text removal
textFragment.Text = String.Empty
Next
Next
' Secondary pass for form fields
Dim formEditor As New Form(document)
For Each field As Field In document.Form.Fields
If field.Value.Contains("SSN:") Then
field.Value = "XXX-XX-XXXX"
field.ReadOnly = True
End If
Next
document.Save("redacted.pdf")
Aspose.PDF'nin redaksiyonu, metin arama, ek açıklama oluşturma ve açıkça kaldırma adımlarını gerektirir. Kontrol sağlayan bu yaklaşım, uyum açısından kritik senaryolarda karmaşıklığı ve hata potansiyelini artırır. Çok aşamalı bu süreç ayrıca büyük belgelerde performansı etkiler.
Redaksiyon Yeteneği Analizi
Gizleme yaklaşımlarındaki temel farklılıklar şunlardır:
- IronPDF: PDF akışından gerçek içerik kaldırma, otomatik desen eşleştirme, tek yöntemli API
- Aspose.PDF: Açıklama tabanlı yaklaşım, manuel metin konumu bulma zorunluluğu, çok aşamalı süreç
- Uyumluluk: IronPDF'nin yaklaşımı NIST yönergeleri ile uyumlu işler
- Performans: IronPDF, optimize edilmiş algoritmalar sayesinde 1000 sayfalık belgeleri 3 kat daha hızlı işler
Dijital İmza Yetenekleri Nasıl Karşılaştırılır?
Dijital imzalar, PDF belgeleri için kimlik doğrulama, bütünlük ve inkâr edilememe sağlar. Uygulama karmaşıklığı, üretim ortamlarında benimsemeyi doğrudan etkiler.
IronPDF Dijital İmza Örneği
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Load certificate with private key
X509Certificate2 signingCertificate = new X509Certificate2(
"company-signing.pfx",
"cert_password",
X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet
);
// Create signature with advanced options
var signature = new PdfSignature(signingCertificate)
{
// Visual signature appearance
SignatureImage = new PdfSignatureImage("signature.png", 100, 30),
SignaturePosition = new Rectangle(400, 650, 150, 50),
// Signature metadata
ContactInformation = "legal@company.com",
LocationDescription = "San Francisco, CA",
SignatureReason = "Contract Approval",
// Cryptographic options
DigestMethod = DigestMethods.SHA256,
TimeStampUrl = "http://timestamp.digicert.com"
};
// Load and sign document
PdfDocument pdf = PdfDocument.FromFile("contract.pdf");
// Advanced: Multi-signature workflow
var signatureManager = pdf.SignatureManager;
if (signatureManager.HasPreviousSignatures)
{
// Artımsal signing preserves existing signatures
signature.SigningMode = SigningMode.IncrementalUpdate;
}
// Apply signature with validation
var signResult = pdf.Sign(signature);
// Verify signature integrity
if (signResult.IsValid)
{
Console.WriteLine($"Document signed at {signResult.SigningTime}");
Console.WriteLine($"Certificate: {signResult.SignerCertificate.Subject}");
}
// Add document timestamp (no visual signature)
pdf.ApplyTimestamp(new TimestampSignature()
{
TimestampServerUrl = "http://timestamp.com/odoca.com",
Username = "api_user",
Password = "api_key"
});
pdf.SaveAs("signed-contract.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Load certificate with private key
X509Certificate2 signingCertificate = new X509Certificate2(
"company-signing.pfx",
"cert_password",
X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet
);
// Create signature with advanced options
var signature = new PdfSignature(signingCertificate)
{
// Visual signature appearance
SignatureImage = new PdfSignatureImage("signature.png", 100, 30),
SignaturePosition = new Rectangle(400, 650, 150, 50),
// Signature metadata
ContactInformation = "legal@company.com",
LocationDescription = "San Francisco, CA",
SignatureReason = "Contract Approval",
// Cryptographic options
DigestMethod = DigestMethods.SHA256,
TimeStampUrl = "http://timestamp.digicert.com"
};
// Load and sign document
PdfDocument pdf = PdfDocument.FromFile("contract.pdf");
// Advanced: Multi-signature workflow
var signatureManager = pdf.SignatureManager;
if (signatureManager.HasPreviousSignatures)
{
// Artımsal signing preserves existing signatures
signature.SigningMode = SigningMode.IncrementalUpdate;
}
// Apply signature with validation
var signResult = pdf.Sign(signature);
// Verify signature integrity
if (signResult.IsValid)
{
Console.WriteLine($"Document signed at {signResult.SigningTime}");
Console.WriteLine($"Certificate: {signResult.SignerCertificate.Subject}");
}
// Add document timestamp (no visual signature)
pdf.ApplyTimestamp(new TimestampSignature()
{
TimestampServerUrl = "http://timestamp.com/odoca.com",
Username = "api_user",
Password = "api_key"
});
pdf.SaveAs("signed-contract.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
' Load certificate with private key
Dim signingCertificate As New X509Certificate2("company-signing.pfx", "cert_password", X509KeyStorageFlags.Exportable Or X509KeyStorageFlags.PersistKeySet)
' Create signature with advanced options
Dim signature As New PdfSignature(signingCertificate) With {
' Visual signature appearance
.SignatureImage = New PdfSignatureImage("signature.png", 100, 30),
.SignaturePosition = New Rectangle(400, 650, 150, 50),
' Signature metadata
.ContactInformation = "legal@company.com",
.LocationDescription = "San Francisco, CA",
.SignatureReason = "Contract Approval",
' Cryptographic options
.DigestMethod = DigestMethods.SHA256,
.TimeStampUrl = "http://timestamp.digicert.com"
}
' Load and sign document
Dim pdf As PdfDocument = PdfDocument.FromFile("contract.pdf")
' Advanced: Multi-signature workflow
Dim signatureManager = pdf.SignatureManager
If signatureManager.HasPreviousSignatures Then
' Incremental signing preserves existing signatures
signature.SigningMode = SigningMode.IncrementalUpdate
End If
' Apply signature with validation
Dim signResult = pdf.Sign(signature)
' Verify signature integrity
If signResult.IsValid Then
Console.WriteLine($"Document signed at {signResult.SigningTime}")
Console.WriteLine($"Certificate: {signResult.SignerCertificate.Subject}")
End If
' Add document timestamp (no visual signature)
pdf.ApplyTimestamp(New TimestampSignature() With {
.TimestampServerUrl = "http://timestamp.com/odoca.com",
.Username = "api_user",
.Password = "api_key"
})
pdf.SaveAs("signed-contract.pdf")
IronPDF, sertifika yönetimi, görsel görünüm ve kriptografik işlemleri şeffaf bir şekilde ele alarak PdfSignature sınıfı aracılığıyla dijital imzaları kolaylaştırır. imzalama belgeleri HSM entegrasyonu ve toplu imzalama iş akışları gibi gelişmiş senaryoları kapsar.
Aspose.PDF Dijital İmza Örneği
using Aspose.Pdf;
using Aspose.Pdf.Forms;
using Aspose.Pdf.Facades;
using System.Security.Cryptography.X509Certificates;
Document document = new Document("contract.pdf");
// Create signature field manually
SignatureField signatureField = new SignatureField(
document.Pages[1],
new Rectangle(100, 650, 300, 700)
);
signatureField.PartialName = "SignatureField1";
// Configure PKCS7 signature
PKCS7 pkcs7 = new PKCS7(
"company-signing.pfx",
"cert_password"
);
pkcs7.Reason = "Contract Approval";
pkcs7.ContactInfo = "legal@company.com";
pkcs7.Location = "San Francisco, CA";
pkcs7.Date = DateTime.Now;
// Setup visual appearance
SignatureAppearance appearance = new SignatureAppearance()
{
Foreground = System.Drawing.Color.Blue,
Background = System.Drawing.Color.White,
GraphicsMode = SignatureAppearance.GraphicsModeEnum.SignatureAndDescription
};
// Elle signature application
using (PdfFileSignature pdfSign = new PdfFileSignature())
{
pdfSign.BindPdf(document);
// Configure signature rectangle
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(
100, 650, 200, 50
);
// Sign with appearance
pdfSign.Sign(1, // Page number
"Approved by Legal Department",
"legal@company.com",
"San Francisco",
true, // Visible
rect,
pkcs7);
// Save incrementally
pdfSign.Save("signed.pdf");
}
// Timestamp requires separate operation
PdfFileSignature timeStamp = new PdfFileSignature();
timeStamp.BindPdf("signed.pdf");
timeStamp.Timestamp(new TimestampSettings("http://tsa.example.com")
{
BasicAuthCredentials = new BasicAuthCredentials("user", "pass")
});
using Aspose.Pdf;
using Aspose.Pdf.Forms;
using Aspose.Pdf.Facades;
using System.Security.Cryptography.X509Certificates;
Document document = new Document("contract.pdf");
// Create signature field manually
SignatureField signatureField = new SignatureField(
document.Pages[1],
new Rectangle(100, 650, 300, 700)
);
signatureField.PartialName = "SignatureField1";
// Configure PKCS7 signature
PKCS7 pkcs7 = new PKCS7(
"company-signing.pfx",
"cert_password"
);
pkcs7.Reason = "Contract Approval";
pkcs7.ContactInfo = "legal@company.com";
pkcs7.Location = "San Francisco, CA";
pkcs7.Date = DateTime.Now;
// Setup visual appearance
SignatureAppearance appearance = new SignatureAppearance()
{
Foreground = System.Drawing.Color.Blue,
Background = System.Drawing.Color.White,
GraphicsMode = SignatureAppearance.GraphicsModeEnum.SignatureAndDescription
};
// Elle signature application
using (PdfFileSignature pdfSign = new PdfFileSignature())
{
pdfSign.BindPdf(document);
// Configure signature rectangle
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(
100, 650, 200, 50
);
// Sign with appearance
pdfSign.Sign(1, // Page number
"Approved by Legal Department",
"legal@company.com",
"San Francisco",
true, // Visible
rect,
pkcs7);
// Save incrementally
pdfSign.Save("signed.pdf");
}
// Timestamp requires separate operation
PdfFileSignature timeStamp = new PdfFileSignature();
timeStamp.BindPdf("signed.pdf");
timeStamp.Timestamp(new TimestampSettings("http://tsa.example.com")
{
BasicAuthCredentials = new BasicAuthCredentials("user", "pass")
});
Imports Aspose.Pdf
Imports Aspose.Pdf.Forms
Imports Aspose.Pdf.Facades
Imports System.Security.Cryptography.X509Certificates
Dim document As New Document("contract.pdf")
' Create signature field manually
Dim signatureField As New SignatureField(document.Pages(1), New Rectangle(100, 650, 300, 700))
signatureField.PartialName = "SignatureField1"
' Configure PKCS7 signature
Dim pkcs7 As New PKCS7("company-signing.pfx", "cert_password")
pkcs7.Reason = "Contract Approval"
pkcs7.ContactInfo = "legal@company.com"
pkcs7.Location = "San Francisco, CA"
pkcs7.Date = DateTime.Now
' Setup visual appearance
Dim appearance As New SignatureAppearance() With {
.Foreground = System.Drawing.Color.Blue,
.Background = System.Drawing.Color.White,
.GraphicsMode = SignatureAppearance.GraphicsModeEnum.SignatureAndDescription
}
' Elle signature application
Using pdfSign As New PdfFileSignature()
pdfSign.BindPdf(document)
' Configure signature rectangle
Dim rect As New System.Drawing.Rectangle(100, 650, 200, 50)
' Sign with appearance
pdfSign.Sign(1, ' Page number
"Approved by Legal Department",
"legal@company.com",
"San Francisco",
True, ' Visible
rect,
pkcs7)
' Save incrementally
pdfSign.Save("signed.pdf")
End Using
' Timestamp requires separate operation
Dim timeStamp As New PdfFileSignature()
timeStamp.BindPdf("signed.pdf")
timeStamp.Timestamp(New TimestampSettings("http://tsa.example.com") With {
.BasicAuthCredentials = New BasicAuthCredentials("user", "pass")
})
Aspose.PDF, imzalama işlemleri için manuel imza alanı oluşturma ve birden çok sınıf gerektirir. PKCS7, SignatureField ve PdfFileSignature arasındaki ayrım, standart imzalama iş akışları için karmaşıklığı artırır.
Dijital İmza Özellik Matriksi
| Özellik | IronPDF | Aspose.PDF | Uygulama Etkisi |
|---|---|---|---|
| Görünür İmzalar | Dahili | Manuel kurulum | IronPDF daha az kod gerektirir |
| Görünmez İmzalar | Destekleniyor | Destekleniyor | Her ikisi de onaylamayı ele alır |
| Çoklu-imzalar | Artımsal | Manuel izleme | IronPDF otomatik olarak korur |
| Zaman damgası Sunucusu | Entegre | Ayrı API | IronPDF birleşik yaklaşım |
| HSM Desteği | PKCS#11 aracılığıyla | Özel sağlayıcı | Her ikisi de donanım anahtarlarını destekler |
| LTV (Uzun dönem) | Otomatik | Manuel yapılandırma | IronPDF, uyum basitleştirir |
| Toplu İmzalama | Optimizasyon | Standart döngü | IronPDF toplu için 5 kat daha hızlı |
Filigranlama Özellikleri Nasıl Karşılaştırılır?
Filigranlama, fikri mülkiyeti korur ve belgenin izlenebilirliğini sağlar. Uygulama yaklaşımı hem görsel kaliteyi hem de performansı etkiler.
IronPDF Filigranlama Örneği
using IronPdf;
using IronPdf.Editing;
// Create renderer for new PDFs
var renderer = new ChromePdfRenderer();
// Generate PDF from URL
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/features/");
// HTML/CSS watermark with transparency and rotation
pdf.ApplyWatermark(@"
<div style='
font-family: Arial, sans-serif;
font-size: 72px;
color: rgba(255, 0, 0, 0.3);
transform: rotate(-45deg);
text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
'>
CONFIDENTIAL
</div>",
rotation: 45,
opacity: 30,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center
);
// Advanced watermark with dynamic content
string dynamicWatermark = $@"
<div style='text-align: center; font-family: Georgia;'>
<img src='data:image/png;base64,{logoBase64}' width='100'
style='opacity: 0.5;' />
<p style='color: #666; font-size: 14px; margin-top: 10px;'>
Document ID: {documentId}<br/>
Generated: {DateTime.Now:yyyy-MM-dd HH:mm}<br/>
User: {currentUser}
</p>
</div>";
// Apply to specific pages with custom positioning
pdf.ApplyWatermark(dynamicWatermark,
pageIndexes: new[] { 0, 2, 4 }, // First, third, fifth pages
rotation: 0,
opacity: 50,
verticalOffset: -100, // 100px from center
horizontalOffset: 200
);
// Background watermark (behind content)
var backgroundWatermark = new HtmlStamper()
{
Html = "<h1 style='color: #f0f0f0; font-size: 120px;'>DRAFT</h1>",
Opacity = 10,
IsStampBehindContent = true,
VerticalAlignment = VerticalAlignment.Middle,
HorizontalAlignment = HorizontalAlignment.Center
};
pdf.ApplyStamp(backgroundWatermark);
// Batch watermarking with performance optimization
var options = new WatermarkOptions()
{
UseParallelProcessing = true,
CacheWatermarkImage = true
};
foreach (var page in pdf.Pages)
{
page.ApplyWatermark("© 2024 Company Name", options);
}
pdf.SaveAs("watermarked-document.pdf");
using IronPdf;
using IronPdf.Editing;
// Create renderer for new PDFs
var renderer = new ChromePdfRenderer();
// Generate PDF from URL
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/features/");
// HTML/CSS watermark with transparency and rotation
pdf.ApplyWatermark(@"
<div style='
font-family: Arial, sans-serif;
font-size: 72px;
color: rgba(255, 0, 0, 0.3);
transform: rotate(-45deg);
text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
'>
CONFIDENTIAL
</div>",
rotation: 45,
opacity: 30,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center
);
// Advanced watermark with dynamic content
string dynamicWatermark = $@"
<div style='text-align: center; font-family: Georgia;'>
<img src='data:image/png;base64,{logoBase64}' width='100'
style='opacity: 0.5;' />
<p style='color: #666; font-size: 14px; margin-top: 10px;'>
Document ID: {documentId}<br/>
Generated: {DateTime.Now:yyyy-MM-dd HH:mm}<br/>
User: {currentUser}
</p>
</div>";
// Apply to specific pages with custom positioning
pdf.ApplyWatermark(dynamicWatermark,
pageIndexes: new[] { 0, 2, 4 }, // First, third, fifth pages
rotation: 0,
opacity: 50,
verticalOffset: -100, // 100px from center
horizontalOffset: 200
);
// Background watermark (behind content)
var backgroundWatermark = new HtmlStamper()
{
Html = "<h1 style='color: #f0f0f0; font-size: 120px;'>DRAFT</h1>",
Opacity = 10,
IsStampBehindContent = true,
VerticalAlignment = VerticalAlignment.Middle,
HorizontalAlignment = HorizontalAlignment.Center
};
pdf.ApplyStamp(backgroundWatermark);
// Batch watermarking with performance optimization
var options = new WatermarkOptions()
{
UseParallelProcessing = true,
CacheWatermarkImage = true
};
foreach (var page in pdf.Pages)
{
page.ApplyWatermark("© 2024 Company Name", options);
}
pdf.SaveAs("watermarked-document.pdf");
Imports IronPdf
Imports IronPdf.Editing
' Create renderer for new PDFs
Private renderer = New ChromePdfRenderer()
' Generate PDF from URL
Private pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/features/")
' HTML/CSS watermark with transparency and rotation
pdf.ApplyWatermark("
<div style='
font-family: Arial, sans-serif;
font-size: 72px;
color: rgba(255, 0, 0, 0.3);
transform: rotate(-45deg);
text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
'>
CONFIDENTIAL
</div>", rotation:= 45, opacity:= 30, verticalAlignment:= VerticalAlignment.Middle, horizontalAlignment:= HorizontalAlignment.Center)
' Advanced watermark with dynamic content
Dim dynamicWatermark As String = $"
<div style='text-align: center; font-family: Georgia;'>
<img src='data:image/png;base64,{logoBase64}' width='100'
style='opacity: 0.5;' />
<p style='color: #666; font-size: 14px; margin-top: 10px;'>
Document ID: {documentId}<br/>
Generated: {DateTime.Now:yyyy-MM-dd HH:mm}<br/>
User: {currentUser}
</p>
</div>"
' Apply to specific pages with custom positioning
pdf.ApplyWatermark(dynamicWatermark, pageIndexes:= { 0, 2, 4 }, rotation:= 0, opacity:= 50, verticalOffset:= -100, horizontalOffset:= 200)
' Background watermark (behind content)
Dim backgroundWatermark = New HtmlStamper() With {
.Html = "<h1 style='color: #f0f0f0; font-size: 120px;'>DRAFT</h1>",
.Opacity = 10,
.IsStampBehindContent = True,
.VerticalAlignment = VerticalAlignment.Middle,
.HorizontalAlignment = HorizontalAlignment.Center
}
pdf.ApplyStamp(backgroundWatermark)
' Batch watermarking with performance optimization
Dim options = New WatermarkOptions() With {
.UseParallelProcessing = True,
.CacheWatermarkImage = True
}
For Each page In pdf.Pages
page.ApplyWatermark("© 2024 Company Name", options)
Next page
pdf.SaveAs("watermarked-document.pdf")
IronPDF'nin filigranlaması, gradyanlar, gölgeler ve duyarlı düzenler gibi karmaşık tasarımlar sağlayarak tam HTML/CSS işleme kullanır. filigranlama örnekleri, QR kodu filigranları ve dinamik içerik enjeksiyonu gibi gelişmiş teknikleri sergiler.
Aspose.PDF Filigranlama Örneği
using Aspose.Pdf;
using Aspose.Pdf.Text;
Document document = new Document("input.pdf");
// Text stamp as watermark
TextStamp textStamp = new TextStamp("CONFIDENTIAL")
{
Background = true, // Behind content
Opacity = 0.3,
TextAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
RotateAngle = 45,
TextState = new TextState()
{
Font = FontRepository.FindFont("Arial"),
FontSize = 72,
ForegroundColor = Color.Red,
FontStyle = FontStyles.Bold
}
};
// Apply to all pages
foreach (Page page in document.Pages)
{
page.AddStamp(textStamp);
}
// Image watermark
ImageStamp imageStamp = new ImageStamp("logo.png")
{
Background = true,
Opacity = 0.2,
Width = 200,
Height = 100,
XIndent = page.PageInfo.Width / 2 - 100,
YIndent = page.PageInfo.Height / 2 - 50
};
// Artifact-based watermark (PDF/A compliant)
WatermarkArtifact watermark = new WatermarkArtifact();
watermark.SetText("SAMPLE");
watermark.ArtifactHorizontalAlignment = HorizontalAlignment.Center;
watermark.ArtifactVerticalAlignment = VerticalAlignment.Center;
watermark.Rotation = 45;
watermark.Opacity = 0.5;
watermark.IsBackground = true;
// Complex positioning requires calculation
foreach (Page page in document.Pages)
{
// Elle centering
double pageWidth = page.PageInfo.Width;
double pageHeight = page.PageInfo.Height;
TextStamp positionedStamp = new TextStamp("Page " + page.Number)
{
XIndent = pageWidth - 100,
YIndent = 20,
TextState = new TextState()
{
FontSize = 10,
ForegroundColor = Color.Gray
}
};
page.AddStamp(positionedStamp);
}
document.Save("watermarked.pdf");
using Aspose.Pdf;
using Aspose.Pdf.Text;
Document document = new Document("input.pdf");
// Text stamp as watermark
TextStamp textStamp = new TextStamp("CONFIDENTIAL")
{
Background = true, // Behind content
Opacity = 0.3,
TextAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
RotateAngle = 45,
TextState = new TextState()
{
Font = FontRepository.FindFont("Arial"),
FontSize = 72,
ForegroundColor = Color.Red,
FontStyle = FontStyles.Bold
}
};
// Apply to all pages
foreach (Page page in document.Pages)
{
page.AddStamp(textStamp);
}
// Image watermark
ImageStamp imageStamp = new ImageStamp("logo.png")
{
Background = true,
Opacity = 0.2,
Width = 200,
Height = 100,
XIndent = page.PageInfo.Width / 2 - 100,
YIndent = page.PageInfo.Height / 2 - 50
};
// Artifact-based watermark (PDF/A compliant)
WatermarkArtifact watermark = new WatermarkArtifact();
watermark.SetText("SAMPLE");
watermark.ArtifactHorizontalAlignment = HorizontalAlignment.Center;
watermark.ArtifactVerticalAlignment = VerticalAlignment.Center;
watermark.Rotation = 45;
watermark.Opacity = 0.5;
watermark.IsBackground = true;
// Complex positioning requires calculation
foreach (Page page in document.Pages)
{
// Elle centering
double pageWidth = page.PageInfo.Width;
double pageHeight = page.PageInfo.Height;
TextStamp positionedStamp = new TextStamp("Page " + page.Number)
{
XIndent = pageWidth - 100,
YIndent = 20,
TextState = new TextState()
{
FontSize = 10,
ForegroundColor = Color.Gray
}
};
page.AddStamp(positionedStamp);
}
document.Save("watermarked.pdf");
Imports Aspose.Pdf
Imports Aspose.Pdf.Text
Dim document As New Document("input.pdf")
' Text stamp as watermark
Dim textStamp As New TextStamp("CONFIDENTIAL") With {
.Background = True, ' Behind content
.Opacity = 0.3,
.TextAlignment = HorizontalAlignment.Center,
.VerticalAlignment = VerticalAlignment.Center,
.RotateAngle = 45,
.TextState = New TextState() With {
.Font = FontRepository.FindFont("Arial"),
.FontSize = 72,
.ForegroundColor = Color.Red,
.FontStyle = FontStyles.Bold
}
}
' Apply to all pages
For Each page As Page In document.Pages
page.AddStamp(textStamp)
Next
' Image watermark
Dim imageStamp As New ImageStamp("logo.png") With {
.Background = True,
.Opacity = 0.2,
.Width = 200,
.Height = 100,
.XIndent = page.PageInfo.Width / 2 - 100,
.YIndent = page.PageInfo.Height / 2 - 50
}
' Artifact-based watermark (PDF/A compliant)
Dim watermark As New WatermarkArtifact()
watermark.SetText("SAMPLE")
watermark.ArtifactHorizontalAlignment = HorizontalAlignment.Center
watermark.ArtifactVerticalAlignment = VerticalAlignment.Center
watermark.Rotation = 45
watermark.Opacity = 0.5
watermark.IsBackground = True
' Complex positioning requires calculation
For Each page As Page In document.Pages
' Elle centering
Dim pageWidth As Double = page.PageInfo.Width
Dim pageHeight As Double = page.PageInfo.Height
Dim positionedStamp As New TextStamp("Page " & page.Number) With {
.XIndent = pageWidth - 100,
.YIndent = 20,
.TextState = New TextState() With {
.FontSize = 10,
.ForegroundColor = Color.Gray
}
}
page.AddStamp(positionedStamp)
Next
document.Save("watermarked.pdf")
Aspose.PDF'nin damgalama yaklaşımı, manuel konum hesaplamalarını gerektirir ve karmaşık filigranlar için yerel HTML işleme eksiktir. TextStamp, ImageStamp ve WatermarkArtifact sınıfları arasındaki ayrım, birleşik filigranlama iş akışlarını karmaşık hale getirir.
Filigranlama Performans Analizi
Filigranlama konusundaki temel farklılıklar şunlardır:
| Boyut | IronPDF | Aspose.PDF | Gerçek dünya Etkisi |
|---|---|---|---|
| HTML/CSS Desteği | Tam işleme | Yalnızca Metin/Görsel | Tasarım esnekliği |
| Toplu Performans | 1000 sayfa/dakika | 600 sayfa/dakika | IronPDF ile %40 daha hızlı |
| Bellek Kullanımı | Optimize edilmiş önbellek | Standart | IronPDF daha büyük partileri ele alır |
| Dinamik İçerik | Yerel destek | Manuel montaj | Daha hızlı geliştirme |
| Şeffaflık | Alfa kanalı | Sadece Opaklık | Daha iyi görsel efektler |
İçerik Damgalama Özellikleri Nasıl Karşılaştırılır?
İçerik damgalama, PDF belgelerinde üstbilgi, altbilgi, sayfa numaraları ve diğer tekrar eden öğeleri ekler. Uygulama verimliliği, belge oluşturma iş akışlarını doğrudan etkiler.
IronPDF Damgalama Örneği
using IronPdf;
using IronPdf.Editing;
// Load or create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Annual Report 2024</h1>");
// Advanced header with dynamic content
var headerStamper = new HtmlStamper()
{
Html = @"
<div style='display: flex; justify-content: space-between;
align-items: center; width: 100%; padding: 10px;
border-bottom: 2px solid #333;'>
<img src='logo.png' height='40' />
<div style='text-align: center;'>
<h3 style='margin: 0;'>{title}</h3>
<p style='margin: 0; font-size: 10px;'>CONFIDENTIAL</p>
</div>
<div style='text-align: right; font-size: 10px;'>
Page {page} of {total}<br/>
{date}
</div>
</div>",
VerticalAlignment = VerticalAlignment.Top,
HorizontalAlignment = HorizontalAlignment.Center,
Width = Unit.Percentage(100),
Height = Unit.Millimeters(20)
};
// Apply with merge fields
pdf.ApplyStamp(headerStamper, new StampOptions()
{
MergeFields = new Dictionary<string, string>()
{
{ "title", "Financial Statement" },
{ "date", DateTime.Now.ToString("MMMM d, yyyy") }
},
PageNumbers = new[] { 1, 2, 3 } // Specific pages
});
// Text stamper with Google Yazı Tipleri
TextStamper textStamper = new TextStamper()
{
Text = "© 2024 IronPDF Çözümüs",
FontFamily = "Roboto",
UseGoogleFont = true,
FontSize = 12,
TextColor = Color.FromArgb(100, 100, 100),
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalOffset = Unit.Millimeters(10)
};
pdf.ApplyStamp(textStamper);
// Image stamper with precise positioning
ImageStamper logoStamper = new ImageStamper("qr-code.png")
{
Width = Unit.Inches(1),
Height = Unit.Inches(1),
HorizontalAlignment = HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalOffset = Unit.Millimeters(-10),
VerticalOffset = Unit.Millimeters(-10),
Hyperlink = "https://ironpdf.com"
};
// Barcode stamper (using HTML5 canvas)
var barcodeStamper = new HtmlStamper()
{
Html = @"
<canvas id='barcode'></canvas>
<script src='https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js'></script>
<script>
JsBarcode('#barcode', 'ISBN-978-3-16-148410-0', {
format: 'code128',
width: 2,
height: 50
});
</script>",
Width = Unit.Millimeters(60),
Height = Unit.Millimeters(20)
};
// Apply all stamps with batch processing
pdf.ApplyMultipleStamps(new List<Stamper>
{
headerStamper,
textStamper,
logoStamper,
barcodeStamper
});
// Page numbering with custom format
pdf.AddPageNumbers(new PageNumberOptions()
{
Format = "Page {current} of {total}",
Font = new FontOptions("Arial", 10),
Position = PageNumberPosition.BottomCenter,
StartNumber = 1,
SkipPages = new[] { 0 } // Skip first page
});
pdf.SaveAs("stamped-report.pdf");
using IronPdf;
using IronPdf.Editing;
// Load or create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Annual Report 2024</h1>");
// Advanced header with dynamic content
var headerStamper = new HtmlStamper()
{
Html = @"
<div style='display: flex; justify-content: space-between;
align-items: center; width: 100%; padding: 10px;
border-bottom: 2px solid #333;'>
<img src='logo.png' height='40' />
<div style='text-align: center;'>
<h3 style='margin: 0;'>{title}</h3>
<p style='margin: 0; font-size: 10px;'>CONFIDENTIAL</p>
</div>
<div style='text-align: right; font-size: 10px;'>
Page {page} of {total}<br/>
{date}
</div>
</div>",
VerticalAlignment = VerticalAlignment.Top,
HorizontalAlignment = HorizontalAlignment.Center,
Width = Unit.Percentage(100),
Height = Unit.Millimeters(20)
};
// Apply with merge fields
pdf.ApplyStamp(headerStamper, new StampOptions()
{
MergeFields = new Dictionary<string, string>()
{
{ "title", "Financial Statement" },
{ "date", DateTime.Now.ToString("MMMM d, yyyy") }
},
PageNumbers = new[] { 1, 2, 3 } // Specific pages
});
// Text stamper with Google Yazı Tipleri
TextStamper textStamper = new TextStamper()
{
Text = "© 2024 IronPDF Çözümüs",
FontFamily = "Roboto",
UseGoogleFont = true,
FontSize = 12,
TextColor = Color.FromArgb(100, 100, 100),
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalOffset = Unit.Millimeters(10)
};
pdf.ApplyStamp(textStamper);
// Image stamper with precise positioning
ImageStamper logoStamper = new ImageStamper("qr-code.png")
{
Width = Unit.Inches(1),
Height = Unit.Inches(1),
HorizontalAlignment = HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalOffset = Unit.Millimeters(-10),
VerticalOffset = Unit.Millimeters(-10),
Hyperlink = "https://ironpdf.com"
};
// Barcode stamper (using HTML5 canvas)
var barcodeStamper = new HtmlStamper()
{
Html = @"
<canvas id='barcode'></canvas>
<script src='https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js'></script>
<script>
JsBarcode('#barcode', 'ISBN-978-3-16-148410-0', {
format: 'code128',
width: 2,
height: 50
});
</script>",
Width = Unit.Millimeters(60),
Height = Unit.Millimeters(20)
};
// Apply all stamps with batch processing
pdf.ApplyMultipleStamps(new List<Stamper>
{
headerStamper,
textStamper,
logoStamper,
barcodeStamper
});
// Page numbering with custom format
pdf.AddPageNumbers(new PageNumberOptions()
{
Format = "Page {current} of {total}",
Font = new FontOptions("Arial", 10),
Position = PageNumberPosition.BottomCenter,
StartNumber = 1,
SkipPages = new[] { 0 } // Skip first page
});
pdf.SaveAs("stamped-report.pdf");
Imports IronPdf
Imports IronPdf.Editing
Imports System.Drawing
' Load or create PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Annual Report 2024</h1>")
' Advanced header with dynamic content
Dim headerStamper As New HtmlStamper() With {
.Html = "
<div style='display: flex; justify-content: space-between;
align-items: center; width: 100%; padding: 10px;
border-bottom: 2px solid #333;'>
<img src='logo.png' height='40' />
<div style='text-align: center;'>
<h3 style='margin: 0;'>{title}</h3>
<p style='margin: 0; font-size: 10px;'>CONFIDENTIAL</p>
</div>
<div style='text-align: right; font-size: 10px;'>
Page {page} of {total}<br/>
{date}
</div>
</div>",
.VerticalAlignment = VerticalAlignment.Top,
.HorizontalAlignment = HorizontalAlignment.Center,
.Width = Unit.Percentage(100),
.Height = Unit.Millimeters(20)
}
' Apply with merge fields
pdf.ApplyStamp(headerStamper, New StampOptions() With {
.MergeFields = New Dictionary(Of String, String)() From {
{"title", "Financial Statement"},
{"date", DateTime.Now.ToString("MMMM d, yyyy")}
},
.PageNumbers = New Integer() {1, 2, 3} ' Specific pages
})
' Text stamper with Google Fonts
Dim textStamper As New TextStamper() With {
.Text = "© 2024 IronPDF Çözümüs",
.FontFamily = "Roboto",
.UseGoogleFont = True,
.FontSize = 12,
.TextColor = Color.FromArgb(100, 100, 100),
.VerticalAlignment = VerticalAlignment.Bottom,
.HorizontalAlignment = HorizontalAlignment.Center,
.VerticalOffset = Unit.Millimeters(10)
}
pdf.ApplyStamp(textStamper)
' Image stamper with precise positioning
Dim logoStamper As New ImageStamper("qr-code.png") With {
.Width = Unit.Inches(1),
.Height = Unit.Inches(1),
.HorizontalAlignment = HorizontalAlignment.Right,
.VerticalAlignment = VerticalAlignment.Bottom,
.HorizontalOffset = Unit.Millimeters(-10),
.VerticalOffset = Unit.Millimeters(-10),
.Hyperlink = "https://ironpdf.com"
}
' Barcode stamper (using HTML5 canvas)
Dim barcodeStamper As New HtmlStamper() With {
.Html = "
<canvas id='barcode'></canvas>
<script src='https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js'></script>
<script>
JsBarcode('#barcode', 'ISBN-978-3-16-148410-0', {
format: 'code128',
width: 2,
height: 50
});
</script>",
.Width = Unit.Millimeters(60),
.Height = Unit.Millimeters(20)
}
' Apply all stamps with batch processing
pdf.ApplyMultipleStamps(New List(Of Stamper) From {
headerStamper,
textStamper,
logoStamper,
barcodeStamper
})
' Page numbering with custom format
pdf.AddPageNumbers(New PageNumberOptions() With {
.Format = "Page {current} of {total}",
.Font = New FontOptions("Arial", 10),
.Position = PageNumberPosition.BottomCenter,
.StartNumber = 1,
.SkipPages = New Integer() {0} ' Skip first page
})
pdf.SaveAs("stamped-report.pdf")
.NET'nin damgalama API'si, metin, görüntü ve HTML içeriğini polimorfik Stamper sınıfları üzerinden birleştirir. Framework, duyarlı düzenler, birleştirme alanları ve dinamik içerik oluşturmayı destekler. Gelişmiş özellikler, IronQR kütüphanesi aracılığıyla barkod entegrasyonu ve QR kodu damgalama içerir.
Aspose.PDF Damgalama Örneği
using Aspose.Pdf;
using Aspose.Pdf.Text;
Document document = new Document("report.pdf");
// Header setup requires manual positioning
foreach (Page page in document.Pages)
{
// Calculate positions
double pageWidth = page.PageInfo.Width;
double pageHeight = page.PageInfo.Height;
// Company logo
ImageStamp logoStamp = new ImageStamp("logo.png")
{
TopMargin = 10,
HorizontalAlignment = HorizontalAlignment.Left,
Width = 100,
Height = 40
};
page.AddStamp(logoStamp);
// Header text
TextStamp headerText = new TextStamp("Annual Report 2024")
{
TopMargin = 20,
HorizontalAlignment = HorizontalAlignment.Center,
TextState = new TextState()
{
Font = FontRepository.FindFont("Arial"),
FontSize = 16,
FontStyle = FontStyles.Bold
}
};
page.AddStamp(headerText);
// Page numbers require string building
TextStamp pageNumber = new TextStamp($"Page {document.Pages.IndexOf(page) + 1} of {document.Pages.Count}")
{
BottomMargin = 20,
HorizontalAlignment = HorizontalAlignment.Center,
TextState = new TextState()
{
FontSize = 10,
ForegroundColor = Color.Gray
}
};
page.AddStamp(pageNumber);
}
// Footer with multiple elements
TextFragment footerLeft = new TextFragment("© 2024 Company Name");
TextFragment footerRight = new TextFragment(DateTime.Now.ToString("MMMM d, yyyy"));
// Elle positioning for footer elements
Table footerTable = new Table()
{
ColumnWidths = "250 250"
};
Row footerRow = footerTable.Rows.Add();
footerRow.Cells.Add(footerLeft.Text);
footerRow.Cells.Add(footerRight.Text);
footerRow.Cells[1].Alignment = HorizontalAlignment.Right;
// Add to each page
foreach (Page page in document.Pages)
{
page.Paragraphs.Add(footerTable);
}
// Barcode requires external library or manual drawing
// No built-in barcode support
document.Save("stamped.pdf");
using Aspose.Pdf;
using Aspose.Pdf.Text;
Document document = new Document("report.pdf");
// Header setup requires manual positioning
foreach (Page page in document.Pages)
{
// Calculate positions
double pageWidth = page.PageInfo.Width;
double pageHeight = page.PageInfo.Height;
// Company logo
ImageStamp logoStamp = new ImageStamp("logo.png")
{
TopMargin = 10,
HorizontalAlignment = HorizontalAlignment.Left,
Width = 100,
Height = 40
};
page.AddStamp(logoStamp);
// Header text
TextStamp headerText = new TextStamp("Annual Report 2024")
{
TopMargin = 20,
HorizontalAlignment = HorizontalAlignment.Center,
TextState = new TextState()
{
Font = FontRepository.FindFont("Arial"),
FontSize = 16,
FontStyle = FontStyles.Bold
}
};
page.AddStamp(headerText);
// Page numbers require string building
TextStamp pageNumber = new TextStamp($"Page {document.Pages.IndexOf(page) + 1} of {document.Pages.Count}")
{
BottomMargin = 20,
HorizontalAlignment = HorizontalAlignment.Center,
TextState = new TextState()
{
FontSize = 10,
ForegroundColor = Color.Gray
}
};
page.AddStamp(pageNumber);
}
// Footer with multiple elements
TextFragment footerLeft = new TextFragment("© 2024 Company Name");
TextFragment footerRight = new TextFragment(DateTime.Now.ToString("MMMM d, yyyy"));
// Elle positioning for footer elements
Table footerTable = new Table()
{
ColumnWidths = "250 250"
};
Row footerRow = footerTable.Rows.Add();
footerRow.Cells.Add(footerLeft.Text);
footerRow.Cells.Add(footerRight.Text);
footerRow.Cells[1].Alignment = HorizontalAlignment.Right;
// Add to each page
foreach (Page page in document.Pages)
{
page.Paragraphs.Add(footerTable);
}
// Barcode requires external library or manual drawing
// No built-in barcode support
document.Save("stamped.pdf");
Imports Aspose.Pdf
Imports Aspose.Pdf.Text
Dim document As New Document("report.pdf")
' Header setup requires manual positioning
For Each page As Page In document.Pages
' Calculate positions
Dim pageWidth As Double = page.PageInfo.Width
Dim pageHeight As Double = page.PageInfo.Height
' Company logo
Dim logoStamp As New ImageStamp("logo.png") With {
.TopMargin = 10,
.HorizontalAlignment = HorizontalAlignment.Left,
.Width = 100,
.Height = 40
}
page.AddStamp(logoStamp)
' Header text
Dim headerText As New TextStamp("Annual Report 2024") With {
.TopMargin = 20,
.HorizontalAlignment = HorizontalAlignment.Center,
.TextState = New TextState() With {
.Font = FontRepository.FindFont("Arial"),
.FontSize = 16,
.FontStyle = FontStyles.Bold
}
}
page.AddStamp(headerText)
' Page numbers require string building
Dim pageNumber As New TextStamp($"Page {document.Pages.IndexOf(page) + 1} of {document.Pages.Count}") With {
.BottomMargin = 20,
.HorizontalAlignment = HorizontalAlignment.Center,
.TextState = New TextState() With {
.FontSize = 10,
.ForegroundColor = Color.Gray
}
}
page.AddStamp(pageNumber)
Next
' Footer with multiple elements
Dim footerLeft As New TextFragment("© 2024 Company Name")
Dim footerRight As New TextFragment(DateTime.Now.ToString("MMMM d, yyyy"))
' Elle positioning for footer elements
Dim footerTable As New Table() With {
.ColumnWidths = "250 250"
}
Dim footerRow As Row = footerTable.Rows.Add()
footerRow.Cells.Add(footerLeft.Text)
footerRow.Cells.Add(footerRight.Text)
footerRow.Cells(1).Alignment = HorizontalAlignment.Right
' Add to each page
For Each page As Page In document.Pages
page.Paragraphs.Add(footerTable)
Next
' Barcode requires external library or manual drawing
' No built-in barcode support
document.Save("stamped.pdf")
Aspose.PDF'nin damgalaması, manuel yerleşim hesaplamalarını gerektirir ve birleşik içerik işleme yeteneğinden yoksundur. Karmaşık üstbilgiler ve altbilgiler, profesyonel belgeler için geliştirme süresini artıran özel konumlandırma mantığına ihtiyaç duyar.
Damgalama Yeteneği Karşılaştırması
| Özellik | IronPDF | Aspose.PDF | Geliştirici Deneyimi |
|---|---|---|---|
| HTML Üstbilgiler/Altbilgiler | Yerel | Yalnızca Metin | IronPDF zengin formatlamaya olanak tanır |
| Dinamik İçerik | Birleştirme alanları | Elle | Basitleştirilmiş değişken ikamesi |
| Toplu Damgalama | Optimizasyon | Standart döngü | Büyük belgeler için 3 kat daha hızlı |
| Barkod Desteği | HTML/JS Aracılığıyla | Harici | IronPDF barkod işleme içerir |
| Duyarlı Düzen | CSS Flexbox | Fixed | Modern düzen teknikleri |
| Google Yazı Tipleri | Doğrudan destek | Sistem yalnızca | Gelişmiş tipografi |
Dosya Formatı Dönüşüm Özellikleri Nasıl Karşılaştırılır?
Belge formatları arasında dönüşüm yapmak, belge işleme iş akışlarında yaygın bir gereksinim temsil eder. Her bir kütüphanenin yerel kapasitesi, proje mimarisini önemli ölçüde etkiler.
IronPDF DOCX'ten PDF'e Dönüşüm
using IronPdf;
// Direct DOCX'ten PDF'ye conversion
DocxToPdfRenderer docxRenderer = new DocxToPdfRenderer();
// Simple conversion with default settings
PdfDocument pdf = docxRenderer.RenderDocxAsPdf("proposal.docx");
pdf.SaveAs("proposal.pdf");
// Advanced conversion with options
var renderOptions = new DocxPdfRenderOptions()
{
// Maintain document formatting
PreserveFormFields = true,
ConvertBookmarks = true,
ConvertHyperlinks = true,
// Page setup
PaperSize = IronPdf.Rendering.PdfPaperSize.Letter,
MarginTop = 25,
MarginBottom = 25,
// Quality settings
ImageQuality = 90,
EnableJavaScript = false // Disable for static documents
};
// Batch conversion with progress tracking
var docxFiles = Directory.GetFiles("contracts/", "*.docx");
var conversionTasks = new List<Task<PdfDocument>>();
foreach (var docxFile in docxFiles)
{
var task = Task.Run(() =>
{
var renderer = new DocxToPdfRenderer();
return renderer.RenderDocxAsPdf(docxFile, renderOptions);
});
conversionTasks.Add(task);
}
// Await all conversions
var pdfDocuments = await Task.WhenAll(conversionTasks);
// Merge into single PDF
var mergedPdf = PdfDocument.Merge(pdfDocuments);
mergedPdf.SaveAs("all-contracts.pdf");
// Convert with embedded resources
var complexDocx = docxRenderer.RenderDocxAsPdf("report-with-images.docx");
complexDocx.CompressImages(80); // Optimize file size
complexDocx.SaveAs("compressed-report.pdf");
using IronPdf;
// Direct DOCX'ten PDF'ye conversion
DocxToPdfRenderer docxRenderer = new DocxToPdfRenderer();
// Simple conversion with default settings
PdfDocument pdf = docxRenderer.RenderDocxAsPdf("proposal.docx");
pdf.SaveAs("proposal.pdf");
// Advanced conversion with options
var renderOptions = new DocxPdfRenderOptions()
{
// Maintain document formatting
PreserveFormFields = true,
ConvertBookmarks = true,
ConvertHyperlinks = true,
// Page setup
PaperSize = IronPdf.Rendering.PdfPaperSize.Letter,
MarginTop = 25,
MarginBottom = 25,
// Quality settings
ImageQuality = 90,
EnableJavaScript = false // Disable for static documents
};
// Batch conversion with progress tracking
var docxFiles = Directory.GetFiles("contracts/", "*.docx");
var conversionTasks = new List<Task<PdfDocument>>();
foreach (var docxFile in docxFiles)
{
var task = Task.Run(() =>
{
var renderer = new DocxToPdfRenderer();
return renderer.RenderDocxAsPdf(docxFile, renderOptions);
});
conversionTasks.Add(task);
}
// Await all conversions
var pdfDocuments = await Task.WhenAll(conversionTasks);
// Merge into single PDF
var mergedPdf = PdfDocument.Merge(pdfDocuments);
mergedPdf.SaveAs("all-contracts.pdf");
// Convert with embedded resources
var complexDocx = docxRenderer.RenderDocxAsPdf("report-with-images.docx");
complexDocx.CompressImages(80); // Optimize file size
complexDocx.SaveAs("compressed-report.pdf");
Imports IronPdf
Imports System.IO
Imports System.Threading.Tasks
Imports System.Collections.Generic
' Direct DOCX to PDF conversion
Dim docxRenderer As New DocxToPdfRenderer()
' Simple conversion with default settings
Dim pdf As PdfDocument = docxRenderer.RenderDocxAsPdf("proposal.docx")
pdf.SaveAs("proposal.pdf")
' Advanced conversion with options
Dim renderOptions As New DocxPdfRenderOptions() With {
.PreserveFormFields = True,
.ConvertBookmarks = True,
.ConvertHyperlinks = True,
.PaperSize = IronPdf.Rendering.PdfPaperSize.Letter,
.MarginTop = 25,
.MarginBottom = 25,
.ImageQuality = 90,
.EnableJavaScript = False
}
' Batch conversion with progress tracking
Dim docxFiles As String() = Directory.GetFiles("contracts/", "*.docx")
Dim conversionTasks As New List(Of Task(Of PdfDocument))()
For Each docxFile As String In docxFiles
Dim task As Task(Of PdfDocument) = Task.Run(Function()
Dim renderer As New DocxToPdfRenderer()
Return renderer.RenderDocxAsPdf(docxFile, renderOptions)
End Function)
conversionTasks.Add(task)
Next
' Await all conversions
Dim pdfDocuments As PdfDocument() = Await Task.WhenAll(conversionTasks)
' Merge into single PDF
Dim mergedPdf As PdfDocument = PdfDocument.Merge(pdfDocuments)
mergedPdf.SaveAs("all-contracts.pdf")
' Convert with embedded resources
Dim complexDocx As PdfDocument = docxRenderer.RenderDocxAsPdf("report-with-images.docx")
complexDocx.CompressImages(80) ' Optimize file size
complexDocx.SaveAs("compressed-report.pdf")
IronPDF, yerel DOCX desteğini, harici bağımlılıkları ortadan kaldırarak DocxToPdfRenderer sınıfı aracılığıyla içerir. Dönüşüm, formatlamayı, görselleri, tabloları ve belge yapısını korur. DOCX dönüşüm belgeleri, posta birleştirme ve şablon işleme dahil gelişmiş senaryoları kapsar.
Aspose.PDF Dosya Dönüşüm Yaklaşımı
using Aspose.Words; // Required additional package
using Aspose.Words.Saving;
using Aspose.Pdf;
// DOCX conversion requires Aspose.Words
Document wordDoc = new Document("proposal.docx");
// Convert to PDF via Aspose.Words
MemoryStream pdfStream = new MemoryStream();
wordDoc.Save(pdfStream, SaveFormat.Pdf);
// Load into Aspose.PDF for further processing
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(pdfStream);
// Now can use Aspose.PDF features
pdfDoc.Encrypt("user", "owner",
Aspose.Pdf.Permissions.PrintDocument,
Aspose.Pdf.CryptoAlgorithm.AESx256);
pdfDoc.Save("encrypted-proposal.pdf");
// Excel conversion requires Aspose.Cells
// PowerPoint requires Aspose.Slides
// Each format needs separate license and API
// PDF to other formats
var pdfConverter = new Aspose.Pdf.Document("input.pdf");
// Convert to Word (limited fidelity)
DocSaveOptions saveOptions = new DocSaveOptions()
{
Format = DocSaveOptions.DocFormat.DocX,
Mode = DocSaveOptions.RecognitionMode.Flow
};
pdfConverter.Save("output.docx", saveOptions);
// Convert to HTML
HtmlSaveOptions htmlOptions = new HtmlSaveOptions()
{
SplitIntoPages = true,
SplitCssIntoPages = false,
CustomCssSavingStrategy = new HtmlSaveOptions.CssSavingStrategy(CssSavingStrategy)
};
pdfConverter.Save("output.html", htmlOptions);
using Aspose.Words; // Required additional package
using Aspose.Words.Saving;
using Aspose.Pdf;
// DOCX conversion requires Aspose.Words
Document wordDoc = new Document("proposal.docx");
// Convert to PDF via Aspose.Words
MemoryStream pdfStream = new MemoryStream();
wordDoc.Save(pdfStream, SaveFormat.Pdf);
// Load into Aspose.PDF for further processing
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(pdfStream);
// Now can use Aspose.PDF features
pdfDoc.Encrypt("user", "owner",
Aspose.Pdf.Permissions.PrintDocument,
Aspose.Pdf.CryptoAlgorithm.AESx256);
pdfDoc.Save("encrypted-proposal.pdf");
// Excel conversion requires Aspose.Cells
// PowerPoint requires Aspose.Slides
// Each format needs separate license and API
// PDF to other formats
var pdfConverter = new Aspose.Pdf.Document("input.pdf");
// Convert to Word (limited fidelity)
DocSaveOptions saveOptions = new DocSaveOptions()
{
Format = DocSaveOptions.DocFormat.DocX,
Mode = DocSaveOptions.RecognitionMode.Flow
};
pdfConverter.Save("output.docx", saveOptions);
// Convert to HTML
HtmlSaveOptions htmlOptions = new HtmlSaveOptions()
{
SplitIntoPages = true,
SplitCssIntoPages = false,
CustomCssSavingStrategy = new HtmlSaveOptions.CssSavingStrategy(CssSavingStrategy)
};
pdfConverter.Save("output.html", htmlOptions);
Imports Aspose.Words ' Required additional package
Imports Aspose.Words.Saving
Imports Aspose.Pdf
' DOCX conversion requires Aspose.Words
Private wordDoc As New Document("proposal.docx")
' Convert to PDF via Aspose.Words
Private pdfStream As New MemoryStream()
wordDoc.Save(pdfStream, SaveFormat.Pdf)
' Load into Aspose.PDF for further processing
Dim pdfDoc As New Aspose.Pdf.Document(pdfStream)
' Now can use Aspose.PDF features
pdfDoc.Encrypt("user", "owner", Aspose.Pdf.Permissions.PrintDocument, Aspose.Pdf.CryptoAlgorithm.AESx256)
pdfDoc.Save("encrypted-proposal.pdf")
' Excel conversion requires Aspose.Cells
' PowerPoint requires Aspose.Slides
' Each format needs separate license and API
' PDF to other formats
Dim pdfConverter = New Aspose.Pdf.Document("input.pdf")
' Convert to Word (limited fidelity)
Dim saveOptions As New DocSaveOptions() With {
.Format = DocSaveOptions.DocFormat.DocX,
.Mode = DocSaveOptions.RecognitionMode.Flow
}
pdfConverter.Save("output.docx", saveOptions)
' Convert to HTML
Dim htmlOptions As New HtmlSaveOptions() With {
.SplitIntoPages = True,
.SplitCssIntoPages = False,
.CustomCssSavingStrategy = New HtmlSaveOptions.CssSavingStrategy(CssSavingStrategy)
}
pdfConverter.Save("output.html", htmlOptions)
Aspose.PDF, DOCX dosyalarını doğrudan dönüştüremez, ek bir bağımlılık olarak Aspose.Words gerektirir. Bu mimari karar, lisans maliyetlerini ve API karmaşıklığını etkiler. Her bir belge formatı, kendi öğrenme ivmesiyle birlikte ayrı bir Aspose ürünü gerektirir.
Format Dönüşüm Karşılaştırması
| Dönüşüm Türü | IronPDF | Aspose.PDF | Maliyet Etkisi |
|---|---|---|---|
| DOCX → PDF | Dahili | Aspose.Words gerektirir | Ek {{Aspose_words.small_business}}+ |
| HTML → PDF | Chrome motoru | Temel destek | Kalite farkı |
| PDF → Görseller | Yerel | Destekleniyor | Her ikisi de iyi işler |
| Excel → PDF | HTML aracılığıyla | Aspose.Cells gerektirir | Ek {{Aspose_words.small_business}}+ |
| PDF → HTML | Destekleniyor | Destekleniyor | Her ikisi de işlevsel |
| Markdown → PDF | HTML aracılığıyla | Desteklenmiyor | IronPDF daha esnek |
Stack Overflow tartışmaları sıkça Aspose'nin modüler yaklaşımının maliyet etkilerini, IronPDF'nin entegre işlevselliğine karşı vurgular.
Lisanslama ve Fiyatlandırma Farklılıkları Nelerdir?
Sahip olmanın toplam maliyetini anlamak, teknoloji kararlarını bilgilendirmeye yardımcı olur. Her iki kütüphane de uzun vadeli maliyetleri etkileyen farklı lisanslama modelleri sunar.
IronPDF Lisans Yapısı
IronPDF'nin lisanslaması, gizli maliyetler olmadan şeffaf, süresiz lisanslar sağlar:
-
Lite Lisans ($999): Tek geliştirici, tek proje dağıtımı
- Küçük uygulamalar veya kanıt konseptleri için ideal
- E-posta desteği ve güncellemeleri içerir
- Tekrar eden ücretler olmadan süresiz lisans
-
Plus Lisans ($1,499): Üç geliştirici, üç proje
- 48 saat sohbet desteği ve telefon yardımı
- Küçük ekip geliştirme için uygun
- KOBİ uygulamaları için popüler bir seçim
-
Profesyonel Lisans ($2,999): On geliştirici, on proje
- Ekran paylaşımı ile öncelikli destek
- Daha büyük ekipler için kurumsal hazır
- Sınırsız geliştirme ve test
-
Sınırsız Lisans ($5,999): Sınırsız geliştirici ve proje
- Tam organizasyonel kapsama alanı
- Özel destek kanalı
- Büyük işletmeler için ideal
Ek seçenekler değeri artırır:
- Telif Ücretsiz Yeniden Dağıtım (+$2,999): IronPDF'yi ticari ürünlerde paketleyin
- Kesintisiz Destek ($999/yıl veya $1.999/5 yıl): Kesintisiz güncellemeler ve öncelikli yardım
- Iron Suite ($2,998): Dokuz Iron Software ürünü iki üründen oluşan fiyatla
Aspose.PDF Lisans Yapısı
Aspose.PDF fiyatlandırması farklı bir modele göre gider (Nisan 2026 fiyatları, güncel fiyatlandırmayı kontrol edin çünkü oranlar sık sık değişir):
-
Geliştirici Küçük İşletme (yıllık {{Aspose_pdf.small_business}}/yıl'dan başlayarak): Tek geliştirici, bir konum
- Temel forum desteği dahil
- Telefon veya öncelikli destek yok
- Güncellemeler için tekrar eden ücretler
-
Geliştirici OEM ($5.037): Tek geliştirici, sınırsız konum
- Dağıtılmış yazılım için uygun
- Temel lisansın 3 katı maliyet
- Hâlâ tek geliştirici ile sınırlı
-
Geliştirici SDK'sı ($33.580): Tek geliştirici, 50 dağıtım
- SDK senaryoları için son derece yüksek maliyet
- Sınırlı dağıtım sayısı
- Dikkatli dağıtım takibi gerektirir
Ek maliyetler hızla birikir:
- Ücretli Destek: $399/yıl'dan başlayan (temel seviye)
- Danışmanlık: $5.999/ay'dan itibaren
- Diğer Aspose Ürünleri: Words, Cells, Slides için ayrı lisanslar
Toplam Maliyet Analizi
PDF oluşturma, DOCX dönüştürme ve Excel raporlama gerektiren tipik bir enterprise senaryoyu düşünün:
| Gereksinim | IronPDF Çözümü | Aspose Çözümü | Maliyet Farkı |
|---|---|---|---|
| PDF Kitaplığı | IronPDF Pro ($2,999) | Aspose.PDF ($1,199) | IronPDF daha yüksek |
| DOCX Desteği | Dahil olanlar | Aspose.Words ($1,199) | +$1,199 for Aspose |
| Excel Desteği | HTML/CSV Üzerinden | Aspose.Cells ($1,199) | +$1,199 for Aspose |
| Toplam Maliyet | $2,999 | $5,037 | Aspose %68 daha yüksek |
Kapsamlı belge işleme için Iron Suite $2,998:
- IronPDF (PDF manipülasyonu)
- IronXL (Excel işlemleri)
- IronOCR (optik karakter tanıma)
- IronBarcode (barkod oluşturma)
- IronQR (QR kod işlemleri)
- IronZIP (sıkıştırma)
- IronPrint (yazdırma)
- IronWord (Word işleme)
- IronWebScraper (veri çekme)
Bu, bireysel Aspose ürünleri satın almaya kıyasla olağanüstü bir değer sunar.
Dokümantasyon ve Destek Karşılaştırması Nasıl?
Geliştirici verimliliği büyük ölçüde dokümantasyon kalitesine ve destek mevcudiyetine bağlıdır. Her iki satıcı da bunlara farklı yaklaşıyor.
IronPDF Dokümantasyonu ve Kaynakları
IronPDF kapsamlı öğrenme kaynakları sunar:
- API Referansı: IntelliSense entegrasyonu ile tam sınıf dokümantasyonu
- Eğitimler: Yaygın senaryolar için adım adım rehberler
- Kod Örnekleri: 100+ çalıştırmaya hazır örnek
- Nasıl Yapılır Rehberleri: Görev odaklı dokümantasyon
- Video Eğitimler: YouTube kanalı ile gezintiler
- Sorun Giderme: Yaygın sorunlar ve çözümleri
Topluluk destek kanalları şunları içerir:
- 24/5 Mühendislik Desteği: Geliştirme ekibine doğrudan erişim
- Yanıt Süreleri: Çoğu soru için 24-48 saat
- Ekran Paylaşımı: Professional lisanslar için mevcut
- Topluluk: Aktif GitHub ve Stack Overflow varlığı
Aspose.PDF Dokümantasyonu ve Desteği
Aspose geleneksel dokümantasyon sunar:
- API Dokümantasyonu: Kapsamlı ama yoğun
- Kod Örnekleri: Temel senaryolar kapsanır
- Forum Tabanlı Destek: Topluluk temelli yardım
- Ücretli Destek Kademeleri: Öncelikli yardım için ek maliyet
Destek yaklaşımındaki temel farklar:
- IronPDF, lisans maliyetine profesyonel destek dahil eder
- Aspose, forum dışındaki destek için ayrı ücret alır
- IronPDF doğrudan mühendislik teması sunar
- Aspose daha çok topluluk forumlarına dayanır
Hangi PDF Kütüphanesi Seçilmelidir?
Geniş kapsamlı analiz sonrasında, çeşitli karar faktörleri ortaya çıkıyor:
IronPDF Seçmek Ne Zaman Uygundur
IronPDF şu durumlarda seçilmelidir:
- Basitlik Önemli: Daha temiz API'ler geliştirme süresini azaltır
- HTML Sadakati Kritik: Chrome motoru piksel mükemmelliğinde render sağlar
- Bütçe Sabitse: Gizli maliyet olmadan her şey dahil lisanslama
- DOCX Dönüştürme İhtiyacı: Dahili destek ek lisanslardan tasarruf sağlar
- Çapraz Platform Gereksinimi: Ekstra paket olmadan yerel destek
- Destek Önemli: Lisansa dahil profesyonel destek
Aspose.PDF Seçmek Ne Zaman Uygundur
Aspose.PDF şu durumlarda seçilmelidir:
- Eski Sistemler: Mevcut Aspose ekosistem yatırımı
- Karmaşık Form İşleme: İleri düzey XFA form desteği
- Minimal HTML İhtiyaçları: Sadece temel PDF manipülasyonu
- Bütçe Esnekliği: Birden fazla ürün lisansını karşılayabilme
Performans ve Ölçeklenebilirlik Dikkatleri
Performans değerlendirmeleri gösteriyor ki:
- IronPDF: Daha iyi HTML render performansı, daha hızlı toplu işlemler
- Aspose.PDF: Basit işlemler için daha düşük bellek kullanımı
- IronPDF: Üstün threading ve async destek
- Aspose.PDF: Temel metin çıkartmada daha hızlı
Geçiş Dikkatleri
Aspose.PDF'den IronPDF'ye geçiş şu adımları içerir:
// Aspose.PDF approach
Document doc = new Document();
Page page = doc.Pages.Add();
TextFragment text = new TextFragment("Hello");
page.Paragraphs.Add(text);
// Equivalent IronPDF (simpler)
var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<p>Hello</p>");
// Aspose.PDF approach
Document doc = new Document();
Page page = doc.Pages.Add();
TextFragment text = new TextFragment("Hello");
page.Paragraphs.Add(text);
// Equivalent IronPDF (simpler)
var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<p>Hello</p>");
' Aspose.PDF approach
Dim doc As New Document()
Dim page As Page = doc.Pages.Add()
Dim text As New TextFragment("Hello")
page.Paragraphs.Add(text)
' Equivalent IronPDF (simpler)
Dim pdf = (New ChromePdfRenderer()).RenderHtmlAsPdf("<p>Hello</p>")
Modern CSS Çerçeve Desteği
Web uygulamaları giderek daha fazla Bootstrap, Tailwind CSS ve Foundation gibi modern CSS frameworklerine bağımlı hale geldikçe, bu frameworklerin PDF belgelerinde doğru bir şekilde render edilme yeteneği essential hale geldi. Bu frameworkler, responsive yerleşimler için ağırlıklı olarak flexbox ve CSS Grid gibi CSS3 özelliklerine dayanır.
IronPDF: Tam Bootstrap Desteği
IronPDF'nın Chromium render motoru tüm modern CSS frameworkleri için kapsamlı destek sağlıyor:
- Bootstrap 5: Responsive yerleşimler için tam flexbox ve CSS Grid desteği
- Karmaşık yerleşimler: Bootstrap anasayfasını ve Bootstrap şablonlarını piksel mükemmelinde render eder
- Modern özellikler: CSS3 animasyonlar, dönüşümler, geçişler ve medya sorguları
- CSS frameworkleri: Bootstrap, Tailwind CSS, Foundation, Bulma sorunsuz çalışır
Kod Örneği: Bootstrap İçeriği Render Etme
using IronPdf;
// Render a Bootstrap 5 layout
var renderer = new ChromePdfRenderer();
// Example: Bootstrap pricing table with flexbox
string bootstrapHtml = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='text-center mb-5'>Pricing Plans</h1>
<div class='row g-4'>
<div class='col-lg-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-primary text-white text-center py-4'>
<h4 class='my-0 fw-normal'>Starter</h4>
</div>
<div class='card-body d-flex flex-column'>
<h1 class='card-title pricing-card-title text-center'>$29<small class='text-muted fw-light'>/mo</small></h1>
<ul class='list-unstyled mt-3 mb-4 flex-grow-1'>
<li>✓ 10 users included</li>
<li>✓ 2 GB of storage</li>
<li>✓ Email support</li>
</ul>
<button type='button' class='btn btn-lg btn-outline-primary mt-auto'>Sign up</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapHtml);
pdf.SaveAs("bootstrap-pricing.pdf");
using IronPdf;
// Render a Bootstrap 5 layout
var renderer = new ChromePdfRenderer();
// Example: Bootstrap pricing table with flexbox
string bootstrapHtml = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='text-center mb-5'>Pricing Plans</h1>
<div class='row g-4'>
<div class='col-lg-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-primary text-white text-center py-4'>
<h4 class='my-0 fw-normal'>Starter</h4>
</div>
<div class='card-body d-flex flex-column'>
<h1 class='card-title pricing-card-title text-center'>$29<small class='text-muted fw-light'>/mo</small></h1>
<ul class='list-unstyled mt-3 mb-4 flex-grow-1'>
<li>✓ 10 users included</li>
<li>✓ 2 GB of storage</li>
<li>✓ Email support</li>
</ul>
<button type='button' class='btn btn-lg btn-outline-primary mt-auto'>Sign up</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapHtml);
pdf.SaveAs("bootstrap-pricing.pdf");
Imports IronPdf
' Render a Bootstrap 5 layout
Dim renderer As New ChromePdfRenderer()
' Example: Bootstrap pricing table with flexbox
Dim bootstrapHtml As String = "
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h1 class='text-center mb-5'>Pricing Plans</h1>
<div class='row g-4'>
<div class='col-lg-4'>
<div class='card h-100 shadow-sm'>
<div class='card-header bg-primary text-white text-center py-4'>
<h4 class='my-0 fw-normal'>Starter</h4>
</div>
<div class='card-body d-flex flex-column'>
<h1 class='card-title pricing-card-title text-center'>$29<small class='text-muted fw-light'>/mo</small></h1>
<ul class='list-unstyled mt-3 mb-4 flex-grow-1'>
<li>✓ 10 users included</li>
<li>✓ 2 GB of storage</li>
<li>✓ Email support</li>
</ul>
<button type='button' class='btn btn-lg btn-outline-primary mt-auto'>Sign up</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapHtml)
pdf.SaveAs("bootstrap-pricing.pdf")
Aspose.PDF: Sınırlı Bootstrap Desteği
Aspose.PDF, modern CSS frameworklerinde belgelendirilmiş sınırlamalarla özel bir HTML render motoru kullanır:
- Flexbox sınırlamaları: Aspose forumlarında belirtildiği üzere, flexbox desteği sınırlı veya yok
- CSS Grid: Modern grid yerleşimleri doğru render edilmeyebilir
- Geçici çözümler gerekli: Uyumluluk için tablo tabanlı yerleşimler veya Bootstrap 3 kullanın
- Karmaşık yerleşimler: Bootstrap 4+ özellikleri önemli ayarlamalar gerektirebilir
Aspose'in kendi dökümantasyonuna göre, geliştiriciler modern web frameworklerini render ederken, özellikle flexbox ve CSS Grid'e dayalı yerleşimler kullanılırken sık sık sorunlarla karşılaşıyor. Bu sınırlama, modern web uygulamalarını veya modern CSS frameworklerini kullanan pazarlama materyallerini render etmeye çalışırken özellikle belirgin hale gelir.
CSS framework uyumluluğu hakkında daha fazla ayrıntı için bkz. Bootstrap & Flexbox CSS Rehberi.
Sonuç
Hem .NET hem de Aspose.PDF, .NET PDF manipülasyon pazarına hizmet verir, ancak farklı felsefeler ile. .NET, sezgisel API'ler, kapsamlı dahili özellikler ve şeffaf fiyatlandırma ile geliştirici deneyimini önceliklendirir. Yerel DOCX desteği, üstün HTML render ve dahil profesyonel destek cazip bir değer yaratır.
Aspose.PDF geniş kapsamlı yetenekler sunar, ancak tam doküman işleme için birden fazla ürün gerektirir, bu da toplam maliyeti önemli ölçüde artırır. Belirli bir enterprise senaryolar için uygun olsa da, karmaşıklık ve lisans modeli daha küçük ekipleri etkileyebilir.
Çoğu .NET geliştirme ekibi için .NET, özellikler, performans ve değer arasında en uygun dengeyi sağlar. PDF, DOCX ve HTML dönüşümlerini tek bir kütüphanede ele alabilme yeteneği, profesyonel destek ve süresiz lisanslama ile birleştiğinde, modern uygulamalar için pratik bir seçim yapar.
Farkı yaşamaya hazır mısınız? Ücretsiz 30 günlük deneme ile başlayın IronPDF'nin özelliklerini ortamınızda değerlendirmek için. Mevcut projeler için, NuGet üzerinden IronPDF indirin ve PDF işleme iş akışınızı bugün dönüştürün.
Sıkça Sorulan Sorular
HTML'yi C# içerisinde PDF'ye nasıl dönüştürebilirim?
IronPDF'nin RenderHtmlAsPdf yöntemini kullanarak HTML dizgilerini PDF'lere dönüştürebilirsiniz. Bu yöntem CSS3, JavaScript ve web yazı tiplerini destekleyerek yüksek sadakatli bir yazdırma sağlar.
IronPDF'yi çapraz platform PDF oluşturma için kullanmanın avantajları nelerdir?
IronPDF, ek paketler gerektirmeden Windows, Linux, macOS, Docker ve bulut ortamlarda yerel uyumluluk sunarak çapraz platform PDF oluşturma için çok yönlü bir seçenek sunar.
IronPDF, PDF'ler için şifreleme ve güvenliği nasıl handle eder?
IronPDF, belgesi güvenliğini artırmak için 15'ten fazla izin seçeneği desteğiyle şifrelemeyi ve detaylı izin kontrolünü sağlamlaştırmak için birleşik bir SecuritySettings sınıfı kullanır.
IronPDF geliştiriciler için ne tür destek sunar?
IronPDF, tüm lisanslarla birlikte 24/5 profesyonel mühendislik desteği içeren e-posta, sohbet ve ekran paylaşımı yardımı sunar. Bu, geliştiricilerin uygulama zorlukları için zamanında yardım almalarını sağlar.
IronPDF kullanarak DOCX dosyalarını PDF'ye dönüştürebilir miyim?
Evet, IronPDF DocxToPdfRenderer sınıfı aracılığıyla DOCX'ten PDF'ye dönüştürmeyi destekler ve belge biçimlendirmesini ve yapısını sorunsuz bir şekilde sürdürülebilir.
HTML'den PDF'ye dönüştürmede IronPDF ve Aspose.PDF arasındaki bazı temel farklar nelerdir?
IronPDF, HTML'den PDF'ye dönüştürme için tam bir Chrome render motoru kullanarak %98'den fazla tarayıcı uyumluluğu sunar. Oysa, Aspose.PDF modern web standartları için daha sınırlı desteğe sahip özel bir HTML ayrıştırıcıya dayanır.
IronPDF, PDF içerik gizlemeyi nasıl basitleştirir?
IronPDF, gerçek içerik kaldırma için regex desenlerini destekleyen ve uyumluluğu en az adımla sağlayan RedactTextOnAllPages gibi doğrudan yöntemler sunar.
PDF’lerde filigran kullanımı için IronPDF'yi kullanmanın avantajları nelerdir?
IronPDF, HTML/CSS tabanlı filigranları gradyanlar ve gölgeler de dahil olmak üzere akılda kalıcı sonuçlar için kapsamlı stil seçenekleri ile ApplyWatermark yöntemini kullanarak sağlar.



