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

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

Ürün Karşılaştırma Genel Bakışı
IronPDF ve GemBox.Pdf .NET Geliştirme için Özellik Karşılaştırması
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ı
Not. GemBox.Pdf, PDF düzenlemeye odaklanır ve HTML dönüştürme için GemBox.Document gerektirir. IronPDF, tam tarayıcı işleme ile yerel HTML'den PDF'ye dönüştürme sağlar. *GemBox için HTML desteği ek ürün satın alımını gerektirir.

Lütfen dikkate alinGemBox.Pdf, HTML'den PDF'ye dönüştürme için ayrı GemBox.Document kütüphanesi ($890 ek) gerektirir.

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

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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:

  1. GemBox.Document'ı ayrı olarak satın alın ($890 ek maliyet)
  2. HTML'yi DOCX'e dönüştürmek için GemBox.Document kullanın
  3. 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")
$vbLabelText   $csharpLabel

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 paket
  • IronPdf.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")
$vbLabelText   $csharpLabel

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

  1. NuGet paketini yükleyin
  2. Geliştirme için lisans anahtarı gerekmez
  3. Deneme modunda PDF'lerde filigranlar görünür
  4. Değerlendirme sırasında tam özellik erişimi

IronPDF Ücretsiz Deneme İndir

GemBox.Pdf'i Deneyin

  1. NuGet paketini yükleyin
  2. ComponentInfo.SetLicense("FREE-LIMITED-KEY") kullanın
  3. Ücretsiz modda 2 sayfa ile sınırlıdır
  4. 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 Yeni Proje diyalog penceresi, ASP.NET Web Uygulaması seçimi ile .NET Framework seçeneklerini gösteriyor Visual Studio'nun ASP.NET Web Uygulaması oluşturma için Yeni Proje diyalog penceresi - PDF oluşturma projelerinin temeli

ASP.NET proje şablon seçimi ekranı, PDF kütüphane entegrasyonu için Web Forms seçeneğini vurguluyor Proje şablonu olarak Web Forms seçimi - hem IronPDF hem GemBox.Pdf uygulamaları için uygun

NuGet Üzerinden PDF Kütüphanelerini Yükleme

Solution Explorer bağlam menüsünde PDF kütüphaneleri eklemek için NuGet Paketleri Yönet seçeneği Kütüphane yüklemek için Solution Explorer'da projenize sağ tıklayarak NuGet Paket Yöneticisi'ne erişin

Visual Studio Proje menüsü, PDF kütüphane yükleme için NuGet Paketleri Yönet seçeneğini gösteriyor Visual Studio'da Proje menüsünden NuGet Paket Yöneticisi'ne alternatif erişim

NuGet Paket Yöneticisi arayüzü, IronPDF yüklemesi, sürüm detayları ve açıklamayı gösteriyor NuGet Paket Yöneticisi üzerinden IronPDF yüklemesi - kapsamlı özellik açıklaması ve indirme sayısına dikkat edin

Alternatif Kurulum Yöntemleri

IronPDF resmi web sitesi indirme sayfası, manuel kurulum için doğrudan DLL indirme seçeneği gösteriyor 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.

Lütfen dikkate alinGemBox.Pdf ve GemBox.Document kendi sahiplerinin tescilli ticari markalarıdır. Bu site, GemBox.Pdf veya GemBox.Document ile ilişkilendirilmiş, onaylanmış veya desteklenmemiştir. Tüm ürün adları, logolar ve markalar kendi sahiplerinin mülkiyetindedir. Karşılaştırmalar yalnızca bilgilendirme amaçlıdır ve yazım sırasında kamuya açık bilgileri yansıtır.

Sıkça Sorulan Sorular

HTML'yi 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.

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

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

Daha Fazlasını Oku

Iron Destek Ekibi

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