IronPDF vs GemBox.Pdf: HTML to PDF Dönüşümü için Tam .NET PDF Kütüphanesi Karşılaştırma Rehberi
.NET uygulamaları geliştirirken, doğru C# PDF kütüphanesini seçmek projenizin başarısını önemli ölçüde etkileyebilir. Bu kapsamlı karşılaştırma, geliştiricilerin özellikler, performans, fiyatlandırma ve gerçek dünyadaki kullanım örnekleri temelinde bilinçli bir karar vermelerine yardımcı olmak için iki önde gelen .NET PDF kütüphanesi olan IronPDF ve GemBox.Pdf'i inceler.
Hızlı Karşılaştırma Özeti
| Kategori | Özellik/Aspect | IronPDF | GemBox.Pdf | Ana Avantaj |
|---|---|---|---|---|
| Çekirdek Mimari | Tasarım Felsefesi | HTML öncelikli, Chrome renderlama | PDF yerel manipülasyonu | Bağlam bağımlı |
| API Karmaşıklığı | RenderHtmlAsPdf() gibi basit yöntemler | Düşük seviyeli PDF nesneleri | IronPDF: Daha hızlı geliştirme | |
| Öğrenme Eğrisi | 1-2 gün tipik | 3-5 gün tipik | IronPDF: Daha hızlı benimseme | |
| Platform Desteği | Çapraz Platform | Windows, Linux, macOS, Docker | Windows, Linux, macOS, Android, iOS | GemBox: Mobil destek |
| .NET Sürümleri | .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ | .NET 6, Standard 2.0, Framework 3.5+ | IronPDF: Güncel .NET desteği | |
| Bulut Platformlari | Azure/AWS optimizasyonlu | Standart bulut desteği | IronPDF: Bulut hazır | |
| HTML'den PDF'ye | Render Motoru | Tam Chrome V8 motoru | Yerleşik HTML desteği yok* | IronPDF: Yerel HTML'den PDF'ye |
| CSS3/HTML5 Desteği | Tam destek | GemBox.Document gerektirir | IronPDF: Modern web standartları | |
| JavaScript Çalıştırma | Tam JavaScript desteği | JavaScript desteği yok | IronPDF: Dinamik içerik | |
| İşleme Hızı | ~125ms tipik | N/A (HTML desteği yok) | IronPDF: Hızlı renderlama | |
| Geliştirici Deneyimi | Kod Örnekleri | 100+ çalışmaya hazır örnekler | 100+ örnek mevcut | Both: Geniş kapsamlı kaynaklar |
| Belgelendirme | Eğitimler, nasıl yapılır, videolar | API dokümantasyonu odaklı | IronPDF: Çoklu öğrenme yolları | |
| İçerik Manipülasyonu | PDF'leri Birleştir/Böl | Yerleşik yöntemler | Yerleşik yöntemler | Both: Standart özellikler |
| Metin Cikarma | Unicode desteği, OCR entegrasyonu | Unicode desteği, yerleşik OCR | GemBox: Yerleşik OCR | |
| Form Desteği | HTML formlardan PDF formlara | Formlar oluştur, doldur, düzleştir | Bağlam bağımlı | |
| Performans Olcumleri | Bellek Kullanımı | 10MB altında tipik | Düşük bellek ayak izi | Both: Etkili |
| Eşzamanlılık Desteği | Yerel async/await optimize edilmiş | İş parçacığına güvenli işlemler | IronPDF: Daha iyi asenkron destek | |
| Security & Encryption | Şifreleme Seviyeleri | AES-256, özelleştirilmiş işlemler | AES-256 standardı | Her ikisi de: Endüstri standardı |
| Dijital İmzalar | Entegre, görsel imzalar | Dijital imza destek | Sing: İmza destek | |
| Licensing & Pricing | Giriş Seviyesi | Lite: $799 (1 dev, 1 project) | Single Dev: $890 (1 dev, sınırsız proje) | IronPDF: Daha düşük giriş maliyeti |
| Yeniden Dağıtım | +1.999$ telif ücretsiz | Dahil, sınırsız dağıtım | GemBox: Daha iyi kurulum koşulları | |
| Suite Seçeneği | Iron Suite: $1,498 (9 products) | GemBox Paketi: 2.200$ (7 ürün) | IronPDF: Daha iyi bir paket değeri | |
| Destek | Destek Dahil | Evet, 24/5 mühendislik desteği | Evet, 1 yıl profesyonel destek | Her ikisi: İyi destek |
| Yanıt Süresi | Genellikle 24-48 saat | 1 iş günü içinde | Her ikisi: Hızlı yanıt | |
| En İyisi İçin | Kullanım Durumları | HTML'den PDF'ye, web uygulamaları, raporlar | PDF düzenleme, formlar, OCR | Bağlam bağımlı |
IronPDF Kütüphanesi Nedir?
IronPDF, HTML'den PDF'ye dönüştürmeyi kolaylaştırarak geliştiriciler için mükemmel bir .NET PDF kütüphanesi olarak öne çıkar. Çekirdeğinde bir Chrome işleme motoru ile oluşturulan IronPDF, C#, F# ve VB.NET uygulamalarında geliştiricilerin PDF jenerasyonuna yaklaşımlarını dönüştürür.
Kütüphanenin felsefesi, mevcut web geliştirme becerilerinden yararlanmak üzerine kurulu. Karmaşık PDF API'lerini öğrenmek yerine, geliştiriciler tanıdık HTML, CSS ve JavaScript'i kullanarak sofistike PDF belgeleri oluşturabilirler. Bu yaklaşım, geliştirme süresini büyük ölçüde azaltırken modern web standartlarıyla eşleşen piksel mükemmelliğinde bir işleme sağlar.
IronPDF'nin Temel Özellikleri
IronPDF, geliştiricilerin karşılaşabileceği hemen hemen her PDF ile ilgili görevi kapsayan kapsamlı bir özellik seti sağlar:
HTML'den PDF'ye Dönüştürmede Mükemmellik
- Chrome V8 Motoru: HTML'yi Google Chrome gibi bir motor kullanarak işler, %98+ tarayıcı uyumu sunar
- Tam CSS3/HTML5 Desteği: Flexbox, grid ve animasyonlar dahil olmak üzere modern web standartlarını tam olarak destekler
- JavaScript Yürütme: Dinamik içeriği mükemmel şekilde yakalayarak JavaScript'i işleme öncesinde yürütür
- Duyarlı Tasarım: Ayarlanabilir görünüm ayarları ile duyarlı düzenleri işler
- Web Font Desteği: Google Fontlar'ı, özel fontlar ve icon fontları doğru bir şekilde işler
Gelişmiş PDF Düzenleme
- PDF'leri Birleştirin ve Bölün: Basit yöntem çağrıları ile birden fazla PDF'yi birleştirin veya belirli sayfaları çıkarın
- Dijital İmzalar: Sertifika desteğiyle kriptografik imzalar uygulayın
- Form Yönetimi: HTML'den doldurulabilir formlar oluşturun veya mevcut PDF formlarını yönetin
- Filigranlar ve Damgalar: Şeffaflık kontrolü ile metin veya görsel filigranlar ekleyin
- Üstbaşlıklar ve Altbaşlıklar: Sayfa numaralamalı dinamik üst/alt başlıklar
Güvenlik ve Uyum
- Şifreleme: Özel izin ayarları ile AES-256 şifreleme
- PDF/A Uyumluluğu: Uzun süreli depolama için arşiv kalitesinde PDF'leri üretin
- Düzeltme: Hassas içeriği kalıcı olarak çıkarın
- Şifre Koruma: Ayrıntılı izin destekli kullanıcı ve sahip şifresi desteği
IronPDF Kod Örneği: Gelişmiş Özelliklerle HTML'den PDF'ye
using IronPdf;
using IronPdf.Rendering;
// Configure the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Set paper orientation and size
PaperOrientation = PdfPaperOrientation.Portrait,
PaperSize = PdfPaperSize.A4,
// Configure margins (in millimeters)
MarginTop = 25,
MarginBottom = 25,
MarginLeft = 20,
MarginRight = 20,
// Enable JavaScript execution
EnableJavaScript = true,
RenderDelay = 1000, // Wait 1 second for JS to complete
// Print background colors and images
PrintHtmlBackgrounds = true,
// Create PDF forms from HTML form elements
CreatePdfFormsFromHtml = true,
// Custom header and footer
HtmlHeader = new HtmlHeaderFooter
{
Height = 20,
HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
DrawDividerLine = true
},
HtmlFooter = new HtmlHeaderFooter
{
Height = 15,
HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
}
}
};
// Convert complex HTML with CSS and JavaScript
string htmlContent = @"
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
.invoice-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 30px;
border-radius: 10px;
margin-bottom: 30px;
}
.data-table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
.data-table th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
.data-table td {
padding: 10px;
border-bottom: 1px solid #dee2e6;
}
.total-section {
margin-top: 30px;
text-align: right;
font-size: 18px;
font-weight: bold;
}
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #INV-2025-001</h1>
<p>Date: <span id='current-date'></span></p>
</div>
<table class='data-table'>
<thead>
<tr>
<th>Item Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Professional PDF Library License</td>
<td>1</td>
<td>$799.00</td>
<td>$799.00</td>
</tr>
<tr>
<td>Priority Support (1 Year)</td>
<td>1</td>
<td>$299.00</td>
<td>$299.00</td>
</tr>
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: $1,048.00</p>
<p>Tax (8%): $83.84</p>
<p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
</div>
<script>
// Dynamic date insertion
document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
</script>
</body>
</html>";
// Render the HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
// Add metadata
pdf.MetaData.Author = "Invoice System";
pdf.MetaData.Title = "Invoice INV-2025-001";
pdf.MetaData.Subject = "Customer Invoice";
pdf.MetaData.Keywords = "invoice, payment, 2025";
pdf.MetaData.CreationDate = DateTime.Now;
// Save the PDF
pdf.SaveAs("invoice-2025-001.pdf");
// Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3);
using IronPdf;
using IronPdf.Rendering;
// Configure the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
// Set paper orientation and size
PaperOrientation = PdfPaperOrientation.Portrait,
PaperSize = PdfPaperSize.A4,
// Configure margins (in millimeters)
MarginTop = 25,
MarginBottom = 25,
MarginLeft = 20,
MarginRight = 20,
// Enable JavaScript execution
EnableJavaScript = true,
RenderDelay = 1000, // Wait 1 second for JS to complete
// Print background colors and images
PrintHtmlBackgrounds = true,
// Create PDF forms from HTML form elements
CreatePdfFormsFromHtml = true,
// Custom header and footer
HtmlHeader = new HtmlHeaderFooter
{
Height = 20,
HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
DrawDividerLine = true
},
HtmlFooter = new HtmlHeaderFooter
{
Height = 15,
HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
}
}
};
// Convert complex HTML with CSS and JavaScript
string htmlContent = @"
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
.invoice-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 30px;
border-radius: 10px;
margin-bottom: 30px;
}
.data-table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
.data-table th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
.data-table td {
padding: 10px;
border-bottom: 1px solid #dee2e6;
}
.total-section {
margin-top: 30px;
text-align: right;
font-size: 18px;
font-weight: bold;
}
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #INV-2025-001</h1>
<p>Date: <span id='current-date'></span></p>
</div>
<table class='data-table'>
<thead>
<tr>
<th>Item Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Professional PDF Library License</td>
<td>1</td>
<td>$799.00</td>
<td>$799.00</td>
</tr>
<tr>
<td>Priority Support (1 Year)</td>
<td>1</td>
<td>$299.00</td>
<td>$299.00</td>
</tr>
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: $1,048.00</p>
<p>Tax (8%): $83.84</p>
<p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
</div>
<script>
// Dynamic date insertion
document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
</script>
</body>
</html>";
// Render the HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
// Add metadata
pdf.MetaData.Author = "Invoice System";
pdf.MetaData.Title = "Invoice INV-2025-001";
pdf.MetaData.Subject = "Customer Invoice";
pdf.MetaData.Keywords = "invoice, payment, 2025";
pdf.MetaData.CreationDate = DateTime.Now;
// Save the PDF
pdf.SaveAs("invoice-2025-001.pdf");
// Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3);
Imports IronPdf
Imports IronPdf.Rendering
' Configure the Chrome renderer with advanced options
Dim renderer As New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
' Set paper orientation and size
.PaperOrientation = PdfPaperOrientation.Portrait,
.PaperSize = PdfPaperSize.A4,
' Configure margins (in millimeters)
.MarginTop = 25,
.MarginBottom = 25,
.MarginLeft = 20,
.MarginRight = 20,
' Enable JavaScript execution
.EnableJavaScript = True,
.RenderDelay = 1000, ' Wait 1 second for JS to complete
' Print background colors and images
.PrintHtmlBackgrounds = True,
' Create PDF forms from HTML form elements
.CreatePdfFormsFromHtml = True,
' Custom header and footer
.HtmlHeader = New HtmlHeaderFooter With {
.Height = 20,
.HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
.DrawDividerLine = True
},
.HtmlFooter = New HtmlHeaderFooter With {
.Height = 15,
.HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
}
}
}
' Convert complex HTML with CSS and JavaScript
Dim htmlContent As String = "
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
.invoice-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 30px;
border-radius: 10px;
margin-bottom: 30px;
}
.data-table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
.data-table th {
background-color: #f8f9fa;
padding: 12px;
text-align: left;
border-bottom: 2px solid #dee2e6;
}
.data-table td {
padding: 10px;
border-bottom: 1px solid #dee2e6;
}
.total-section {
margin-top: 30px;
text-align: right;
font-size: 18px;
font-weight: bold;
}
@media print {
.no-print { display: none; }
}
</style>
</head>
<body>
<div class='invoice-header'>
<h1>Invoice #INV-2025-001</h1>
<p>Date: <span id='current-date'></span></p>
</div>
<table class='data-table'>
<thead>
<tr>
<th>Item Description</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Professional PDF Library License</td>
<td>1</td>
<td>$799.00</td>
<td>$799.00</td>
</tr>
<tr>
<td>Priority Support (1 Year)</td>
<td>1</td>
<td>$299.00</td>
<td>$299.00</td>
</tr>
</tbody>
</table>
<div class='total-section'>
<p>Subtotal: $1,048.00</p>
<p>Tax (8%): $83.84</p>
<p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
</div>
<script>
// Dynamic date insertion
document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
</script>
</body>
</html>"
' Render the HTML to PDF
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
' Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123"
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserFormData = True
' Add metadata
pdf.MetaData.Author = "Invoice System"
pdf.MetaData.Title = "Invoice INV-2025-001"
pdf.MetaData.Subject = "Customer Invoice"
pdf.MetaData.Keywords = "invoice, payment, 2025"
pdf.MetaData.CreationDate = DateTime.Now
' Save the PDF
pdf.SaveAs("invoice-2025-001.pdf")
' Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3)
Bu örnek, IronPDF'nin gradyanlar, tablolar, dinamik JavaScript içeriği ve güvenlik ayarları ile meta veriler gibi gelişmiş PDF özelliklerini içeren karmaşık HTML düzenlerini ele alma yeteneğini gösterir. Kütüphane her şeyi sorunsuz bir şekilde işler ve HTML tasarımıyla tam olarak uyumlu profesyonel bir PDF üretir.
GemBox.Pdf Kütüphanesi Nedir?
GemBox.Pdf, .NET'te PDF düzenleme konusunda farklı bir yaklaşımı temsil eder. HTML'den PDF'ye dönüştürmeye odaklanmak yerine, GemBox.Pdf düşük seviyeli PDF işlemleri ve doğrudan PDF düzenleme konusunda uzmanlaşmıştır. Bu, özellikle geliştiricilerin PDF yapısı ve içeriği üzerinde hassas kontrol sağlaması gerektiğinde uygundur.
Kütüphane mevcut PDF belgeleri ile çalışmada başarılıdır, PDF dosyalarını okuma, düzenleme ve manipüle etme için kapsamlı özellikler sunar. GemBox.Pdf, Adobe Acrobat'a bağımlılık olmadan çalışır, bu da çeşitli ortamlarda kurulumu kolaylaştırır.
GemBox.Pdf'nin Temel Özellikleri
GemBox.Pdf, kapsamlı PDF düzenleme yetenekleri sağlar:
PDF Belge İşlemleri
- PDF Okuma ve Yazma: PDF yapısına ve içeriğine doğrudan erişim
- Birleştirme ve Bölme: Birden fazla PDF'yi birleştirin veya belirli sayfaları çıkarın
- Sayfa Kopyalama: Farklı PDF belgeleri arasında sayfalar aktarın
- Sayfa Yönetimi: Sayfaları programatik olarak ekleyin, kaldırın veya yeniden sıralayın
İçerik Çıkarma ve Düzenleme
- Metin Çıkarma: Konumlandırma bilgisi ile Unicode metni çıkarın
- Görüntü Çıkarma: PDF belgelerinden gömülü görüntüleri alın
- OCR Desteği: Tarayıcı karakter tanıma için yerleşik OCR
- İçerik Düzeltme: Hassas bilgileri kalıcı olarak çıkarın
Formlar ve Etkileşim
- İnteraktif Formlar: PDF formları oluşturun, doldurun, düzleştirin ve dışa aktarın
- Form Alan Yönetimi: Tüm form alan türlerine programatik erişim
- Ek Açıklamalar: PDF belgeleri için bağlantılar ve diğer açıklamalar ekleyin
Grafikler ve Görsel Öğeler
- Çizim İşlemleri: Metin, görüntü ve vektör grafik ekleyin
- Şekiller ve Yollar: Karmaşık vektör çizimleri oluşturun
- Filigranlar: Metin ve görüntü filigranlarını uygulayın
- İçerik Grupları: İçeriği mantıksal gruplara organize edin
GemBox.Pdf Kod Örneği: PDF Düzenleme ve Formlar
using GemBox.Pdf;
using GemBox.Pdf.Content;
using GemBox.Pdf.Forms;
using GemBox.Pdf.Security;
// Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Create a new PDF document from scratch
using (var document = new PdfDocument())
{
// Add a page with custom size
var page = document.Pages.Add();
// Create formatted text with multiple styles
using (var formattedText = new PdfFormattedText())
{
formattedText.FontSize = 24;
formattedText.FontFamily = new PdfFontFamily("Arial");
formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6);
formattedText.AppendLine("GemBox.Pdf Document Example");
formattedText.FontSize = 12;
formattedText.Color = PdfColor.FromRgb(0, 0, 0);
formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.");
// Draw text to the page
page.Content.DrawText(formattedText, new PdfPoint(50, 700));
}
// Add a form to the document
var form = document.Form;
// Create text field
var textField = form.Fields.AddText(page, 50, 600, 200, 30);
textField.Name = "CustomerName";
textField.Value = "Enter your name";
textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95);
// Create checkbox
var checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20);
checkBox.Name = "Agreement";
checkBox.Checked = false;
// Add descriptive text next to checkbox
using (var checkboxLabel = new PdfFormattedText())
{
checkboxLabel.Append("I agree to the terms and conditions");
page.Content.DrawText(checkboxLabel, new PdfPoint(80, 555));
}
// Create submit button
var submitButton = form.Fields.AddButton(page, 50, 500, 100, 30);
submitButton.Name = "Submit";
submitButton.Actions.Activate = PdfActionType.Named;
// Add button appearance
using (var buttonText = new PdfFormattedText())
{
buttonText.Append("Submit Form");
buttonText.FontSize = 14;
buttonText.Color = PdfColor.FromRgb(1, 1, 1);
// Create button appearance stream
var appearance = submitButton.Appearance.Normal;
appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8);
appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4);
appearance.Stroke.Width = 1;
// Draw button background
appearance.DrawRectangle(new PdfPoint(0, 0), new PdfSize(100, 30), true, true);
// Draw button text
appearance.DrawText(buttonText, new PdfPoint(20, 10));
}
// Add a table using low-level graphics
var tableTop = 400;
var tableLeft = 50;
var cellWidth = 150;
var cellHeight = 30;
// Draw table headers
page.Content.DrawRectangle(new PdfPoint(tableLeft, tableTop),
new PdfSize(cellWidth * 3, cellHeight), true, true);
using (var headerText = new PdfFormattedText())
{
headerText.FontSize = 12;
headerText.Color = PdfColor.FromRgb(1, 1, 1);
headerText.Append("Product");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + 10, tableTop + 10));
headerText.Clear();
headerText.Append("Quantity");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth + 10, tableTop + 10));
headerText.Clear();
headerText.Append("Price");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10));
}
// Draw table data rows
var rowData = new[]
{
new { Product = "PDF Library", Quantity = "1", Price = "$890" },
new { Product = "Support Plan", Quantity = "1", Price = "$299" },
new { Product = "Training", Quantity = "2", Price = "$500" }
};
var currentY = tableTop - cellHeight;
foreach (var row in rowData)
{
// Draw cell borders
page.Content.DrawRectangle(new PdfPoint(tableLeft, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth * 2, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
// Draw cell content
using (var cellText = new PdfFormattedText())
{
cellText.FontSize = 11;
cellText.Append(row.Product);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + 10, currentY + 10));
cellText.Clear();
cellText.Append(row.Quantity);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth + 10, currentY + 10));
cellText.Clear();
cellText.Append(row.Price);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10));
}
currentY -= cellHeight;
}
// Apply security settings
var securitySettings = document.SecuritySettings;
securitySettings.DocumentOpenPassword = "user123";
securitySettings.PermissionsPassword = "owner123";
securitySettings.Permissions = PdfPermissions.AllowPrint | PdfPermissions.AllowFormFill;
// Save the document
document.Save("gembox-example.pdf");
}
// Example: Manipulating existing PDF
using (var existingDoc = PdfDocument.Load("existing-document.pdf"))
{
// Extract text from first page
var page = existingDoc.Pages[0];
var text = page.Content.GetText();
Console.WriteLine($"Extracted text: {text}");
// Add watermark to all pages
foreach (var p in existingDoc.Pages)
{
using (var watermark = new PdfFormattedText())
{
watermark.Append("CONFIDENTIAL");
watermark.FontSize = 50;
watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5);
watermark.Opacity = 0.3;
// Calculate center position
var pageWidth = p.MediaBox.Width;
var pageHeight = p.MediaBox.Height;
var textWidth = watermark.Width;
var textHeight = watermark.Height;
var x = (pageWidth - textWidth) / 2;
var y = (pageHeight - textHeight) / 2;
// Draw watermark diagonally
p.Content.SaveGraphicsState();
p.Content.SetTransform(1, 0, 0, 1, x, y);
p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0);
p.Content.DrawText(watermark, new PdfPoint(0, 0));
p.Content.RestoreGraphicsState();
}
}
existingDoc.Save("watermarked-document.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;
using GemBox.Pdf.Forms;
using GemBox.Pdf.Security;
// Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Create a new PDF document from scratch
using (var document = new PdfDocument())
{
// Add a page with custom size
var page = document.Pages.Add();
// Create formatted text with multiple styles
using (var formattedText = new PdfFormattedText())
{
formattedText.FontSize = 24;
formattedText.FontFamily = new PdfFontFamily("Arial");
formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6);
formattedText.AppendLine("GemBox.Pdf Document Example");
formattedText.FontSize = 12;
formattedText.Color = PdfColor.FromRgb(0, 0, 0);
formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.");
// Draw text to the page
page.Content.DrawText(formattedText, new PdfPoint(50, 700));
}
// Add a form to the document
var form = document.Form;
// Create text field
var textField = form.Fields.AddText(page, 50, 600, 200, 30);
textField.Name = "CustomerName";
textField.Value = "Enter your name";
textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95);
// Create checkbox
var checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20);
checkBox.Name = "Agreement";
checkBox.Checked = false;
// Add descriptive text next to checkbox
using (var checkboxLabel = new PdfFormattedText())
{
checkboxLabel.Append("I agree to the terms and conditions");
page.Content.DrawText(checkboxLabel, new PdfPoint(80, 555));
}
// Create submit button
var submitButton = form.Fields.AddButton(page, 50, 500, 100, 30);
submitButton.Name = "Submit";
submitButton.Actions.Activate = PdfActionType.Named;
// Add button appearance
using (var buttonText = new PdfFormattedText())
{
buttonText.Append("Submit Form");
buttonText.FontSize = 14;
buttonText.Color = PdfColor.FromRgb(1, 1, 1);
// Create button appearance stream
var appearance = submitButton.Appearance.Normal;
appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8);
appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4);
appearance.Stroke.Width = 1;
// Draw button background
appearance.DrawRectangle(new PdfPoint(0, 0), new PdfSize(100, 30), true, true);
// Draw button text
appearance.DrawText(buttonText, new PdfPoint(20, 10));
}
// Add a table using low-level graphics
var tableTop = 400;
var tableLeft = 50;
var cellWidth = 150;
var cellHeight = 30;
// Draw table headers
page.Content.DrawRectangle(new PdfPoint(tableLeft, tableTop),
new PdfSize(cellWidth * 3, cellHeight), true, true);
using (var headerText = new PdfFormattedText())
{
headerText.FontSize = 12;
headerText.Color = PdfColor.FromRgb(1, 1, 1);
headerText.Append("Product");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + 10, tableTop + 10));
headerText.Clear();
headerText.Append("Quantity");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth + 10, tableTop + 10));
headerText.Clear();
headerText.Append("Price");
page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10));
}
// Draw table data rows
var rowData = new[]
{
new { Product = "PDF Library", Quantity = "1", Price = "$890" },
new { Product = "Support Plan", Quantity = "1", Price = "$299" },
new { Product = "Training", Quantity = "2", Price = "$500" }
};
var currentY = tableTop - cellHeight;
foreach (var row in rowData)
{
// Draw cell borders
page.Content.DrawRectangle(new PdfPoint(tableLeft, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth * 2, currentY),
new PdfSize(cellWidth, cellHeight), false, true);
// Draw cell content
using (var cellText = new PdfFormattedText())
{
cellText.FontSize = 11;
cellText.Append(row.Product);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + 10, currentY + 10));
cellText.Clear();
cellText.Append(row.Quantity);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth + 10, currentY + 10));
cellText.Clear();
cellText.Append(row.Price);
page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10));
}
currentY -= cellHeight;
}
// Apply security settings
var securitySettings = document.SecuritySettings;
securitySettings.DocumentOpenPassword = "user123";
securitySettings.PermissionsPassword = "owner123";
securitySettings.Permissions = PdfPermissions.AllowPrint | PdfPermissions.AllowFormFill;
// Save the document
document.Save("gembox-example.pdf");
}
// Example: Manipulating existing PDF
using (var existingDoc = PdfDocument.Load("existing-document.pdf"))
{
// Extract text from first page
var page = existingDoc.Pages[0];
var text = page.Content.GetText();
Console.WriteLine($"Extracted text: {text}");
// Add watermark to all pages
foreach (var p in existingDoc.Pages)
{
using (var watermark = new PdfFormattedText())
{
watermark.Append("CONFIDENTIAL");
watermark.FontSize = 50;
watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5);
watermark.Opacity = 0.3;
// Calculate center position
var pageWidth = p.MediaBox.Width;
var pageHeight = p.MediaBox.Height;
var textWidth = watermark.Width;
var textHeight = watermark.Height;
var x = (pageWidth - textWidth) / 2;
var y = (pageHeight - textHeight) / 2;
// Draw watermark diagonally
p.Content.SaveGraphicsState();
p.Content.SetTransform(1, 0, 0, 1, x, y);
p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0);
p.Content.DrawText(watermark, new PdfPoint(0, 0));
p.Content.RestoreGraphicsState();
}
}
existingDoc.Save("watermarked-document.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
Imports GemBox.Pdf.Forms
Imports GemBox.Pdf.Security
' Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
' Create a new PDF document from scratch
Using document = New PdfDocument()
' Add a page with custom size
Dim page = document.Pages.Add()
' Create formatted text with multiple styles
Using formattedText = New PdfFormattedText()
formattedText.FontSize = 24
formattedText.FontFamily = New PdfFontFamily("Arial")
formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6)
formattedText.AppendLine("GemBox.Pdf Document Example")
formattedText.FontSize = 12
formattedText.Color = PdfColor.FromRgb(0, 0, 0)
formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.")
' Draw text to the page
page.Content.DrawText(formattedText, New PdfPoint(50, 700))
End Using
' Add a form to the document
Dim form = document.Form
' Create text field
Dim textField = form.Fields.AddText(page, 50, 600, 200, 30)
textField.Name = "CustomerName"
textField.Value = "Enter your name"
textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95)
' Create checkbox
Dim checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20)
checkBox.Name = "Agreement"
checkBox.Checked = False
' Add descriptive text next to checkbox
Using checkboxLabel = New PdfFormattedText()
checkboxLabel.Append("I agree to the terms and conditions")
page.Content.DrawText(checkboxLabel, New PdfPoint(80, 555))
End Using
' Create submit button
Dim submitButton = form.Fields.AddButton(page, 50, 500, 100, 30)
submitButton.Name = "Submit"
submitButton.Actions.Activate = PdfActionType.Named
' Add button appearance
Using buttonText = New PdfFormattedText()
buttonText.Append("Submit Form")
buttonText.FontSize = 14
buttonText.Color = PdfColor.FromRgb(1, 1, 1)
' Create button appearance stream
Dim appearance = submitButton.Appearance.Normal
appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8)
appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4)
appearance.Stroke.Width = 1
' Draw button background
appearance.DrawRectangle(New PdfPoint(0, 0), New PdfSize(100, 30), True, True)
' Draw button text
appearance.DrawText(buttonText, New PdfPoint(20, 10))
End Using
' Add a table using low-level graphics
Dim tableTop = 400
Dim tableLeft = 50
Dim cellWidth = 150
Dim cellHeight = 30
' Draw table headers
page.Content.DrawRectangle(New PdfPoint(tableLeft, tableTop), New PdfSize(cellWidth * 3, cellHeight), True, True)
Using headerText = New PdfFormattedText()
headerText.FontSize = 12
headerText.Color = PdfColor.FromRgb(1, 1, 1)
headerText.Append("Product")
page.Content.DrawText(headerText, New PdfPoint(tableLeft + 10, tableTop + 10))
headerText.Clear()
headerText.Append("Quantity")
page.Content.DrawText(headerText, New PdfPoint(tableLeft + cellWidth + 10, tableTop + 10))
headerText.Clear()
headerText.Append("Price")
page.Content.DrawText(headerText, New PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10))
End Using
' Draw table data rows
Dim rowData = {
New With {
Key .Product = "PDF Library",
Key .Quantity = "1",
Key .Price = "$890"
},
New With {
Key .Product = "Support Plan",
Key .Quantity = "1",
Key .Price = "$299"
},
New With {
Key .Product = "Training",
Key .Quantity = "2",
Key .Price = "$500"
}
}
Dim currentY = tableTop - cellHeight
For Each row In rowData
' Draw cell borders
page.Content.DrawRectangle(New PdfPoint(tableLeft, currentY), New PdfSize(cellWidth, cellHeight), False, True)
page.Content.DrawRectangle(New PdfPoint(tableLeft + cellWidth, currentY), New PdfSize(cellWidth, cellHeight), False, True)
page.Content.DrawRectangle(New PdfPoint(tableLeft + cellWidth * 2, currentY), New PdfSize(cellWidth, cellHeight), False, True)
' Draw cell content
Using cellText = New PdfFormattedText()
cellText.FontSize = 11
cellText.Append(row.Product)
page.Content.DrawText(cellText, New PdfPoint(tableLeft + 10, currentY + 10))
cellText.Clear()
cellText.Append(row.Quantity)
page.Content.DrawText(cellText, New PdfPoint(tableLeft + cellWidth + 10, currentY + 10))
cellText.Clear()
cellText.Append(row.Price)
page.Content.DrawText(cellText, New PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10))
End Using
currentY -= cellHeight
Next row
' Apply security settings
Dim securitySettings = document.SecuritySettings
securitySettings.DocumentOpenPassword = "user123"
securitySettings.PermissionsPassword = "owner123"
securitySettings.Permissions = PdfPermissions.AllowPrint Or PdfPermissions.AllowFormFill
' Save the document
document.Save("gembox-example.pdf")
End Using
' Example: Manipulating existing PDF
Using existingDoc = PdfDocument.Load("existing-document.pdf")
' Extract text from first page
Dim page = existingDoc.Pages(0)
Dim text = page.Content.GetText()
Console.WriteLine($"Extracted text: {text}")
' Add watermark to all pages
For Each p In existingDoc.Pages
Using watermark = New PdfFormattedText()
watermark.Append("CONFIDENTIAL")
watermark.FontSize = 50
watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5)
watermark.Opacity = 0.3
' Calculate center position
Dim pageWidth = p.MediaBox.Width
Dim pageHeight = p.MediaBox.Height
Dim textWidth = watermark.Width
Dim textHeight = watermark.Height
Dim x = (pageWidth - textWidth) \ 2
Dim y = (pageHeight - textHeight) \ 2
' Draw watermark diagonally
p.Content.SaveGraphicsState()
p.Content.SetTransform(1, 0, 0, 1, x, y)
p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0)
p.Content.DrawText(watermark, New PdfPoint(0, 0))
p.Content.RestoreGraphicsState()
End Using
Next p
existingDoc.Save("watermarked-document.pdf")
End Using
Bu örnek, GemBox.Pdf'nin düşük seviyeli PDF düzenlemedeki gücünü, form oluşturma, grafik çizimi ve belge güvenlik özelliklerini gösterir. Kod, IronPDF'nin HTML yaklaşımından daha ayrıntılı olsa da, PDF'nin her yönü üzerinde hassas kontrol sağlar.
Bu Kütüphaneler HTML'den PDF'ye Dönüşümü Nasıl İşliyor?
HTML'den PDF'ye dönüştürme yaklaşımı, IronPDF ve GemBox.Pdf arasındaki en önemli farklardan birini temsil eder.
IronPDF'nin HTML'den PDF'ye Yaklaşımı
IronPDF, sıfırdan HTML'den PDF'ye dönüştürme odağıyla oluşturulmuştur. Kütüphane, HTML, CSS ve JavaScript'i bir web tarayıcısı gibi tam olarak işleyen tam bir Chrome işleme motoru içerir. Bu şu anlama gelir:
- Gerçek Tarayıcı İşleme: Google Chrome'un Blink motorunu kullanır
- Tam Web Standartları: CSS3, HTML5, flexbox, grid ve modern JavaScript için tam destek
- Dinamik İçerik: Ajax içeriğini ve dinamik öğeleri yakalayarak JavaScript'i işleme öncesi çalıştırır
- Duyarlı Tasarım: Medya sorgularını ve duyarlı düzenleri işler
- Harici Kaynaklar: URL'lerden otomatik olarak görüntü, stil sayfaları ve yazı tipleri alır
GemBox'ın Sınırlı HTML Desteği
GemBox.Pdf kendisi HTML'den PDF'ye dönüştürmeyi desteklemez. GemBox ile HTML'den PDF'ye dönüştürmek için geliştiriciler şunları yapmalıdır:
- GemBox.Document'ı ayrı olarak satın alın ($890 ek maliyet)
- HTML'yi DOCX'e dönüştürmek için GemBox.Document kullanın
- Ardından DOCX'i PDF'ye dönüştürün
Bu yaklaşım önemli sınırlamalara sahiptir:
- JavaScript Desteği Yok: Dinamik içeriği işleyemez
- Sınırlı CSS Desteği: Birçok modern CSS özelliği desteklenmemektedir
- Stil Sorunları: Stack Overflow tartışmalarında belirtildiği gibi kenarlıklar ve karmaşık düzenlerle ilgili bilinen sorunlar
- Sadece Baskıya Optimize Edilmiş: Öncelikli olarak baskı için biçimlendirilmiş HTML gerektirir
- Ek Maliyet: İki ayrı kütüphane satın almayı gerektirir
Modern CSS Çerçeve Desteği: Kritik Bir Fark
IronPDF'nin Chrome tabanlı işleme motorunun en önemli avantajlarından biri, Bootstrap, Tailwind CSS ve Foundation gibi modern CSS çerçevelerle çalışırken ortaya çıkar. Bu çerçeveler, modern web uygulamalarının bel kemiği haline geldi ve PDF'lerde doğru şekilde render edilme yetenekleri, birçok kullanım durumu için gereklidir.
IronPDF: Tam Modern Çerçeve Desteği
IronPDF'nin Chrome işleme motoru, tüm modern CSS çerçeveleri için tam, yerel destek sağlar:
- Bootstrap 5: Duyarlı tasarımlar için tam flexbox ve CSS Grid desteği
- Tailwind CSS: Tam yardımcı-ilk CSS çerçevesi desteği
- Gerçek dünya örnekleri: Bootstrap anasayfasını ve Bootstrap şablonlarını kusursuz bir şekilde işler
- Modern CSS3 özellikleri: Animasyonlar, dönüşümler, geçişler, özel özellikler
- Duyarlı tasarımlar: Medya sorguları ve görünüme dayalı düzenler sorunsuz çalışır
Kod Örneği: Bootstrap Formdan PDF'ye
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapForm = @"
<!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 mt-5'>
<h1 class='mb-4'>Customer Registration</h1>
<form class='needs-validation'>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' value='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' value='Smith'>
</div>
</div>
<div class='mt-4'>
<button class='btn btn-primary' type='submit'>Submit</button>
</div>
</form>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapForm);
pdf.SaveAs("bootstrap-form.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapForm = @"
<!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 mt-5'>
<h1 class='mb-4'>Customer Registration</h1>
<form class='needs-validation'>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' value='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' value='Smith'>
</div>
</div>
<div class='mt-4'>
<button class='btn btn-primary' type='submit'>Submit</button>
</div>
</form>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapForm);
pdf.SaveAs("bootstrap-form.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim bootstrapForm 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 mt-5'>
<h1 class='mb-4'>Customer Registration</h1>
<form class='needs-validation'>
<div class='row g-3'>
<div class='col-md-6'>
<label class='form-label'>First Name</label>
<input type='text' class='form-control' value='John'>
</div>
<div class='col-md-6'>
<label class='form-label'>Last Name</label>
<input type='text' class='form-control' value='Smith'>
</div>
</div>
<div class='mt-4'>
<button class='btn btn-primary' type='submit'>Submit</button>
</div>
</form>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapForm)
pdf.SaveAs("bootstrap-form.pdf")
GemBox: Modern Çerçeve Desteği Yok
GemBox.Pdf, yerel HTML renderlemesine sahip olmadığından ve HTML dönüştürme için GemBox.Document'a bağlı kalmak zorunda olduğundan, modern CSS çerçeveleri ciddi kısıtlamalarla karşı karşıyadır:
- Bootstrap desteği yok: Flexbox ve CSS Grid özellikleri düzgün bir şekilde renderlenmeyecektir
- Tailwind CSS yok: Yardımcı sınıflar ve modern düzenler desteklenmiyor
- Elle geçici çözümler gereklidir: HTML'nin baskı optimize edilmiş sürümlerini oluşturmak zorundasınız
- CSS3 sınırlıdır: Birçok modern CSS özelliği basitçe çalışmaz
- Ek karmaşıklık: İki aşamalı dönüştürme süreci (HTML → DOCX → PDF) tutarsızlıklara neden olur
Geliştirici tartışmalarına göre, HTML'ye PDF dönüştürme yaklaşımıyla, hatta sınır gibi temel CSS özellikleri bile GemBox ile problemli olabilir.
Gerçek Dünya Etkisi: Uygulamanız UI için Bootstrap kullanıyorsa ve web arayüzünüzle uyumlu PDF raporları veya dışa aktarma işlemleri oluşturmanız gerekiyorsa, IronPDF basit bir çözüm sunarken GemBox önemli derecede yeniden tasarım veya elle geçici çözümler gerektirir.
CSS cerceveleri uyumlulugu hakkinda daha fazla bilgi icin, Bootstrap ve Flexbox CSS Rehberi'ne bakın.
Hangi Kütüphane Farklı PDF Görevlerinde Üstündür?
Her kütüphanenin nerede öne çıktığını anlamak, geliştiricilerin özgün ihtiyaçları için doğru aracı seçmelerine yardımcı olur.
IronPDF'in Üstün Olduğu Alanlar
IronPDF, bu senaryolarda üstün performans sergiler:
1. Web Uygulaması PDF Oluşturma
SaaS uygulamaları, web portalları ve web içeriğini PDF'ye dönüştürmesi gereken herhangi bir sistem için mükemmeldir. Chrome render motoru, Bootstrap, Tailwind CSS veya özel çerçeveler kullanan karmaşık web düzenlerinin bile mükemmel şekilde renderlenmesini sağlar.
2. Dinamik Rapor Oluşturma
Raporlar Chart.js, D3.js gibi grafikler, dinamik veri görselleştirme veya JavaScript-render edilmiş içerik içerdiğinde, IronPDF her şeyi doğru bir şekilde yakalar. Bu, onu iş zekası gösterge panoları ve veri odaklı uygulamalar için ideal kılar.
3. Fatura ve Belge Şablonları
HTML/CSS şablonları kullanarak faturalar, fişler ve iş belgeleri için tasarımcılar, PDF'ye özgü API'leri öğrenmeden şablonlar oluşturabilir. Tanıdık web teknolojilerini kullanarak hızlıca değişiklikler yapabilirler.
4. Hızlı Geliştirme Projeleri
Basit API ve HTML tabanlı yaklaşım, geliştirme süresini önemli ölçüde azaltır. Bir geliştirici, dakikalar içinde karmaşık bir PDF oluşturabilir.
5. Platformlar Arası Dağıtım
Windows, Linux, macOS, Docker ve bulut platformlarına yerel destek ile IronPDF, çeşitli ortamlarda dağıtımı kolaylaştırır.
GemBox.Pdf'in Üstün Olduğu Alanlar
GemBox.Pdf bu alanlarda güçlü yönlerini gösterir:
1. Düşük Düzeyde PDF Manipülasyonu
PDF yapısı üzerinde hassas kontrol gerektiğinde, GemBox.Pdf'in nesne yönelimli yaklaşımı PDF elemanlarına, akışlarına ve sözlüklerine doğrudan erişim sağlar.
2. Form-Ağır Uygulamalar
PDF formlarıyla yoğun bir şekilde çalışan uygulamalar için, GemBox.Pdf, karmaşık etkileşimli formları programlı olarak oluşturma dahil olmak üzere kapsamlı form alanı manipülasyonu sunar.
3. OCR Gereksinimleri
Yerleşik OCR yetenekleriyle, GemBox.Pdf, taranmış belgelerden metin çıkarabilir, ek kütüphanelere gerek kalmadan, belge dijitalleştirme projeleri için uygun hale gelir.
4. Mobil Geliştirme
Android ve iOS platformları için yerel destek, PDF işlevselliği gerektiren mobil uygulamalar için GemBox.Pdf'i iyi bir seçim yapar.
5. Mevcut PDF'lerin Düzenlenmesi
Yeni oluşturmak yerine öncelikle mevcut PDF'lerle çalışıyorsanız, GemBox.Pdf'in çıkarma, manipülasyon ve düzenleme araçları bu iş için uygundur.
Kurulum ve Yapılandırma Nasıl Karşılaştırılır?
Her iki kütüphane de NuGet ile kolay kurulum sunar, ancak farklı karmaşıklık seviyeleriyle.
IronPDF Kurulumu
IronPDF kurulumu son derece basittir:
Install-Package IronPdf
Veya .NET CLI üzerinden:
dotnet add package IronPdf
Paket, Chrome render motoru dahil olmak üzere gereken her şeyi içerir. Çoğu kullanım durumu için ek yapılandırma veya bağımlılıklar gerekmez.
Özel dağıtım senaryoları için IronPDF sunar:
IronPdf.Slim: Çalışma zamanında platforma özgü bileşenleri indiren hafif paketIronPdf.Linux: Linux dağıtımları için önceden yapılandırılmışIronPdf.MacOs: macOS ortamları için optimize edilmiş
GemBox.Pdf Kurulumu
GemBox.Pdf, temel PDF manipülasyonu için de eşit derecede basit kurulum sunar:
Install-Package GemBox.Pdf
Ancak, HTML'den PDF'ye dönüştürme için şunlara ihtiyaç duyacaksınız:
Install-Package GemBox.Document
Her iki kütüphane de lisans anahtarı yapılandırması gerektirir:
// IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY";
// GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY");
// IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY";
// GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY");
' IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY"
' GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY")
Lisanslama ve Fiyatlandırma Farklılıkları Nelerdir?
Lisanslama modellerini anlamak, her çözüm için toplam sahip olma maliyetini belirlemeye yardımcı olur.
IronPDF Lisanslama
IronPDF, şeffaf ve kademeli lisanslama sunar (fiyatlandırma 2025 itibariyle):
-
Lite License: $799
- 1 geliştirici
- 1 proje
- 1 yıl destek ve güncellemeler
-
Plus License: $1,199
- 3 geliştirici
- 3 proje
- 1 yıl destek ve güncellemeler
- Professional License: $2,399
- 10 geliştirici
- 10 proje
- 1 yıl destek ve güncellemeler
Ek Seçenekler:
- Telif ücretsiz yeniden dağıtım: +$2,399
- SaaS/OEM lisanslama mevcut
- Iron Suite paketi: $1,498 için 9 ürün
Ana Faydalar:
- 30 günlük para iade garantisi
- Süresiz lisanslar (tek seferlik satın alma)
- Ücretsiz geliştirme ve test
- Geliştirme, test ve üretim ortamına dağıtım dahil
GemBox.Pdf Lisanslama
GemBox, geliştirici başına lisanslama sunar:
- Tek Geliştirici: $890
- 1 geliştirici
- Sınırsız projeler
- 1 yıl destek ve güncellemeler
- Telif ücretsiz dağıtım dahil
Önemli Düşünceler:
- HTML'den PDF'ye için GemBox.Document gerekir: Ek $890
- HTML'den PDF'ye toplam maliyet: Minimum $1.780
- Yenilemelerde %40 indirim (%60 eğer süresi dolmadan önce yenilenirse)
- GemBox Paketi: 7 ürün için $2.200
Ana Faydalar:
- 30 günlük para iade garantisi
- Süresiz lisanslar
- Sınırsız dağıtım dahil
- Sunucu veya OEM lisansları gerekmez
Genel Senaryolar İçin Maliyet Karşılaştırması
| Senaryo | IronPDF Maliyeti | GemBox Maliyeti |
|---|---|---|
| HTML'den PDF'ye tek geliştirici | $799 | $1,780 |
| Sadece PDF manipülasyonu için 3 geliştirici | $1,499 | $2,670 |
| HTML'den PDF'ye 3 geliştirici | $1,199 | $5,340 |
| Enterprise (10 geliştirici), tam özellikli | $2,399 | $8.900+ |
Hangi Kütüphaneyi Seçmelisiniz?
IronPDF ve GemBox.Pdf arasındaki seçim, özgün gereksinimlerinize bağlıdır:
IronPDF'i Şu Durumlarda Seçin:
- HTML'den PDF'ye birincil gereksinimdir: IronPDF'in Chrome tabanlı renderlemesi benzersizdir
- Modern web desteğine ihtiyaçınız var: Tam CSS3, HTML5 ve JavaScript yetenekleri
- Hızlı geliştirme önemlidir: Basit API piyasaya çıkış süresini azaltır
- Dinamik içerikle çalışıyorsunuz: JavaScript yürütme, gerçek zamanlı verileri yakalar
- Platformlar arası dağıtım gereklidir: Bulut ve konteynerize ortamlara mükemmel destek
- Bütçe bir konudur: HTML'den PDF'ye senaryoları için daha düşük giriş maliyeti ve daha iyi değer
GemBox.Pdf'i Şu Durumlarda Seçin:
- Düşük seviyede PDF kontrolü esastır: PDF nesnelerine ve yapısına doğrudan erişim
- Mobil platform desteği gereklidir: Yerel Android ve iOS uyumluluğu
- OCR temel bir gerekliliktir: Ek bağımlılıklar olmadan yerleşik OCR
- Öncelikle mevcut PDF'lerle çalışıyorsunuz: Güçlü manipülasyon ve çıkarma özellikleri
- HTML'den PDF'ye gerek yok: Kullanılmayan GemBox.Document için ödeme yapmaktan kaçının
- Sınırsız dağıtım önemlidir: Telif ücretsiz yeniden dağıtım dahil
Her İki Kütüphaneyi de Kullanmayı Düşünün:
Bazı organizasyonlar, uygulamalarının farklı bölümleri için her iki kütüphaneyi kullanmada değer bulur:
- Rapor üretimi ve HTML'den PDF'ye dönüştürme için IronPDF
- Form işleme ve PDF manipülasyonu için GemBox.Pdf
Seçtiğiniz Kütüphane ile Başlangıç
Her iki kütüphane de değerlendirme için ücretsiz denemeler sunar:
IronPDF'i Deneyin
- NuGet paketini yükleyin
- Geliştirme için lisans anahtarı gerekmez
- Deneme modunda PDF'lerde filigranlar görünür
- Değerlendirme sırasında tam özellik erişimi
GemBox.Pdf'i Deneyin
- NuGet paketini yükleyin
ComponentInfo.SetLicense("FREE-LIMITED-KEY")kullanın- Ücretsiz modda 2 sayfa ile sınırlıdır
- Sınırlamaları kaldırmak için yükseltin
Görsel Kurulum Rehberi
Geliştiriciler, Visual Studio'nun grafik arayüzünü tercih ediyorsa işte her iki kütüphanenin yüklenmesi için adım adım rehber:
Yeni Bir ASP.NET Projesi Oluşturma
Visual Studio'nun ASP.NET Web Uygulaması oluşturma için Yeni Proje diyalog penceresi - PDF oluşturma projelerinin temeli
Proje şablonu olarak Web Forms seçimi - hem IronPDF hem GemBox.Pdf uygulamaları için uygun
NuGet Üzerinden PDF Kütüphanelerini Yükleme
Kütüphane yüklemek için Solution Explorer'da projenize sağ tıklayarak NuGet Paket Yöneticisi'ne erişin
Visual Studio'da Proje menüsünden NuGet Paket Yöneticisi'ne alternatif erişim
NuGet Paket Yöneticisi üzerinden IronPDF yüklemesi - kapsamlı özellik açıklaması ve indirme sayısına dikkat edin
Alternatif Kurulum Yöntemleri
NuGet yüklemesinin uygun olmadığı senaryolar için IronPDF'nin web sitesi doğrudan DLL indirmeleri sunar
Sonuç
Hem IronPDF hem de GemBox.Pdf, .NET geliştiricileri için kaliteli PDF kütüphaneleridir, her birinin kendine has güçlü yanları vardır. IronPDF, Chrome işleme motoru ile HTML'den PDF'ye dönüştürmede mükemmeldir ve modern web uygulamaları ile dinamik içerik üretimi için idealdir. GemBox.Pdf, düşük seviyeli PDF manipülasyonunda ve mobil destek konusunda parlıyor, hassas PDF kontrolü gerektiren uygulamalar için mükemmeldir.
Çoğu web geliştiricisi ve modern uygulamalar geliştiren ekipler için IronPDF, özellikler, kullanım kolaylığı ve değer açısından en iyi kombinasyonu sunar. HTML'den piksel mükemmeliyette PDF'ler işleyebilme yeteneği, tanıdık web teknolojileri kullanarak geliştirme süresini ve karmaşıklığını önemli ölçüde azaltır.
Ancak, GemBox.Pdf, özellikle mobil geliştirme ve PDF form işleme veya OCR gereksinimlerine odaklanan uygulamalar için özel senaryolar için sağlam bir seçim olmaya devam ediyor.
HTML içeriğinizi profesyonel PDF'lere dönüştürmeye hazır mısınız? IronPDF'nin ücretsiz deneme sürümü ile başlangıç yapın ve .NET uygulamalarınızda Chrome kalitesi işleme gücünü deneyimleyin. Kapsamlı belgeler, geniş kod örnekleri ve duyarlı destek ile, saatler değil dakikalarda PDF'ler oluşturacaksınız.
Sıkça Sorulan Sorular
HTML'yi C#'de PDF'ye nasıl dönüştürebilirim?
HTML dizgilerini PDF'lere dönüştürmek için IronPDF'nin RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca RenderHtmlFileAsPdf kullanarak HTML dosyalarının PDF'lere dönüştürülmesini de sağlayabilirsiniz.
Bu kütüphanelerle mevcut PDF dosyalarını değiştirebilir miyim?
Evet, hem IronPDF hem de GemBox.Pdf mevcut PDF dosyalarını değiştirmek için kullanılabilir. IronPDF, birleştirme, ayırma ve filigran eklemek gibi yaygın görevleri basitleştirir. GemBox.Pdf, kapsamlı manipülasyon görevleri için kullanışlı olan PDF nesneleri üzerinde daha ayrıntılı kontrol sunar.
HTML'den PDF'ye dönüşüm için IronPDF kullanmanın avantajları nelerdir?
IronPDF, Chrome V8 render motoru ile üstün HTML'den PDF'ye dönüşüm kalitesi sunar, %98+ tarayıcı uyumu sağlar. Modern CSS3, HTML5, JavaScript yürütme, web yazı tipleri ve duyarlı tasarımları destekler.
Küçük bir geliştirme ekibi için hangisi daha maliyet-etkin?
HTML'den PDF'ye dönüşüme ihtiyaç duyan 3 kişilik bir developer ekibi için, IronPDF Plus lisansı $1,499 maliyetindeyken, GemBox üç GemBox.Pdf lisansı ve üç GemBox.Document lisansı için $5,340 talep eder. IronPDF ekipler için ciddi şekilde daha iyi bir değer sunar.
IronPDF büyük hacimli PDF oluşturumu için uygun mu?
Evet, IronPDF, yaklaşık 125ms HTML'den PDF'ye render süreleri, optimize edilmiş asenkron/await desteği ve 10MB altındaki verimli bellek kullanımı ile mükemmel performans sağlar. Büyük hacimli web tabanlı PDF oluşturumu için uygundur.
IronPDF ile hangi destek dahil?
IronPDF, 24/5 mühendislik desteği, geliştirme ekibine doğrudan erişim ve 24-48 saat tipik yanıt süreleri ile birlikte geniş kapsamlı dokümantasyon ve kod örnekleri sunar.
Bu kütüphanelerle PDF/A uyumlu belgeler oluşturabilir miyim?
Evet, IronPDF, PDF/A uyumlu belgeleri SaveAsPdfA() gibi basit bir metod çağrısıyla oluşturabilir ve birden fazla PDF/A sürümünü destekler. GemBox.Pdf, PDF/A belgelerini okuyabilir ve onları değiştirirken uyumu korur.
Bu kütüphaneler modern .NET çerçeveleriyle uyumlu mu?
Evet, her iki kütüphane de modern .NET sürümlerini destekler. IronPDF, .NET Framework 4.6.2+, .NET Core 3.1+ ve .NET 5'ten 10'a kadar destekler. GemBox.Pdf, .NET Framework 3.5+, .NET Standard 2.0 ve .NET 6+ destekler.
Hangi kütüphane bulut dağıtımı için optimize edilmiştir?
IronPDF, Azure, AWS, Docker konteynerleri ve sunucusuz ortamlara özgü destek ile bulut dağıtımı için optimize edilmiştir. HTML tabanlı yaklaşımı, web uygulamalarıyla doğal olarak uyumludur ve SaaS uygulamaları için daha iyi bir seçimdir.
IronPDF'yi denemek için ücretsiz bir sürüm var mı?
IronPDF, lisans anahtarı olmadan sınırsız geliştirme ve test yapmaya olanak tanıyan ücretsiz bir değerlendirme seçeneği sunar, ancak çıktıda filigranlar görünecektir. Ürünü satın almadan önce değerlendirmek için yeterli fonksiyonu sağlar.



