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

IronPDF ve HiQPdf C# Arasındaki Karşılaştırma

.NET projeniz için doğru PDF kütüphanesini mi arıyorsunuz? IronPDF ve PDFTron (şimdi Apryse) arasındaki bu kapsamlı karşılaştırma, özellikleri, fiyatları, performansı ve geliştirici deneyimini analiz ederek bilinçli bir karar verme sürecinize yardımcı olur. Web uygulamaları, masaüstü yazılımları veya bulut hizmetleri oluştururken, doğru PDF araç kitini seçmek geliştirme hızınızı ve proje başarınızı önemli ölçüde etkileyebilir.

Hızlı Karşılaştırma Özeti

Kategori Özellikler/Aspekt IronPDF PDFTron (Apryse) Temel Avantaj
Çekirdek Mimari Tasarım Felsefesi Sadelik odaklı, Chrome V8 motoru Kurumsal odaklı, özel motor IronPDF: Daha hızlı geliştirme
API Karmaşıklığı Basit yöntemler, örneğin RenderHtmlAsPdf() IronPDF: Önemli ölçüde daha az hazırlık kodu
Öğrenme Eğrisi 1-2 gün tipik 1-2 hafta tipik IronPDF: Daha hızlı benimseme
Platform Desteği Çapraz Platform Yerel destek, tek paket Birden fazla paket/modül gerekli IronPDF: Daha basit dağıtım
.NET Sürümleri .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ Ek kurulumla benzer destek Her İkisi: Modern çerçeve desteği
HTML'den PDF'e Renderleme Motoru Tam Chrome V8 motoru Özel motor (HTML2PDF modülü üzerinden) IronPDF: %98+ tarayıcı uyumluluğu
JavaScript Desteği Rendeleme gecikmeleriyle tam destek Sınırlı destek IronPDF: Dinamik içerik hazır
MS Office Desteği DOCX'ten PDF'ye Yerleşik DocxToPdfRenderer PDFTron: Daha iyi Office sadakati
CAD Desteği Mevcut değil DWG, DXF, DGN'den PDF'ye PDFTron: CAD iş akışları
Performans HTML İşleme Hızı Chrome-motor işleme; içerik karmaşıklığına göre değişir Özel-motor render; karşılaştırmalar için Apryse ile iletişime geçin Kullanım amacına göre değişir
Bellek Kullanımı Gömeçli Chrome sürecinden dolayı daha yüksek; asenkron/paralel işleme destekler Basit dönüşümler için daha düşük yük (özel motor) Apryse: Temel kullanım için daha düşük bellek
Licensing & Pricing Giriş Seviyesi Lite: $999 (1 geliştirici, 1 proje) Fiyat teklifi için satış ekibi ile iletişime geçin IronPDF: Şeffaf fiyatlandırma
Enterprise Professional: $2,999 (10 geliştirici) Fiyat teklifi için satış ekibi ile iletişime geçin IronPDF: Şeffaf yayınlanmış fiyatlandırma
Destek Destek Dahil Evet, 24/5 mühendislik desteği Lisans seviyesine göre değişir IronPDF: Destek dahil
En İyi Kullanım Alanı Kullanım Durumları Modern web uygulamaları, HTML raporları, hızlı geliştirme Doküman ağırlıklı iş akışları, CAD/Office dönüştürme Bağlama bağlı

IronPDF ve PDFTron (Apryse) Nedir?

IronPDF Genel Bakış

IronPDF, geliştiriciler için PDF oluşturma, düzenleme ve manipülasyonu kolaylaştıran, kapsamlı bir .NET PDF kütüphanesidir. Chrome bir rendeleme motoru üzerine inşa edilmiştir, HTML, CSS ve JavaScript'i pikselle mükemmel PDF belgelerine dönüştürmede ustadır. Kütüphanenin anlaşılır API tasarımı, geliştiricilerin minimal kodla PDF işlevselliğini entegre etmelerine olanak tanır, bu da web uygulamaları, raporlama sistemleri ve doküman otomasyonu için idealdir.

PDFTron (Apryse) Genel Görünüm

PDFTron, Şubat 2023'te Apryse olarak yeniden markalaşmış, işletme odaklı bir PDF SDK'sıdır ve geniş belgeler işleme yetenekleri sunar. Öncelikle karmaşık belge iş akışları için geliştirilen bu SDK, çeşitli dosya formatları için güçlü destek sunar, Microsoft Office, CAD çizimleri ve özel belge türleri de bunlar arasındadır. PDFTron Systems Inc., belgeleme teknolojisinde küresel bir lider olarak iText, Windward, Eversign ve daha fazlası gibi 13 şirketi bir araya getirerek yeniden markalaşma duyurusunu yaptı. Bu şirketler arasında iText, Windward, Eversign ve daha fazlası yer alıyor.

PDF Oluşturma için Bir ASP.NET Projesini Nasıl Yaratırım?

PDF oluşturma için bir ASP.NET projesi kurmak, hangi kütüphaneyi seçerseniz seçin uygun konfigürasyon gerektirir. IronPDF veya PDFTron entegrasyonu için bir temel oluşturmak için bu adımları izleyin:

  1. Visual Studio 2022 veya daha yenisini açın
  2. 'Yeni bir proje oluştur'u tıklayın 'ASP.NET Core Web Uygulaması' (NET 6.0 veya daha yenisi önerilir) seçin Proje adınızı ve konumunu seçin 'Web Uygulaması (Model-Görünüm-Denetleyici)' veya ihtiyaçlarınıza göre 'Web API'yi seçin Optimum uyumluluk için '.NET 8.0' veya daha yenisinin seçili olduğundan emin olun

Visual Studio yeni proje diyalog kutusu ASP.NET Core Web Uygulama seçimi gösteriyor Visual Studio'nun Yeni Proje iletişim kutusu, PDF kütüphanesi entegrasyonu için ASP.NET proje şablonlarını gösteriyor

Web Forms uygulamaları için:

  • 'ASP.NET Web Uygulaması (.NET Framework)' seçin Şablon seçeneklerinden 'Web Forms'u seçin Proje yapısını oluşturmak için 'Oluştur'a tıklayın

Visual Studio proje oluşturma sihirbazında Web Formları şablon seçimi PDF yeteneklerine sahip geleneksel ASP.NET uygulamaları için Web Forms şablonunun seçilmesi

IronPDF'yi C# Projemde Nasıl Yüklerim?

IronPDF, farklı geliştirme iş akışlarına uyacak birden fazla kurulum yöntemi sunar. Visual Studio'da, Çözüm Gezgini'nde projenize sağ tıklayın ve 'NuGet Paketlerini Yönet...' seçeneğini seçin. Oradan, IronPDF'yi arayın ve en son sürümü yükleyin.

Yöntem 1: Visual Studio Paket Yöneticisi Kullanılarak

En basit yaklaşım, Visual Studio'nun yerleşik NuGet Paket Yöneticisini kullanır:

  1. Çözüm Gezgini'nde projenize sağ tıklayın
  2. "NuGet Paketlerini Yönet" seçeneğini seçin
  3. "Gözat"a tıklayın ve "IronPDF" arayın
  4. IronPDF paketinde 'Yükle'yi tıklayın

Çözüm Gezgini bağlam menüsü NuGet Paketlerini Yönet seçeneğini gösteriyor Visual Studio'nun Çözüm Gezgini üzerinden IronPDF yüklemesi için NuGet Paket Yöneticisine erişim

Visual Studio'da proje menüsü paket yönetim seçeneklerini gösteriyor Visual Studio'nun Proje menüsü aracılığıyla NuGet Paket Yöneticisine alternatif erişim

NuGet Paket Yöneticisi arayüzü IronPDF kurulumunu gösteriyor NuGet Paket Yöneticisi aracılığıyla sürüm bilgileri ve bağımlılıklarla birlikte IronPDF'nin yüklenmesi

Yöntem 2: Paket Yöneticisi Konsolu Kullanarak

Komut satırı araçlarını tercih eden geliştiriciler için:

# Open Package Manager Console in Visual Studio
# Tools > NuGet Package Manager > Package Manager Console
Install-Package IronPdf

# For specific version installation
Install-Package IronPdf -Version 2025.7.0
# Open Package Manager Console in Visual Studio
# Tools > NuGet Package Manager > Package Manager Console
Install-Package IronPdf

# For specific version installation
Install-Package IronPdf -Version 2025.7.0
SHELL

Yöntem 3: Doğrudan İndirme Kurulumu

NuGet erişimi olmayan ortamlar için:

  1. IronPDF'nin resmi sitesinden indirin ZIP dosyasını proje dizininize çıkarın Visual Studio'da, 'Başvurular'a sağ tıklayın → 'Başvuru Ekle'
  2. IronPdf.dll'e gidin ve seçin

Yöntem 4: .NET CLI Kullanarak

Komut satırı meraklıları ve CI/CD boru hatları için:

# Navigate to your project directory
cd MyProject

# Install IronPDF
dotnet add package IronPdf

# Restore packages
dotnet restore
# Navigate to your project directory
cd MyProject

# Install IronPDF
dotnet add package IronPdf

# Restore packages
dotnet restore
SHELL

PDFTron (Apryse) SDK Nasıl Yüklenir?

PDFTron kurulumunda modüler mimarisi ve kurumsal odaklı yaklaşımı nedeniyle daha fazla adım bulunur. İşlem, hedef platformunuza ve gereksinim duyduğunuz özelliklere bağlı olarak değişir.

Ön Koşullar

  • Visual Studio 2019 veya daha yeni
  • .NET Masaüstü Geliştirme iş yükü
  • .NET Framework 4.5.1+ geliştirme araçları PDFTron SDK indirme

Manuel Entegrasyon Adımları

  1. SDK'yı Çıkarın

    # Example extraction path
    PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/
    # Example extraction path
    PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/
    SHELL
  2. Lisans Anahtarı ile Başlatın

    // Initialize PDFTron with your license key
    pdftron.PDFNet.Initialize("your-license-key-here");
    
    // Note: Demo keys expire after evaluation period
    // Contact Apryse sales for production licenses
    // Initialize PDFTron with your license key
    pdftron.PDFNet.Initialize("your-license-key-here");
    
    // Note: Demo keys expire after evaluation period
    // Contact Apryse sales for production licenses
    ' Initialize PDFTron with your license key
    pdftron.PDFNet.Initialize("your-license-key-here")
    
    ' Note: Demo keys expire after evaluation period
    ' Contact Apryse sales for production licenses
    $vbLabelText   $csharpLabel
  3. Gerekli Kütüphaneleri Kopyalayın

    • Lib klasörünü PDFNET_BASE konumundan proje dizininize kopyalayın
    • Hem PDFNetLoader.dll hem de platforma özgü PDFNet.dll için referanslar ekleyin
  4. Yerel Kopya Özelliğini Yapılandırın

PDFTron Copy Local özelliği Visual Studio'da False olarak ayarlanmış PDFNet.dll'in PDFTron dağıtımı için Yerel Kopya özelliğinin Yanlış ayarlanması

  1. App.config'i Güncelleyin

    <configuration>
       <runtime>
           <loadFromRemoteSources enabled="true" />
       </runtime>
    </configuration>
    <configuration>
       <runtime>
           <loadFromRemoteSources enabled="true" />
       </runtime>
    </configuration>
    XML
  2. Yapı Sonrası Olayları Yapılandırın

    xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Y
    xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Y
    SHELL

NuGet Kurulumu (Basit)

Daha basitleştirilmiş bir yaklaşım için:

  1. NuGet Paket Yöneticisini açın 'PDFTron.NET.x64' veya platforma özgü paketi arayın Mimarinize uygun paketi yükleyin

PDFTron NuGet paket yükleme arayüzü Platforma özgü paketlerle NuGet Paket Yöneticisi aracılığıyla PDFTron'un yüklenmesi

PDFTron, ComPDFKit'in 10+ tipiyle karşılaştırıldığında 30'dan fazla ek açıklama türü sunar. Ancak, bu geniş özellik seti, kurulum sırasında dikkatli modül seçimini gerektirir.

Bu Kütüphaneleri Kullanarak Bir URL'yi PDF'ye Nasıl Dönüştürürüm?

Her iki kütüphane de URL'den PDF'ye dönüşüm sunar, ancak farklı yaklaşımlar ve yeteneklerle. Her birinin uygulama detayları ve performans özelliklerini inceleyelim.

IronPDF ile URL'yi PDF'ye Dönüştürme

IronPDF'nin Chrome render motoru, modern web standartları için olağanüstü destek sunar:

using IronPdf;

// Initialize the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer();

// Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS execution

// Handle authentication if needed
renderer.LoginCredentials = new ChromeHttpLoginCredentials() {
    Username = "user@domain.com",
    Password = "secure_password"
};

// Render URL to PDF with full browser capabilities
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");

// Add metadata for document management
pdf.MetaData.Author = "Development Team";
pdf.MetaData.Title = "Website Export - " + DateTime.Now.ToString("yyyy-MM-dd");

// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("website-export.pdf");
using IronPdf;

// Initialize the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer();

// Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS execution

// Handle authentication if needed
renderer.LoginCredentials = new ChromeHttpLoginCredentials() {
    Username = "user@domain.com",
    Password = "secure_password"
};

// Render URL to PDF with full browser capabilities
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");

// Add metadata for document management
pdf.MetaData.Author = "Development Team";
pdf.MetaData.Title = "Website Export - " + DateTime.Now.ToString("yyyy-MM-dd");

// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("website-export.pdf");
Imports IronPdf

' Initialize the Chrome renderer with advanced options
Private renderer = New ChromePdfRenderer()

' Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.RenderDelay = 1000 ' Wait for JS execution

' Handle authentication if needed
renderer.LoginCredentials = New ChromeHttpLoginCredentials() With {
	.Username = "user@domain.com",
	.Password = "secure_password"
}

' Render URL to PDF with full browser capabilities
Dim pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/")

' Add metadata for document management
pdf.MetaData.Author = "Development Team"
pdf.MetaData.Title = "Website Export - " & DateTime.Now.ToString("yyyy-MM-dd")

' Save with compression
pdf.CompressImages(90)
pdf.SaveAs("website-export.pdf")
$vbLabelText   $csharpLabel

IronPDF'deki Chrome renderleyici, aşağıdaki karmaşık senaryoları işler:

  • Yoğun JavaScript ile Tek Sayfa Uygulamaları (SPA)
  • Medya sorguları ile duyarlı tasarımlar
  • Web yazı tipleri ve harici stil sayfaları
  • AJAX içerik yükleme
  • CSS animasyonları ve geçişleri

IronPDF, kutudan çıkar çıkmaz bu işleme senaryolarını destekler: nuget.org/packages/IronPdf. Son performans iyileştirmeleri, özellikle karmaşık web uygulamaları için işleme hızını arttırmıştır.

PDFTron (Apryse) ile URL'yi PDF'ye Dönüştürme

PDFTron, web içeriği dönüşümü için HTML2PDF modülüne ihtiyaç duyar:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

class UrlToPdfConverter 
{
    public static void ConvertUrlToPdf(string url, string outputPath)
    {
        // Initialize PDFTron with license
        PDFNet.Initialize("your-license-key");

        // Create a new PDF document
        using (PDFDoc doc = new PDFDoc())
        {
            // Initialize HTML2PDF converter
            HTML2PDF converter = new HTML2PDF();

            // Configure conversion settings
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            // Set page dimensions
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetMargins(0.5, 0.5, 0.5, 0.5);

            // Insert URL content
            converter.InsertFromURL(url);

            // Perform conversion
            if (converter.Convert(doc))
            {
                // Save the resulting PDF
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine($"Successfully converted {url} to {outputPath}");
            }
            else
            {
                Console.WriteLine("Conversion failed");
            }
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

class UrlToPdfConverter 
{
    public static void ConvertUrlToPdf(string url, string outputPath)
    {
        // Initialize PDFTron with license
        PDFNet.Initialize("your-license-key");

        // Create a new PDF document
        using (PDFDoc doc = new PDFDoc())
        {
            // Initialize HTML2PDF converter
            HTML2PDF converter = new HTML2PDF();

            // Configure conversion settings
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            // Set page dimensions
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetMargins(0.5, 0.5, 0.5, 0.5);

            // Insert URL content
            converter.InsertFromURL(url);

            // Perform conversion
            if (converter.Convert(doc))
            {
                // Save the resulting PDF
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine($"Successfully converted {url} to {outputPath}");
            }
            else
            {
                Console.WriteLine("Conversion failed");
            }
        }
    }
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF

Friend Class UrlToPdfConverter
	Public Shared Sub ConvertUrlToPdf(ByVal url As String, ByVal outputPath As String)
		' Initialize PDFTron with license
		PDFNet.Initialize("your-license-key")

		' Create a new PDF document
		Using doc As New PDFDoc()
			' Initialize HTML2PDF converter
			Dim converter As New HTML2PDF()

			' Configure conversion settings
			Dim settings As New HTML2PDF.WebPageSettings()
			settings.SetPrintBackground(True)
			settings.SetLoadImages(True)

			' Set page dimensions
			converter.SetPaperSize(PrinterMode.PaperSize.e_letter)
			converter.SetMargins(0.5, 0.5, 0.5, 0.5)

			' Insert URL content
			converter.InsertFromURL(url)

			' Perform conversion
			If converter.Convert(doc) Then
				' Save the resulting PDF
				doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
				Console.WriteLine($"Successfully converted {url} to {outputPath}")
			Else
				Console.WriteLine("Conversion failed")
			End If
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

PDFTron HTML2PDF için önemli hususlar:

  • PDFTron'un SDK'sı teknolojinin genişliği (API'ler, özellikler) ve dağıtım kapsamı (dış veya iç kullanıcılar) baz alınarak fiyatlandırılır.
  • Tarayıcı motorlarına kıyasla sınırlı JavaScript desteği
  • Karmaşık düzenler için ek yapılandırma gerekebilir
  • Basit HTML belgeleri için daha uygundur

HTML Stringlerinden PDF Nasıl Oluşturulur?

HTML dizgilerinden PDF oluşturmak, dinamik raporlar, faturalar ve belgeler oluşturmak için gereklidir. Her iki kütüphane de bunu farklı şekilde ele alır.

HTML Dizgisinden PDF'ye Dönüştürme

IronPDF, tam CSS3 ve JavaScript desteği ile karmaşık HTML'yi başarıyla işler:

using IronPdf;
using System.Text;

public class HtmlStringToPdfConverter
{
    public static PdfDocument GenerateInvoice(InvoiceData data)
    {
        // Build dynamic HTML with modern CSS
        var html = new StringBuilder();
        html.Append(@"
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');

                body {
                    font-family: 'Roboto', sans-serif;
                    margin: 0;
                    padding: 20px;
                    color: #333;
                }

                .invoice-header {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 2px solid #007bff;
                    padding-bottom: 20px;
                    margin-bottom: 30px;
                }

                .company-logo {
                    width: 150px;
                    height: auto;
                }

                .invoice-details {
                    text-align: right;
                }

                .invoice-number {
                    font-size: 24px;
                    font-weight: 700;
                    color: #007bff;
                }

                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }

                th {
                    background-color: #f8f9fa;
                    padding: 12px;
                    text-align: left;
                    border-bottom: 2px solid #dee2e6;
                }

                td {
                    padding: 12px;
                    border-bottom: 1px solid #dee2e6;
                }

                .total-row {
                    font-weight: 700;
                    font-size: 18px;
                    background-color: #e9ecef;
                }

                @media print {
                    body { margin: 0; }
                    .no-print { display: none; }
                }
            </style>
        </head>
        <body>
        ");

        // Add invoice header
        html.Append($@"
            <div class='invoice-header'>
                <div>
                    <img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
                    <h2>{data.CompanyName}</h2>
                    <p>{data.CompanyAddress}</p>
                </div>
                <div class='invoice-details'>
                    <div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
                    <p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
                    <p>Due: {data.DueDate:yyyy-MM-dd}</p>
                </div>
            </div>
        ");

        // Add line items table
        html.Append(@"
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
        ");

        foreach (var item in data.LineItems)
        {
            html.Append($@"
                <tr>
                    <td>{item.Description}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.UnitPrice:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>
            ");
        }

        html.Append($@"
                </tbody>
                <tfoot>
                    <tr class='total-row'>
                        <td colspan='3'>Total</td>
                        <td>${data.Total:F2}</td>
                    </tr>
                </tfoot>
            </table>
        </body>
        </html>
        ");

        // Configure renderer for optimal output
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

        // Generate PDF with proper base path for assets
        var pdf = renderer.RenderHtmlAsPdf(html.ToString());

        // Add security if needed
        pdf.SecuritySettings.UserPassword = data.CustomerEmail;
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        return pdf;
    }
}
using IronPdf;
using System.Text;

public class HtmlStringToPdfConverter
{
    public static PdfDocument GenerateInvoice(InvoiceData data)
    {
        // Build dynamic HTML with modern CSS
        var html = new StringBuilder();
        html.Append(@"
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');

                body {
                    font-family: 'Roboto', sans-serif;
                    margin: 0;
                    padding: 20px;
                    color: #333;
                }

                .invoice-header {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 2px solid #007bff;
                    padding-bottom: 20px;
                    margin-bottom: 30px;
                }

                .company-logo {
                    width: 150px;
                    height: auto;
                }

                .invoice-details {
                    text-align: right;
                }

                .invoice-number {
                    font-size: 24px;
                    font-weight: 700;
                    color: #007bff;
                }

                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }

                th {
                    background-color: #f8f9fa;
                    padding: 12px;
                    text-align: left;
                    border-bottom: 2px solid #dee2e6;
                }

                td {
                    padding: 12px;
                    border-bottom: 1px solid #dee2e6;
                }

                .total-row {
                    font-weight: 700;
                    font-size: 18px;
                    background-color: #e9ecef;
                }

                @media print {
                    body { margin: 0; }
                    .no-print { display: none; }
                }
            </style>
        </head>
        <body>
        ");

        // Add invoice header
        html.Append($@"
            <div class='invoice-header'>
                <div>
                    <img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
                    <h2>{data.CompanyName}</h2>
                    <p>{data.CompanyAddress}</p>
                </div>
                <div class='invoice-details'>
                    <div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
                    <p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
                    <p>Due: {data.DueDate:yyyy-MM-dd}</p>
                </div>
            </div>
        ");

        // Add line items table
        html.Append(@"
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
        ");

        foreach (var item in data.LineItems)
        {
            html.Append($@"
                <tr>
                    <td>{item.Description}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.UnitPrice:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>
            ");
        }

        html.Append($@"
                </tbody>
                <tfoot>
                    <tr class='total-row'>
                        <td colspan='3'>Total</td>
                        <td>${data.Total:F2}</td>
                    </tr>
                </tfoot>
            </table>
        </body>
        </html>
        ");

        // Configure renderer for optimal output
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

        // Generate PDF with proper base path for assets
        var pdf = renderer.RenderHtmlAsPdf(html.ToString());

        // Add security if needed
        pdf.SecuritySettings.UserPassword = data.CustomerEmail;
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        return pdf;
    }
}
Imports IronPdf
Imports System.Text

Public Class HtmlStringToPdfConverter
	Public Shared Function GenerateInvoice(ByVal data As InvoiceData) As PdfDocument
		' Build dynamic HTML with modern CSS
		Dim html = New StringBuilder()
		html.Append("
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');

                body {
                    font-family: 'Roboto', sans-serif;
                    margin: 0;
                    padding: 20px;
                    color: #333;
                }

                .invoice-header {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 2px solid #007bff;
                    padding-bottom: 20px;
                    margin-bottom: 30px;
                }

                .company-logo {
                    width: 150px;
                    height: auto;
                }

                .invoice-details {
                    text-align: right;
                }

                .invoice-number {
                    font-size: 24px;
                    font-weight: 700;
                    color: #007bff;
                }

                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }

                th {
                    background-color: #f8f9fa;
                    padding: 12px;
                    text-align: left;
                    border-bottom: 2px solid #dee2e6;
                }

                td {
                    padding: 12px;
                    border-bottom: 1px solid #dee2e6;
                }

                .total-row {
                    font-weight: 700;
                    font-size: 18px;
                    background-color: #e9ecef;
                }

                @media print {
                    body { margin: 0; }
                    .no-print { display: none; }
                }
            </style>
        </head>
        <body>
        ")

		' Add invoice header
		html.Append($"
            <div class='invoice-header'>
                <div>
                    <img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
                    <h2>{data.CompanyName}</h2>
                    <p>{data.CompanyAddress}</p>
                </div>
                <div class='invoice-details'>
                    <div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
                    <p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
                    <p>Due: {data.DueDate:yyyy-MM-dd}</p>
                </div>
            </div>
        ")

		' Add line items table
		html.Append("
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
        ")

		For Each item In data.LineItems
			html.Append($"
                <tr>
                    <td>{item.Description}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.UnitPrice:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>
            ")
		Next item

		html.Append($"
                </tbody>
                <tfoot>
                    <tr class='total-row'>
                        <td colspan='3'>Total</td>
                        <td>${data.Total:F2}</td>
                    </tr>
                </tfoot>
            </table>
        </body>
        </html>
        ")

		' Configure renderer for optimal output
		Dim renderer = New ChromePdfRenderer()
		renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
		renderer.RenderingOptions.EnableJavaScript = True
		renderer.RenderingOptions.CreatePdfFormsFromHtml = True

		' Generate PDF with proper base path for assets
		Dim pdf = renderer.RenderHtmlAsPdf(html.ToString())

		' Add security if needed
		pdf.SecuritySettings.UserPassword = data.CustomerEmail
		pdf.SecuritySettings.AllowUserPrinting = True
		pdf.SecuritySettings.AllowUserCopyPasteContent = False

		Return pdf
	End Function
End Class
$vbLabelText   $csharpLabel

IronPDF'nin HTML renderlemesinin temel avantajları:

  • Flexbox ve grid düzenleri dahil tam CSS3 desteği
  • Google Fonts ve web font entegrasyonu
  • JavaScript grafik kütüphaneleri (Chart.js, D3.js) mükemmel şekilde işlenir
  • Görünüm kontrolü ile duyarlı tasarım desteği
  • Kendi kendine yeten belgeler için Base64 resim yerleştirme

PDFTron (Apryse) ile HTML Dizgisinden PDF'ye Dönüştürme

PDFTron'un HTML dizgisi dönüşümüne yaklaşımı:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronHtmlConverter
{
    public static void ConvertHtmlString(string htmlContent, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Create HTML2PDF converter instance
            HTML2PDF converter = new HTML2PDF();

            // Configure page settings
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetLandscape(false);
            converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches);

            // Enable images and backgrounds
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);
            settings.SetJavaScriptDelay(1000); // Limited JS support

            // Insert HTML content
            converter.InsertFromHtmlString(htmlContent);

            // Convert to PDF
            if (converter.Convert(doc))
            {
                // Post-processing options
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
            }
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronHtmlConverter
{
    public static void ConvertHtmlString(string htmlContent, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Create HTML2PDF converter instance
            HTML2PDF converter = new HTML2PDF();

            // Configure page settings
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetLandscape(false);
            converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches);

            // Enable images and backgrounds
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);
            settings.SetJavaScriptDelay(1000); // Limited JS support

            // Insert HTML content
            converter.InsertFromHtmlString(htmlContent);

            // Convert to PDF
            if (converter.Convert(doc))
            {
                // Post-processing options
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
            }
        }
    }
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF

Public Class PdfTronHtmlConverter
	Public Shared Sub ConvertHtmlString(ByVal htmlContent As String, ByVal outputPath As String)
		PDFNet.Initialize("your-license-key")

		Using doc As New PDFDoc()
			' Create HTML2PDF converter instance
			Dim converter As New HTML2PDF()

			' Configure page settings
			converter.SetPaperSize(PrinterMode.PaperSize.e_letter)
			converter.SetLandscape(False)
			converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches)

			' Enable images and backgrounds
			Dim settings As New HTML2PDF.WebPageSettings()
			settings.SetPrintBackground(True)
			settings.SetLoadImages(True)
			settings.SetJavaScriptDelay(1000) ' Limited JS support

			' Insert HTML content
			converter.InsertFromHtmlString(htmlContent)

			' Convert to PDF
			If converter.Convert(doc) Then
				' Post-processing options
				doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
			End If
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

PDFTron HTML sınırlamaları göz önünde bulundurulmalı:

  • Temel CSS desteği (ileri düzey düzenler yok)
  • Sınırlı JavaScript çalıştırma
  • Font yerleştirme ek yapılandırma gerektirir
  • Basit belge düzenleri için daha uygun

ASPX Sayfalarını PDF'ye Nasıl Dönüştürebilirim?

ASPX sayfalarını PDF'ye dönüştürmek, ASP.NET uygulamaları için yaygın bir gereksinimdir. IronPDF yerel destek sunarken, PDFTron geçici çözümler gerektirir.

IronPDF ile ASPX'ten PDF'ye Dönüştürme

IronPDF, tek bir kod satırı ile sorunsuz ASPX dönüşümü sunar:

using IronPdf;

public partial class InvoicePage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Render the current ASPX page as PDF on page load
        if (Request.QueryString["pdf"] == "true")
        {
            // Configure PDF output options
            AspxToPdf.RenderThisPageAsPdf(
                AspxToPdf.FileBehavior.InBrowser,
                "Invoice_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
        }
    }

    protected void ExportToPdfButton_Click(object sender, EventArgs e)
    {
        // Advanced configuration for ASPX to PDF
        IronPdf.AspxToPdf.RenderThisPageAsPdf(
            IronPdf.AspxToPdf.FileBehavior.Attachment,
            "Invoice.pdf",
            new ChromePdfRenderOptions()
            {
                PaperSize = PdfPaperSize.A4,
                MarginTop = 20,
                MarginBottom = 20,
                CssMediaType = PdfCssMediaType.Print,
                EnableJavaScript = true,
                CreatePdfFormsFromHtml = true,
                FitToPaper = true
            });
    }
}
using IronPdf;

public partial class InvoicePage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Render the current ASPX page as PDF on page load
        if (Request.QueryString["pdf"] == "true")
        {
            // Configure PDF output options
            AspxToPdf.RenderThisPageAsPdf(
                AspxToPdf.FileBehavior.InBrowser,
                "Invoice_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
        }
    }

    protected void ExportToPdfButton_Click(object sender, EventArgs e)
    {
        // Advanced configuration for ASPX to PDF
        IronPdf.AspxToPdf.RenderThisPageAsPdf(
            IronPdf.AspxToPdf.FileBehavior.Attachment,
            "Invoice.pdf",
            new ChromePdfRenderOptions()
            {
                PaperSize = PdfPaperSize.A4,
                MarginTop = 20,
                MarginBottom = 20,
                CssMediaType = PdfCssMediaType.Print,
                EnableJavaScript = true,
                CreatePdfFormsFromHtml = true,
                FitToPaper = true
            });
    }
}
Imports IronPdf

Partial Public Class InvoicePage
	Inherits System.Web.UI.Page

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
		' Render the current ASPX page as PDF on page load
		If Request.QueryString("pdf") = "true" Then
			' Configure PDF output options
			AspxToPdf.RenderThisPageAsPdf(AspxToPdf.FileBehavior.InBrowser, "Invoice_" & DateTime.Now.ToString("yyyyMMdd") & ".pdf")
		End If
	End Sub

	Protected Sub ExportToPdfButton_Click(ByVal sender As Object, ByVal e As EventArgs)
		' Advanced configuration for ASPX to PDF
		IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.Attachment, "Invoice.pdf", New ChromePdfRenderOptions() With {
			.PaperSize = PdfPaperSize.A4,
			.MarginTop = 20,
			.MarginBottom = 20,
			.CssMediaType = PdfCssMediaType.Print,
			.EnableJavaScript = True,
			.CreatePdfFormsFromHtml = True,
			.FitToPaper = True
		})
	End Sub
End Class
$vbLabelText   $csharpLabel

Renderleme süreci üzerinde daha fazla kontrol için:

// In Global.asax.cs or Startup.cs
public static void ConfigureAspxToPdf()
{
    // Set global defaults for all ASPX to PDF conversions
    AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4;
    AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = true;
    AspxToPdf.GlobalSettings.EnableJavaScript = true;
    AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen;

    // Custom headers and footers
    AspxToPdf.GlobalSettings.HtmlHeader = new HtmlHeaderFooter()
    {
        HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
        Height = 25
    };
}
// In Global.asax.cs or Startup.cs
public static void ConfigureAspxToPdf()
{
    // Set global defaults for all ASPX to PDF conversions
    AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4;
    AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = true;
    AspxToPdf.GlobalSettings.EnableJavaScript = true;
    AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen;

    // Custom headers and footers
    AspxToPdf.GlobalSettings.HtmlHeader = new HtmlHeaderFooter()
    {
        HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
        Height = 25
    };
}
' In Global.asax.cs or Startup.cs
Public Shared Sub ConfigureAspxToPdf()
	' Set global defaults for all ASPX to PDF conversions
	AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4
	AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = True
	AspxToPdf.GlobalSettings.EnableJavaScript = True
	AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen

	' Custom headers and footers
	AspxToPdf.GlobalSettings.HtmlHeader = New HtmlHeaderFooter() With {
		.HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
		.Height = 25
	}
End Sub
$vbLabelText   $csharpLabel

IronPDF'nin ASPX'ten PDF'ye dönüştürme özelliği şunları korur:

  • ViewState ve form değerleri
  • Oturum durumu verileri
  • CSS stil ve düzenleri
  • JavaScript ile oluşturulan içerik
  • Ana sayfa düzenleri

PDFTron ile Alternatif ASPX

Apryse (PDFTron), IronPDF'nın AspxToPdf sınıfına eşdeğer bir yerleşik ASPX'ten PDF'ye dönüştürücü sağlamaz. Geliştiriciler genellikle, ASPX sayfası çıktısını önce bir HTML dizesi olarak yakalayarak bunu cıvar:

// Capture ASPX output as HTML, then convert
public void ConvertAspxWithPdfTron()
{
    // Render ASPX to string first
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    // Render the page to HTML
    this.RenderControl(hw);
    string htmlContent = sw.ToString();

    // Then use PDFTron's HTML2PDF
    PDFNet.Initialize("your-license-key");

    using (PDFDoc doc = new PDFDoc())
    {
        HTML2PDF converter = new HTML2PDF();
        converter.InsertFromHtmlString(htmlContent);
        converter.Convert(doc);

        // Send to browser
        byte[] pdfBytes = doc.Save(SDFDoc.SaveOptions.e_linearized);
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(pdfBytes);
        Response.End();
    }
}
// Capture ASPX output as HTML, then convert
public void ConvertAspxWithPdfTron()
{
    // Render ASPX to string first
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    // Render the page to HTML
    this.RenderControl(hw);
    string htmlContent = sw.ToString();

    // Then use PDFTron's HTML2PDF
    PDFNet.Initialize("your-license-key");

    using (PDFDoc doc = new PDFDoc())
    {
        HTML2PDF converter = new HTML2PDF();
        converter.InsertFromHtmlString(htmlContent);
        converter.Convert(doc);

        // Send to browser
        byte[] pdfBytes = doc.Save(SDFDoc.SaveOptions.e_linearized);
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(pdfBytes);
        Response.End();
    }
}
' Capture ASPX output as HTML, then convert
Public Sub ConvertAspxWithPdfTron()
	' Render ASPX to string first
	Dim sw As New StringWriter()
	Dim hw As New HtmlTextWriter(sw)

	' Render the page to HTML
	Me.RenderControl(hw)
	Dim htmlContent As String = sw.ToString()

	' Then use PDFTron's HTML2PDF
	PDFNet.Initialize("your-license-key")

	Using doc As New PDFDoc()
		Dim converter As New HTML2PDF()
		converter.InsertFromHtmlString(htmlContent)
		converter.Convert(doc)

		' Send to browser
		Dim pdfBytes() As Byte = doc.Save(SDFDoc.SaveOptions.e_linearized)
		Response.ContentType = "application/pdf"
		Response.BinaryWrite(pdfBytes)
		Response.End()
	End Using
End Sub
$vbLabelText   $csharpLabel

Görüntüleri PDF'ye Nasıl Dönüştürebilirim?

Resmi PDF'ye dönüştürme, belge arşivleme ve portföy oluşturma için önemlidir. Her iki kütüphane de bu işlevi farklı yaklaşımlarla sunuyor.

IronPDF ile Resmi PDF'ye Dönüştürme

IronPDF, verimli toplu işleme için özel bir ImageToPdfConverter sınıfı sağlar:

using IronPdf;
using System.IO;
using System.Linq;

public class ImagePdfGenerator
{
    public static void CreatePhotoAlbum(string imageFolder, string outputPath)
    {
        // Get all supported image files
        var supportedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" };
        var imageFiles = Directory.GetFiles(imageFolder)
            .Where(f => supportedExtensions.Contains(Path.GetExtension(f).ToLower()))
            .OrderBy(f => f);

        // Convert images to PDF with options
        var pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage);

        // Add metadata
        pdf.MetaData.Title = "Photo Album";
        pdf.MetaData.Author = "Photography Department";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Apply compression for smaller file size
        pdf.CompressImages(80); // 80% quality

        // Save the PDF
        pdf.SaveAs(outputPath);
    }

    public static void CreateThumbnailCatalog(List<ProductImage> images)
    {
        var renderer = new ChromePdfRenderer();

        // Build HTML with image grid
        var html = @"
        <html>
        <head>
            <style>
                .image-grid {
                    display: grid;
                    grid-template-columns: repeat(3, 1fr);
                    gap: 20px;
                    padding: 20px;
                }
                .image-item {
                    text-align: center;
                }
                .image-item img {
                    max-width: 100%;
                    height: 200px;
                    object-fit: cover;
                    border: 1px solid #ddd;
                }
                .image-caption {
                    margin-top: 10px;
                    font-size: 12px;
                }
            </style>
        </head>
        <body>
            <h1>Product Catalog</h1>
            <div class='image-grid'>";

        foreach (var image in images)
        {
            html += $@"
                <div class='image-item'>
                    <img src='data:image/jpeg;base64,{image.Base64Data}' />
                    <div class='image-caption'>{image.ProductName}</div>
                </div>";
        }

        html += "</div></body></html>";

        // Render with optimal settings for images
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("product-catalog.pdf");
    }
}
using IronPdf;
using System.IO;
using System.Linq;

public class ImagePdfGenerator
{
    public static void CreatePhotoAlbum(string imageFolder, string outputPath)
    {
        // Get all supported image files
        var supportedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" };
        var imageFiles = Directory.GetFiles(imageFolder)
            .Where(f => supportedExtensions.Contains(Path.GetExtension(f).ToLower()))
            .OrderBy(f => f);

        // Convert images to PDF with options
        var pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage);

        // Add metadata
        pdf.MetaData.Title = "Photo Album";
        pdf.MetaData.Author = "Photography Department";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Apply compression for smaller file size
        pdf.CompressImages(80); // 80% quality

        // Save the PDF
        pdf.SaveAs(outputPath);
    }

    public static void CreateThumbnailCatalog(List<ProductImage> images)
    {
        var renderer = new ChromePdfRenderer();

        // Build HTML with image grid
        var html = @"
        <html>
        <head>
            <style>
                .image-grid {
                    display: grid;
                    grid-template-columns: repeat(3, 1fr);
                    gap: 20px;
                    padding: 20px;
                }
                .image-item {
                    text-align: center;
                }
                .image-item img {
                    max-width: 100%;
                    height: 200px;
                    object-fit: cover;
                    border: 1px solid #ddd;
                }
                .image-caption {
                    margin-top: 10px;
                    font-size: 12px;
                }
            </style>
        </head>
        <body>
            <h1>Product Catalog</h1>
            <div class='image-grid'>";

        foreach (var image in images)
        {
            html += $@"
                <div class='image-item'>
                    <img src='data:image/jpeg;base64,{image.Base64Data}' />
                    <div class='image-caption'>{image.ProductName}</div>
                </div>";
        }

        html += "</div></body></html>";

        // Render with optimal settings for images
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("product-catalog.pdf");
    }
}
Imports IronPdf
Imports System.IO
Imports System.Linq

Public Class ImagePdfGenerator
	Public Shared Sub CreatePhotoAlbum(ByVal imageFolder As String, ByVal outputPath As String)
		' Get all supported image files
		Dim supportedExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" }
		Dim imageFiles = Directory.GetFiles(imageFolder).Where(Function(f) supportedExtensions.Contains(Path.GetExtension(f).ToLower())).OrderBy(Function(f) f)

		' Convert images to PDF with options
		Dim pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage)

		' Add metadata
		pdf.MetaData.Title = "Photo Album"
		pdf.MetaData.Author = "Photography Department"
		pdf.MetaData.CreationDate = DateTime.Now

		' Apply compression for smaller file size
		pdf.CompressImages(80) ' 80% quality

		' Save the PDF
		pdf.SaveAs(outputPath)
	End Sub

	Public Shared Sub CreateThumbnailCatalog(ByVal images As List(Of ProductImage))
		Dim renderer = New ChromePdfRenderer()

		' Build HTML with image grid
		Dim html = "
        <html>
        <head>
            <style>
                .image-grid {
                    display: grid;
                    grid-template-columns: repeat(3, 1fr);
                    gap: 20px;
                    padding: 20px;
                }
                .image-item {
                    text-align: center;
                }
                .image-item img {
                    max-width: 100%;
                    height: 200px;
                    object-fit: cover;
                    border: 1px solid #ddd;
                }
                .image-caption {
                    margin-top: 10px;
                    font-size: 12px;
                }
            </style>
        </head>
        <body>
            <h1>Product Catalog</h1>
            <div class='image-grid'>"

		For Each image In images
			html &= $"
                <div class='image-item'>
                    <img src='data:image/jpeg;base64,{image.Base64Data}' />
                    <div class='image-caption'>{image.ProductName}</div>
                </div>"
		Next image

		html &= "</div></body></html>"

		' Render with optimal settings for images
		renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
		Dim pdf = renderer.RenderHtmlAsPdf(html)
		pdf.SaveAs("product-catalog.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Gelişmiş resim işleme özellikleri:

  • Vektör kalitesi koruyarak SVG'den PDF'ye dönüşüm
  • Bellek optimizasyonu ile toplu işleme
  • Özel boyutlandırma ve konumlandırma seçenekleri
  • EXIF veri koruma

PDFTron (Apryse) ile Resmi PDF'ye Dönüştürme

PDFTron, resim işleme için dönüşüm API'sini kullanır:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronImageConverter
{
    public static void ConvertImageToPdf(string imagePath, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Use Convert API for image to PDF
            pdftron.PDF.Convert.ToPdf(doc, imagePath);

            // Additional image processing
            PageIterator itr = doc.GetPageIterator();
            while (itr.HasNext())
            {
                Page page = itr.Current();

                // Adjust page size to image
                Rect crop_box = page.GetCropBox();
                page.SetMediaBox(crop_box);

                itr.Next();
            }

            // Save optimized PDF
            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }

    public static void CreateMultiPageImagePdf(string[] imagePaths, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            ElementBuilder builder = new ElementBuilder();
            ElementWriter writer = new ElementWriter();

            foreach (string imagePath in imagePaths)
            {
                // Create a new page for each image
                Page page = doc.PageCreate();
                writer.Begin(page);

                // Add image to page
                Image img = Image.Create(doc, imagePath);
                Element element = builder.CreateImage(img, 0, 0, 612, 792);
                writer.WritePlacedElement(element);

                writer.End();
                doc.PagePushBack(page);
            }

            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronImageConverter
{
    public static void ConvertImageToPdf(string imagePath, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Use Convert API for image to PDF
            pdftron.PDF.Convert.ToPdf(doc, imagePath);

            // Additional image processing
            PageIterator itr = doc.GetPageIterator();
            while (itr.HasNext())
            {
                Page page = itr.Current();

                // Adjust page size to image
                Rect crop_box = page.GetCropBox();
                page.SetMediaBox(crop_box);

                itr.Next();
            }

            // Save optimized PDF
            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }

    public static void CreateMultiPageImagePdf(string[] imagePaths, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            ElementBuilder builder = new ElementBuilder();
            ElementWriter writer = new ElementWriter();

            foreach (string imagePath in imagePaths)
            {
                // Create a new page for each image
                Page page = doc.PageCreate();
                writer.Begin(page);

                // Add image to page
                Image img = Image.Create(doc, imagePath);
                Element element = builder.CreateImage(img, 0, 0, 612, 792);
                writer.WritePlacedElement(element);

                writer.End();
                doc.PagePushBack(page);
            }

            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF

Public Class PdfTronImageConverter
	Public Shared Sub ConvertImageToPdf(ByVal imagePath As String, ByVal outputPath As String)
		PDFNet.Initialize("your-license-key")

		Using doc As New PDFDoc()
			' Use Convert API for image to PDF
			pdftron.PDF.Convert.ToPdf(doc, imagePath)

			' Additional image processing
			Dim itr As PageIterator = doc.GetPageIterator()
			Do While itr.HasNext()
				Dim page As Page = itr.Current()

				' Adjust page size to image
				Dim crop_box As Rect = page.GetCropBox()
				page.SetMediaBox(crop_box)

				itr.Next()
			Loop

			' Save optimized PDF
			doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
		End Using
	End Sub

	Public Shared Sub CreateMultiPageImagePdf(ByVal imagePaths() As String, ByVal outputPath As String)
		PDFNet.Initialize("your-license-key")

		Using doc As New PDFDoc()
			Dim builder As New ElementBuilder()
			Dim writer As New ElementWriter()

			For Each imagePath As String In imagePaths
				' Create a new page for each image
				Dim page As Page = doc.PageCreate()
				writer.Begin(page)

				' Add image to page
				Dim img As Image = Image.Create(doc, imagePath)
				Dim element As Element = builder.CreateImage(img, 0, 0, 612, 792)
				writer.WritePlacedElement(element)

				writer.End()
				doc.PagePushBack(page)
			Next imagePath

			doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Lisanslama Seçenekleri ve Maliyetleri Nelerdir?

Lisanslamayı anlamak, bütçeleme ve uyumluluk için kritik öneme sahiptir. İki kütüphane çok farklı fiyatlandırma modellerine sahiptir.

IronPDF Lisanslama

IronPDF, $999'den $2,999'e kadar 3 fiyatlandırma sürümü sunar. Ayrıca IronPDF'nin ücretsiz bir deneme sürümü de bulunmaktadır. IronPDF, Nisan 2026 itibarıyla şeffaf, yayınlanmış fiyatlandırma sunar:

Lisans Seviyeleri:

  • Lite License: $999
    • 1 geliştirici
    • 1 lokasyon
    • 1 proje
  • Bireysel geliştiriciler veya küçük projeler için ideal

  • Plus License: $1,499
    • 3 geliştirici
    • 3 lokasyon
    • 3 proje
  • Küçük ekipler için mükemmel

  • Professional License: $2,999
    • 10 geliştirici
    • 10 lokasyon
    • 10 proje
  • Daha büyük ekipler için uygun

  • Unlimited License: $5,999
    • Sınırsız geliştirici
  • Sınırsız konum Sınırsız projeler

Ek Seçenekler:

  • Telif Ücretsiz Yeniden Dağıtım: +$2,999 (tek seferlik) SaaS/OEM lisanslama mevcut
  • Iron Suite paketi: 2 ürün fiyatına 10 ürün edinin

Tüm Ekip Lisansları devredilemezdir ve bir organizasyon veya ajans/müşteri ilişkisi dışındaki lisans paylaşımı yasaktır.

PDFTron (Apryse) Lisanslama

Apryse'ın (eski adıyla PDFTron) lisanslaması, yayımlanmamış fiyatlarla teklif bazındadır. apryse.com/pricing adresinden Apryse satış birimi ile doğrudan bağlantıya geçin.

Ana lisanslama özellikleri:

  • Tüm fiyatlandırma, doğrudan satış katılımı gerektirir — self servis satın alma yok
  • Ek modüller (örn. HTML2PDF, Office dönüşümü) ayrı lisanslama gerektirebilir
  • Kurumsal dağıtımlar için genellikle karmaşık lisans pazarlıkları gereklidir
  • Modül başına fiyatlandırma, toplam sahip olma maliyetini arttırabilir

Ana Farklılıklar:

  • IronPDF: Süresiz lisanslar, tek seferlik ödeme
  • PDFTron: Genellikle abonelik tabanlı veya yıllık ücretler
  • IronPDF: Tüm özellikler temel lisansa dahil
  • PDFTron: Ücretli eklentilerle temel özellikler

Destek Seçenekleri Nasıl Karşılaştırılır?

Geliştirici desteği proje sürelerini yapabilir veya bozabilir. Her satıcının müşteri yardımına nasıl yaklaştığını inceleyelim.

IronPDF Desteği

IronPDF tüm lisanslarla birlikte profesyonel destek içerir:

  • E-posta yoluyla 24/5 mühendislik desteği
  • Geliştirme ekibine doğrudan erişim
  • Tipik yanıt süresi: 24-48 saat
  • Kapsamlı belgeler
  • Video eğitimleri ve kod örnekleri

IronPDF kütüphanesi Azure WebApps, Functions ve WebJobs'ta çalışır. Linux ve Windows varyantlarında çalışır, ancak önemli ölçüde daha iyi test edilmiş ve kurulumu kolay olduğundan Windows varyantı Functions ve WebApps'i öneririm.

PDFTron (Apryse) Desteği

PDFTron'un desteği lisans kademesine göre değişir:

  • PDFTron'un maliyeti yüksektir. İşimizin önemi maliyeti haklı çıkarıyor, ancak bu ürünü diğer PDF web çözümleriyle karşılaştırırken kesinlikle bir engeldi.
  • Temel lisanslar için forum tabanlı destek
  • Ücretli destek planları mevcut
  • Bazı zamanlarda destek yetersiz kalabilir ve geliştiriciler kendi başlarına mücadele etmek zorunda kalabilirler.
  • Yanıt süreleri destek kademesine göre değişir

Performans Özellikleri Nelerdir?

Performans, kullanıcı deneyimini ve sunucu maliyetlerini etkiler. Gerçek dünya performans verilerini inceleyelim.

IronPDF Performansı

Son geliştirmeler, IronPDF'nin performansını önemli ölçüde artırmıştır:

// Optimized batch processing example
public async Task BatchConvertWithPerformanceMonitoring()
{
    var renderer = new ChromePdfRenderer();

    // Configure for performance
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
    renderer.RenderingOptions.RenderDelay = 0; // No delay for static content
    renderer.RenderingOptions.Timeout = 30; // 30 second timeout

    // Enable parallel processing
    var tasks = new List<Task<PdfDocument>>();
    var urls = GetUrlsToConvert();

    // Process in parallel with throttling
    using (var semaphore = new SemaphoreSlim(4)) // Max 4 concurrent
    {
        foreach (var url in urls)
        {
            await semaphore.WaitAsync();

            tasks.Add(Task.Run(async () =>
            {
                try
                {
                    return await renderer.RenderUrlAsPdfAsync(url);
                }
                finally
                {
                    semaphore.Release();
                }
            }));
        }

        var results = await Task.WhenAll(tasks);

        // Merge results if needed
        var merged = PdfDocument.Merge(results);
        merged.SaveAs("batch-output.pdf");
    }
}
// Optimized batch processing example
public async Task BatchConvertWithPerformanceMonitoring()
{
    var renderer = new ChromePdfRenderer();

    // Configure for performance
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
    renderer.RenderingOptions.RenderDelay = 0; // No delay for static content
    renderer.RenderingOptions.Timeout = 30; // 30 second timeout

    // Enable parallel processing
    var tasks = new List<Task<PdfDocument>>();
    var urls = GetUrlsToConvert();

    // Process in parallel with throttling
    using (var semaphore = new SemaphoreSlim(4)) // Max 4 concurrent
    {
        foreach (var url in urls)
        {
            await semaphore.WaitAsync();

            tasks.Add(Task.Run(async () =>
            {
                try
                {
                    return await renderer.RenderUrlAsPdfAsync(url);
                }
                finally
                {
                    semaphore.Release();
                }
            }));
        }

        var results = await Task.WhenAll(tasks);

        // Merge results if needed
        var merged = PdfDocument.Merge(results);
        merged.SaveAs("batch-output.pdf");
    }
}
' Optimized batch processing example
Public Async Function BatchConvertWithPerformanceMonitoring() As Task
	Dim renderer = New ChromePdfRenderer()

	' Configure for performance
	renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
	renderer.RenderingOptions.RenderDelay = 0 ' No delay for static content
	renderer.RenderingOptions.Timeout = 30 ' 30 second timeout

	' Enable parallel processing
	Dim tasks = New List(Of Task(Of PdfDocument))()
	Dim urls = GetUrlsToConvert()

	' Process in parallel with throttling
	Using semaphore = New SemaphoreSlim(4) ' Max 4 concurrent
		For Each url In urls
			Await semaphore.WaitAsync()

			tasks.Add(Task.Run(Async Function()
				Try
					Return Await renderer.RenderUrlAsPdfAsync(url)
				Finally
					semaphore.Release()
				End Try
			End Function))
		Next url

		Dim results = Await Task.WhenAll(tasks)

		' Merge results if needed
		Dim merged = PdfDocument.Merge(results)
		merged.SaveAs("batch-output.pdf")
	End Using
End Function
$vbLabelText   $csharpLabel

Performans özellikleri:

  • Basit HTML, birçok harici kaynak ile karmaşık sayfalardan daha hızlı işler
  • Tam Chrome işleme nedeniyle CSS/JS ile karmaşık HTML daha uzun sürer
  • IronPDF, burada belgelenmiş olduğuna göre fonksiyonların Asenkron varyantlarını da içerir ironpdf.com/examples/async. Benim kullanım durumum için, HTML'yi PDF'ye toplu olarak renderlemek için Parallel.ForEach kullanmak en yüksek performanslı stratejiydi

PDFTron (Apryse) Performansı

Apryse'nin özel motoru basit belge dönüşümleri için genellikle daha düşük ek yük sağlar:

  • Sınırlı CSS ile temel HTML için daha hızlı (tam tarayıcı rendere gerek yok)
  • Office belge dönüşümleri için verimli
  • Chrome tabanlı render işlemine göre daha düşük bellek tüketimi
  • Yüksek hacimli basit belge iş akışları için iyi uyarlanmış

Ancak, kullanıcılar karmaşık senaryolarda sorun bildiriyor:

  • Zaman zaman hatalar ortaya çıkabiliyor. Bazen QA testlerinde görülmesi gereken oldukça zararlı hatalar. Onların düzeltilmesi biraz zaman alabiliyor.

Modern CSS Framework ve Bootstrap Desteği

Kurumsal uygulamalar giderek daha fazla modern CSS frameworkleri olan Bootstrap, Tailwind ve Foundation'ı benimsediğinden, bu çerçeveleri doğru şekilde PDF'ye dönüştürme yeteneği, PDF kütüphaneleri için kritik bir seçim kriteri haline gelir.

IronPDF: Tam Kapsamlı Chromium-Tabanlı Framework Desteği

IronPDF'nin Chrome V8 motoru, tüm modern CSS çerçeveleri ve web standartları için kapsamlı destek sağlar:

  • Bootstrap 5: Tüm esnek kutu ve CSS Grid destekli, tüm duyarlı araçlarla birlikte
  • Bootstrap 4: Kart bileşenleri, navigasyon sistemleri ve form düzenleriyle tam uyumluluk
  • Tailwind CSS: Tüm tuş sınıfları, duyarlı modifikasyonlar ve JIT derleme kalıpları
  • Foundation: Tam ızgara sistemi ve bileşen kütüphanesi desteği
  • Modern CSS3: Flexbox, CSS Grid, CSS değişkenleri, animasyonlar, dönüşümler ve geçişler
  • JavaScript Frameworkleri: Tam etkileşim desteğiyle React, Vue, Angular bileşen renderi

Üretim doğrulaması: Bootstrap ana sayfası ve resmi şablonlar %98+ tarayıcı uyumuyla dönüştürülür.

Kod Örneği: Veri Tabloları ile Kurumsal Gösterge Paneli

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapDashboard = @"
<!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-fluid py-4'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <h1>Sales Dashboard - Q1 2025</h1>
            <span class='badge bg-success fs-5'>+15.3% YoY</span>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Total Revenue</h6>
                        <h2 class='text-primary'>$1.2M</h2>
                        <small class='text-success'>↑ 12%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>New Customers</h6>
                        <h2 class='text-info'>1,847</h2>
                        <small class='text-success'>↑ 8%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Avg Order Value</h6>
                        <h2 class='text-warning'>$649</h2>
                        <small class='text-danger'>↓ 3%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Conversion Rate</h6>
                        <h2 class='text-success'>3.2%</h2>
                        <small class='text-success'>↑ 0.4%</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Top Products by Revenue</h5>
            </div>
            <div class='card-body p-0'>
                <table class='table table-striped table-hover mb-0'>
                    <thead class='table-light'>
                        <tr>
                            <th>Product</th>
                            <th>Category</th>
                            <th>Units Sold</th>
                            <th class='text-end'>Revenue</th>
                            <th class='text-end'>Growth</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><strong>Professional License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>1,234</td>
                            <td class='text-end'>$369,000</td>
                            <td class='text-end'><span class='badge bg-success'>+18%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Plus License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>2,891</td>
                            <td class='text-end'>$289,000</td>
                            <td class='text-end'><span class='badge bg-success'>+15%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Support Package</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>892</td>
                            <td class='text-end'>$178,000</td>
                            <td class='text-end'><span class='badge bg-success'>+22%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Training Program</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>456</td>
                            <td class='text-end'>$91,000</td>
                            <td class='text-end'><span class='badge bg-warning'>+5%</span></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard);
pdf.SaveAs("sales-dashboard.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapDashboard = @"
<!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-fluid py-4'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <h1>Sales Dashboard - Q1 2025</h1>
            <span class='badge bg-success fs-5'>+15.3% YoY</span>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Total Revenue</h6>
                        <h2 class='text-primary'>$1.2M</h2>
                        <small class='text-success'>↑ 12%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>New Customers</h6>
                        <h2 class='text-info'>1,847</h2>
                        <small class='text-success'>↑ 8%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Avg Order Value</h6>
                        <h2 class='text-warning'>$649</h2>
                        <small class='text-danger'>↓ 3%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Conversion Rate</h6>
                        <h2 class='text-success'>3.2%</h2>
                        <small class='text-success'>↑ 0.4%</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Top Products by Revenue</h5>
            </div>
            <div class='card-body p-0'>
                <table class='table table-striped table-hover mb-0'>
                    <thead class='table-light'>
                        <tr>
                            <th>Product</th>
                            <th>Category</th>
                            <th>Units Sold</th>
                            <th class='text-end'>Revenue</th>
                            <th class='text-end'>Growth</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><strong>Professional License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>1,234</td>
                            <td class='text-end'>$369,000</td>
                            <td class='text-end'><span class='badge bg-success'>+18%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Plus License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>2,891</td>
                            <td class='text-end'>$289,000</td>
                            <td class='text-end'><span class='badge bg-success'>+15%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Support Package</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>892</td>
                            <td class='text-end'>$178,000</td>
                            <td class='text-end'><span class='badge bg-success'>+22%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Training Program</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>456</td>
                            <td class='text-end'>$91,000</td>
                            <td class='text-end'><span class='badge bg-warning'>+5%</span></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard);
pdf.SaveAs("sales-dashboard.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim bootstrapDashboard 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-fluid py-4'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <h1>Sales Dashboard - Q1 2025</h1>
            <span class='badge bg-success fs-5'>+15.3% YoY</span>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Total Revenue</h6>
                        <h2 class='text-primary'>$1.2M</h2>
                        <small class='text-success'>↑ 12%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>New Customers</h6>
                        <h2 class='text-info'>1,847</h2>
                        <small class='text-success'>↑ 8%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Avg Order Value</h6>
                        <h2 class='text-warning'>$649</h2>
                        <small class='text-danger'>↓ 3%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Conversion Rate</h6>
                        <h2 class='text-success'>3.2%</h2>
                        <small class='text-success'>↑ 0.4%</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Top Products by Revenue</h5>
            </div>
            <div class='card-body p-0'>
                <table class='table table-striped table-hover mb-0'>
                    <thead class='table-light'>
                        <tr>
                            <th>Product</th>
                            <th>Category</th>
                            <th>Units Sold</th>
                            <th class='text-end'>Revenue</th>
                            <th class='text-end'>Growth</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><strong>Professional License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>1,234</td>
                            <td class='text-end'>$369,000</td>
                            <td class='text-end'><span class='badge bg-success'>+18%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Plus License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>2,891</td>
                            <td class='text-end'>$289,000</td>
                            <td class='text-end'><span class='badge bg-success'>+15%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Support Package</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>892</td>
                            <td class='text-end'>$178,000</td>
                            <td class='text-end'><span class='badge bg-success'>+22%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Training Program</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>456</td>
                            <td class='text-end'>$91,000</td>
                            <td class='text-end'><span class='badge bg-warning'>+5%</span></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>"

Dim pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard)
pdf.SaveAs("sales-dashboard.pdf")
$vbLabelText   $csharpLabel

Çıkış: Bootstrap'in flexbox metrik kartları, duyarlı ızgara düzeni ve stillendirilmiş veri tabloları ile mükemmel uyumlulukta bir PDF'de render edilmiş profesyonel bir kurumsal gösterge paneli.

PDFTron (Apryse): Framework Sınırlamaları Olan HTML2PDF Modülü

PDFTron'un HTML'den PDF'ye dönüştürme işlemi, modern CSS çerçeveleri için belirli sınırlamalarla özel bir render motoru kullanan HTML2PDF modülü aracılığıyla sağlanır:

  • Özel Motor: Chromium bazlı değil, yani CSS3 desteği seçmeli ve kapsamlı değil
  • Flexbox Desteği: Kısmi uygulama, Bootstrap 4/5 flexbox düzenleri doğru şekilde render edilmeyebilir
  • CSS Grid: CSS Grid Düzen spesifikasyonlarına sınırlı destek
  • JavaScript Sınırlamaları: Tam tarayıcı motorlarına kıyasla sınırlı JavaScript yürütme
  • Bootstrap 3: Tablo tabanlı düzenlerden dolayı genellikle Bootstrap 4/5'ten daha iyi çalışır
  • Framework Testi Gereklidir: Karmaşık Bootstrap bileşenleri geniş kapsamlı test ve potansiyel geçici çözümler gerektirir

Geliştirici raporlarına göre, Bootstrap ile çalışan PDFTron kullanıcıları şu sorunlarla karşılaşır:

  • Hizalama sorunlarıyla render edilen Flexbox tabanlı navigasyon çubukları
  • CSS ayarlamaları gerektiren kart desteleri ve ızgara sistemleri
  • PDF çıktısında ciddiye alınmayan duyarlı araçlar
  • Bootstrap bileşenlerini basitleştirme veya geri dönüş CSS kullanma ihtiyacı

Kurumsal değerlendirme: Modern Bootstrap sürümleri (4+) üzerine inşa edilmiş uygulamalar için, PDFTron'un düzen dönüşümlerini ele almak için önemli bir ek geliştirme çabası gerektirebilir, bu da diğer performans avantajlarını dengeleyebilir. Özel motor yaklaşımı, gerçek bir tarayıcı ile aynı render uyumunu almadığınız anlamına gelir.

Kapsamlı Bootstrap framework desteği ve test rehberliği için Bootstrap & Flexbox CSS Guide adresine bakın.

Hangi Kütüphaneyi Ne Zaman Seçmeliyim?

Doğru seçim yapmak, özel gereksinimlerinize ve kısıtlamalarınıza bağlıdır.

IronPDF'i Tercih Edin Ne Zaman:

HTML/CSS Uyumluluğu Kritik

  • Karmaşık düzenlere sahip modern web uygulamaları
  • JavaScript ağırlıklı içerik
  • Korunması gereken duyarlı tasarımlar

Hızlı Geliştirme Öncelikli

Bütçe Şeffaflığı Önemli

  • Yayınlanan fiyatlar doğru bütçelemeye olanak tanır
  • Beklenmedik maliyetler veya gizli ücretler yok
  • Temel lisansa tüm özellikler dahildir

Belirli Özelliklere İhtiyacınız Var

PDFTron (Apryse) Şu Durumlarda Tercih Edin:

Kurumsal Belge İş Akışları

  • XFA desteği ile karmaşık form işleme
  • CAD dosya dönüşümleri (DWG, DXF)
  • Gelişmiş Ofis belge yönetimi

Özelliklerden Önce Performans

  • Yüksek hacimli basit belge işleme
  • Daha düşük bellek gereksinimleri
  • Temel HTML dönüştürme ihtiyaçları

Özelleştirilmiş Gereksinimler

  • Yerleşik belge görüntüleyici bileşenleri
  • Geniş kapsamlı açıklama türleri (30+)
  • Eski sistem entegrasyonu

Büyük Kurumsal Ortam

  • Özel destek sözleşmeleri
  • Özel özellik geliştirme
  • Uyum sertifikaları

Özet ve Sonuç

Hem IronPDF hem de PDFTron (Apryse) yetenekli PDF kütüphaneleridir, ancak farklı pazar segmentleri ve kullanım senaryolarına hizmet ederler.

IronPDF şu konularda üstündür:

  • Modern web teknolojisi desteği (HTML5, CSS3, JavaScript)
  • Geliştirici dostu API tasarımı
  • Şeffaf, uygun fiyatlı fiyatlandırma
  • Hızlı uygulama geliştirme
  • Bulut ve konteyner tabanlı dağıtımlar

PDFTron (Apryse) güçlü yönleri şunlardır:

  • Kurumsal belge iş akışları
  • CAD ve özel format desteği
  • Daha düşük kaynak tüketimi
  • Geniş kapsamlı ek açıklama yetenekleri
  • Miras sistemlerle uyumluluk

.NET geliştiricilerinin modern uygulamalar ürettiği çoğu durumda, IronPDF özelliklerin güçlü bir kombinasyonunu, kullanım kolaylığını ve şeffaf fiyatlandırmayı sunar. Chrome tabanlı render motoru, yüksek fideliteli HTML'den PDF'ye dönüşümünü güvence altına alır, basit API ise geliştirmeyi hızlandırır.

PDFTron, CAD dönüşümü, karmaşık form işleme veya eski belge formatları ile çalışırken belirli gereksinimleri olan kuruluşlar için hala uygun kalır. Ancak, fiyat şeffaflığının ve modüler lisanslama yapısının olmaması toplam maliyetleri önemli ölçüde artırabilir.

Başlarken

IronPDF'yi Deneyin:

PDFTron'u Keşfedin:

Belirli kullanım senaryolarınızla her iki seçeneği de ayrıntılı olarak değerlendirdiğinizden emin olun ve karar vermeden önce her ikisini de thorough bir şekilde değerlendirin. Teknik yeteneklerin yanı sıra uzun vadeli maliyetler, destek kalitesi ve özellik yol haritaları gibi faktörleri de göz önünde bulundurun.

Şimdi IronPDF ile başlayın.
green arrow pointer

Lütfen dikkate alınPDFTron, ilgili sahibinin tescilli ticari markasıdır. Bu site PDFTron ile ilişkilendirilmemiştir, tarafından onaylanmamış veya sponsoru değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

Sıkça Sorulan Sorular

HTML'yi C# içerisinde PDF'ye nasıl dönüştürebilirim?

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

HTML'den PDF'ye dönüştürmede IronPDF ve PDFTron arasında performans farklılıkları nelerdir?

IronPDF, kompleks web içerikleri için Chrome tabanlı motoruyla üstün bir render sunarak, JavaScript ve CSS3 için daha iyi destek sağlar. PDFTron, basit HTML için daha hızlı olmasına rağmen, kompleks içerikleri aynı verimle ele almayabilir.

IronPDF ve PDFTron için lisanslama seçenekleri nelerdir?

IronPDF, tüm özelliklerin dahil olduğu, şeffaf ve süresiz lisansları 749 dolardan başlayan fiyatlarla sunar. Ancak, PDFTron lisanslama için özel teklifler gerektirir ve bu 5.000 dolar ile 100.000 dolar+ arasında yıllık değişebilir.

Bu kütüphaneleri kullanarak ASPX sayfalarını PDF'ye dönüştürmek mümkün mü?

Evet, IronPDF, AspxToPdf.RenderThisPageAsPdf yöntemini tek satırlık bir kodla kullanarak ASPX sayfalarını PDF'ye dönüştürebilir. PDFTron, ASPX sayfa dönüştürmeyi doğrudan desteklemez.

Hangi kütüphane Azure gibi bulut ortamları için daha uygun?

IronPDF, Azure ve AWS dahil bulut ortamları için optimize edilmiştir ve Functions ve WebApps ile sorunsuz çalışır. PDFTron, optimal bulut dağıtımı için ek yapılandırma gerektirebilir.

IronPDF veya PDFTron ile doldurulabilir PDF formları oluşturabilir misiniz?

Evet, her iki kütüphane de doldurulabilir PDF formları oluşturmaya destek verir. IronPDF, HTML formlarının otomatik dönüştürülmesi için CreatePdfFormsFromHtml kullanır. PDFTron, geniş alan türleri sunar ancak daha karmaşık entegrasyon gerektirir.

IronPDF ve PDFTron kullanıcıları için hangi destek seçenekleri mevcut?

IronPDF, doğrudan geliştirici erişimi ve tipik olarak 24-48 saatlik yanıt süresi ile 24/5 mühendislik desteği sunar. PDFTron'un destek seçenekleri, lisans seviyesine bağlı olarak değişir ve temel forum desteği ile ücretli doğrudan yardım sunar.

IronPDF ve PDFTron, parola korumalı web sitelerini ele almada nasıl karşılaştırılır?

IronPDF, giriş formları ve HTTP kimlik doğrulamasını ele almak için ChromeHttpLoginCredentials yoluyla kimlik doğrulama desteği sunar; PDFTron ise bu özellik için sınırlı destek sunar.

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

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

Daha Fazla Oku

Iron Destek Ekibi

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