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

IronPDF vs PDFTron (Apryse): 2025 İçin Tam C# PDF Kütüphanesi Karşılaştırması

.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 vermenize yardımcı olur. İster web uygulamaları, masaüstü yazılımı ya da bulut hizmetleri geliştiriyor olun, doğru PDF araç setini seçmek geliştirme hızınıza ve projenizin başarısına önemli oranda etki edebilir.

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

Kategori Özellik/Konu IronPDF PDFTron (Apryse) Ana Avantaj
Çekirdek Mimari Tasarım Felsefesi Öncelikli sadelik, Chrome V8 motoru Kurumsal odaklı, özel motor IronPDF: Daha hızlı geliştirme
API Karmaşıklığı RenderHtmlAsPdf() gibi basit yöntemler IronPDF: %70 daha az kod
Öğrenme Eğrisi 1-2 gün tipik 1-2 hafta tipik IronPDF: Daha hızlı benimseme
Platform Desteği Çapraz Platform Yerel destek, tek paket Çoklu paket/modül gereklidir 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 kurulum ile benzer destek Her ikisi de: Modern çerçeve desteği
HTML'den PDF'ye Render Motoru Tam Chrome V8 motoru Özel motor (HTML2PDF modülü aracılığıyla) IronPDF: %98+ tarayıcı sadakati
JavaScript Destegi Tam destekli ama render gecikmeleriyle Sınırlı destek IronPDF: Dinamik içerik hazır
MS Office Desteği DOCX'den PDF'e DocxToPdfRenderer yerleşik PDFTron: Daha iyi Office uyumu
CAD Desteği Mevcut değil DWG, DXF, DGN'den PDF'ye PDFTron: CAD iş akışları
Performans HTML Render Hızı 0.8-1.2s tipik (Chrome motoru) 0.3-0.5s tipik (basit HTML) PDFTron: Temel HTML için daha hızlı
Bellek Kullanımı 150-200MB (Chrome süreci) 80-120MB tipik PDFTron: Daha düşük bellek tüketimi
Licensing & Pricing Giriş Seviyesi Lite: $799 (1 dev, 1 project) Özel teklif (tah. $5,000-$10,000+) IronPDF: Şeffaf fiyatlandırma
Enterprise Professional: $2,399 (10 devs) Özel teklif (tah. $30,000+) IronPDF: Yüzde 90'a kadar maliyet tasarrufu
Destek Destek Dahil Evet, 24/5 mühendislik desteği Lisans katmanına göre değişiklik gösterir IronPDF: Destek dahil
En İyisi İçin Kullanım Durumları Modern web uygulamaları, HTML raporları, hızlı geliştirme Belge ağırlıklı iş akışları, CAD/Office dönüştürme Bağlam bağımlı

IronPDF ve PDFTron (Apryse) Nedir?

IronPDF Genel Bakış

IronPDF, geliştiriciler için PDF oluşturmayı, düzenlemeyi ve manipülasyonu basitleştiren kapsamlı bir .NET PDF kütüphanesidir. Chrome render motoru üzerine inşa edilmiştir, HTML, CSS ve JavaScript'i piksel mükemmelliğinde PDF belgelerine dönüştürmede ustadır. Kütüphanenin anlaşılır API tasarımı, geliştiricilerin minimal kodla PDF fonksiyonelliğini entegre etmesini sağlar, bu da onu web uygulamaları, raporlama sistemleri ve belge otomasyonu için ideal kılar.

PDFTron (Apryse) Genel Bakış

PDFTron, 2023 Şubat ayında Apryse olarak yeniden markalandı, kapsamlı belge işleme yetenekleri sunan bir kurumsal odaklı PDF SDK'dır. Başlangıçta karmaşık belge iş akışları için geliştirilmiş olup, Microsoft Office, CAD çizimleri ve özel belge türleri dahil çeşitli dosya formatları için sağlam destek sunar. PDFTron Systems Inc., belge işleme teknolojisinde bir dünya lideri, yeniden markalanmanın Apryse olarak duyurusunu yaptı; iText, Windward, Eversign ve daha fazla dahil olmak üzere 13 şirketi bir araya getiriyor.

PDF Oluşturma İçin Bir ASP.NET Projesi Nasıl Oluşturulur?

Seçeceğiniz kütüphaneden bağımsız olarak PDF oluşturma için bir ASP.NET projesi kurmak doğru 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 sonraki bir sürümü açın
  2. "Yeni bir proje oluştur"a tıklayın
  3. "ASP.NET Core Web App"i seçin (.NET 6.0 veya daha yenisi önerilir)
  4. Proje adınızı ve konumunuzu seçin
  5. İhtiyaçlarınıza göre "Web Application (Model-View-Controller)" veya "Web API"yi seçin
  6. Optimal uyumluluk için ".NET 8.0" veya daha yenisinin seçildiğinden emin olun

Visual Studio yeni proje diyalog penceresi ASP.NET Core Web Uygulama secimini gösteriyor PDF kütüphane entegrasyonu için ASP.NET proje şablonlarını gösteren Visual Studio'nun Yeni Proje diyalog kutusu

Web Forms uygulamaları için:

  • "ASP.NET Web Application (.NET Framework)"ü seçin
  • Şablon seçeneklerinden "Web Forms"u seçin "Oluştur"a tıklayarak proje yapısını oluşturun

Visual Studio proje oluşturma sihirbazinda Web Formlari sablon secimi PDF yetenekleriyle geleneksel ASP.NET uygulamaları için Web Forms şablonu seçimi

IronPDF'yi C# Projemde Nasıl Kurarım?

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

Yöntem 1: Visual Studio Paket Yöneticisini Kullanma

En basit yaklaşım, Visual Studio'nun tümleşik NuGet Paket Yöneticisi'ni kullanır:

  1. Solution Explorer'da projenizin uzerine sag tiklayin
  2. "NuGet Paketlerini Yonet"i secin
  3. "Gözat"a tıklayın ve "IronPDF" arayın
  4. IronPDF paketinde 'Yükle'ye tıklayın

Cözüm Gezgini baglam menusü NuGet Paketlerini Yönetme secenegini gösteriyor IronPDF kurulumu için Visual Studio'nun Çözüm Gezgini üzerinden NuGet Paket Yöneticisine erişim

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

NuGet Paket Yonetici arayuzu IronPDF yuklemesini gösteriyor Sürüm bilgisi ve bağımlılıklarla birlikte NuGet Paket Yöneticisi aracılığıyla IronPDF kurulumu

Yöntem 2: Paket Yöneticisi Konsolunu Kullanma

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 İndirerek Kurulum

NuGet erişimi olmayan ortamlar için:

  1. IronPDF'nin resmi sitesinden indirin
  2. ZIP dosyasını proje dizininize çıkarın
  3. Visual Studio'da, 'Başvurular'ı sağ tıklayın → 'Başvuru Ekle'
  4. IronPdf.dll dosyasina goz atip secin

Yöntem 4: .NET CLI Kullanarak

Komut satırı meraklıları ve CI/CD 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 Kurulur?

PDFTron kurulumu, modüler mimarisi ve kurumsal odaklılığı nedeniyle daha fazla adım içerir. Süreç, hedef platformunuza ve gerektirdiğiniz özelliklere göre değişir.

Önkoşullar

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

Elle Entegrasyon Adımları

  1. SDK'yı Çıkartı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 klasorunu PDFNET_BASE'dan proje dizininize kopyalayin
    • Hem PDFNetLoader.dll hem de platforma ozel PDFNet.dll icin referanslar ekleyin
  4. Yerel Kopya Özelliğini Yapılandırın

Visual Studio'da PDFTron Kopya Yerel ozelliginin False olarak ayarlandigini gösteriyor Doğru PDFTron dağıtımı için PDFNet.dll'nin Yerel Kopya özelliğini False olarak ayarlama

  1. App.config dosyasını 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 (Basitleştirilmiş)

Daha basit bir yaklaşım için:

  1. NuGet Paket Yöneticisini Açın
  2. 'PDFTron.NET.x64' veya platforma özgü paketi arayın
  3. Mimariniz için uygun paketi yükleyin

PDFTron NuGet paketi yukleme arayuzu Platforma özgü paketlerle NuGet Paket Yöneticisi aracılığıyla PDFTron kurulumu

PDFTron, ComPDFKit'in 10+ türüne kıyasla 30'dan fazla anotasyon türü sunar. Ancak, bu kapsamlı özellik seti, kurulum sırasında dikkatli modül seçimi gerektirir.

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

Her iki kütüphane de URL'den PDF'ye dönüştürme sağlar, ancak farklı yaklaşımlar ve yeteneklerle. Her birinin uygulama ayrıntılarını ve performans özelliklerini inceleyelim.

IronPDF ile URL'den PDF'ye

IronPDF'nin Chrome render motoru modern web standartları için mükemmel 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 render motoru, aşağıdakiler dahil karmaşık senaryoları yönetir:

  • Ağır JavaScript içeren 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 ana dalı şimdi bunların hepsini destekliyor: nuget.org/packages/IronPdf. Son performans iyileştirmeleri, özellikle karmaşık web uygulamaları için render hızını önemli ölçüde artırdı.

PDFTron (Apryse) ile URL'den PDF'ye

PDFTron, web içeriği dönüştürme 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ğine (API'ler, özellikler) ve dağıtım kapsamına (dış veya iç kullanıcılar) göre 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
  • Daha basit HTML belgeleri için daha uygundur

HTML Dizelerinden PDF Nasıl Oluştururum?

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

IronPDF ile HTML Dizesinden PDF'ye

IronPDF, tam CSS3 ve JavaScript desteğiyle karmaşık HTML renderinde mükemmeldir:

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 kilit avantajları:

  • Flexbox ve grid düzenleri dahil tam CSS3 desteği
  • Google Yazı Tipleri ve web yazı tipi entegrasyonu
  • JavaScript grafik kütüphaneleri (Chart.js, D3.js) mükemmel şekilde render edilir
  • Görünüm kontrolü ile duyarlı tasarım desteği
  • Kendi başına yeten belgeler için Base64 görsel gömme

PDFTron (Apryse) ile HTML Dizesinden PDF'ye

PDFTron'un HTML dize dönüştürmesi 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 bulundurulması gerekenler:

  • Temel CSS desteği (ileri düzey düzenler yok)
  • Sınırlı JavaScript yürütme
  • Yazı tipi gömme ek yapılandırma gerektirir
  • Basit belge düzenleri için daha uygundur

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

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

IronPDF ile ASPX'den PDF'ye

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

Render sürecini daha iyi kontrol etmek 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'den PDF'ye özelliği şunları korur:

  • ViewState ve form degerleri
  • Oturum durumu verileri
  • CSS stilleri ve düzenleri
  • JavaScript ile render edilen içerik
  • Ana sayfa düzenleri

PDFTron Alternatifi ile ASPX

PDFTron doğrudan ASPX desteği sunmaz, dolaylı yaklaşımlar gerektirir:

// 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ürürüm?

Gorselden PDF'e dönüştürme, doküman arsivleme ve portfolyo oluşturma icin onemlidir. Her iki kutuphane de farkli yaklasimlarla bu islevi sunar.

IronPDF ile Gorselden PDF'e

IronPDF, verimli toplu işleme icin ozel bir ImageToPdfConverter sinifi saglar:

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ş görüntü işleme özellikleri:

  • SVG'den PDF'e dönüştürme ile vektor kalitesinin korunmasi
  • Bellek optimizasyonu ile toplu işleme
  • Ozellestirilmis boyut ve konumlama seçenekleri
  • EXIF verilerinin korunmasi

PDFTron (Apryse) ile Gorselden PDF'e

PDFTron, görüntü işleme icin kendi donustum API'sini kullanir:

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

Lisans Seçenekleri ve Maliyetleri Nelerdir?

Bütçeleme ve uygunluk için lisanslamayı anlamak çok önemlidir. Iki kutuphane arasinda çok farkli fiyatlandirma modelleri vardir.

IronPDF Lisanslama

IronPDF, $799'dan $2,399'ye kadar 3 fiyatlandirma surumune sahiptir. IronPDF'nin ücretsiz denemesi de mevcuttur. IronPDF, seffaf, yayinlanmis fiyatlar saglar (2025 itibariyle):

Lisans Seviyeleri:

  • Lite License: $799

    • 1 geliştirici
    • 1 konum
    • 1 proje
    • Bireysel geliştiriciler veya küçük projeler icin ideal
  • Plus License: $1,199

    • 3 geliştirici
    • 3 konum
    • 3 proje
    • Küçük takımlar icin mükemmel
  • Professional License: $2,399

    • 10 geliştirici
    • 10 konum
    • 10 proje
    • Buyuyen takımlar için en iyi
  • Sinirsiz Lisans: Ozellestirilmis fiyat
    • Sınırsız geliştirici
    • Sinirsiz konumlar
    • Sınırsız projeler

Ek Seçenekler:

  • Telif Ücretsiz Yeniden Dağıtim: +$2,399 (tek seferlik)
  • SaaS/OEM lisanslama mevcut
  • Iron Suite paketi: 10 urunu 2 ürün fiyatina alin

Tüm Takim Lisanslari nakledilemez ve lisanslarin bir organizasyon veya ajans/müşteri iliskisinin disinda paylasilmasi yasaktir.

PDFTron (Apryse) Lisanslama

PDFTron'un lisanslamasi teklif tabanlidir ve yayinlanmis bir fiyat yoktur. Kullanıcı geri bildirimleri ve endustri raporlarina gore:

Tahmini Fiyat Araliklari:

  • Küçük Isletme: $5,000 - $15,000 yillik
  • Enterprise: $30,000 - $100,000+ yillik
  • Ek moduller ayri lisanslar gerektirir

PDFTRON'da fiyat seffafligi buyuk bir eksidir. Her sey bir eklenti olup, özellikli lisans kosullari ve sözleşmeleri gerektirir. Kullanıcılar rapor ediyor:

  • PDFTRON icin 6500$'ı yatirdiktan sonra, urunleri reklamlarda söylendiği gibi çalışmadi ve elimizde bir suru isi duzenlemesi gereken bir karisiklik birakti.
  • Karmaşık lisans anlaşmaları gerekti
  • Modül basına fiyatlar toplam maliyeti arttırır
  • Sinirli iade politikaları

Temel Farkliilar:

  • IronPDF: Kalıcı lisanslar, tek seferlik ödeme
  • PDFTron: Genellikle abonelik tabanlı veya yıllık ücretler
  • IronPDF: Tüm özellikler temel lisansta dahil
  • PDFTron: Temel özellikler ve ucretli eklentiler

Destek Seçenekleri Karşilastirmalari Nasıl?

Geliştirici destegi, proje zaman cizelgelerini yapabilir veya bozabilir. Iste her satis temsilcisinin musterilere nasıl yardimci oldugu:

IronPDF Destegi

IronPDF, tüm lisanslarla birlikte profesyonel destek sunar:

IronPDF kutuphanesi, Azure WebApps, Fonksiyonlar ve WebJobs'da calisir. Linux ve Windows varyatlarinda calisir, ancak ben daha iyi test edilmis ve kurulumu daha kolay oldugu icin Windows varyatlari Fonksiyonlar ve WebApps'i öneririm.

PDFTron (Apryse) Destegi

PDFTron'un destegi lisans seviyesine göre degisir:

  • PDFTron'un maliyeti yüksek. Isimiz icin onemi maliyeti justifiedir, fakat bu urunu diğer PDF web cozumleriyle karsilastirirken kesinlikle bir engel teskil etti.
  • Temel lisanslar icin forum tabanli destek
  • Ücretli destek planlari mevcut
  • Zaman zaman destek yetersiz kalabilir ve geliştiricilere kendileri gecmek zorunda kalabilirler.
  • Yanıt süresi, destek seviyesine göre degisir

Performans Özellikleri Nelerdir?

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

IronPDF Performansi

Son iyilestirmeler IronPDF'nin performansini önemli bir şekilde artırdı:

// 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

Üretim ortamlarindan performans metrikleri:

  • Basit HTML: 200-400ms
  • Karmaşık HTML ile CSS/JS: 800-1200ms
  • IronPDF asenkron versiyonları, ironpdf.com/examples/async burada döküman edilen eşzamanlı işleme yöntemlerine sahiptir. Benim kullanim durumum icin HTML'den PDF'ye toplu rendere etme icin Parallel.ForEach kullanmak en yuksek performansli stratejiydi

PDFTron (Apryse) Performansi

PDFTron, temel donustumler için genellikle daha hizli ham performans sunar:

  • Temel HTML: 100-300ms
  • Office belgeleri: 500-1000ms
  • Daha dusuk bellek ayak izi
  • Yuksek hacimli basit belgeler icin daha iyi

Bununla birlikte, kullanıcılar karmaşık senaryolarla ilgili sorunlar bildirmekte:

  • Ara sıra, QA testlerinde keşfedilmesi gereken oldukça önemli hatalar olabilmektedir. Onların sonunda düzeltilmesi biraz zaman alabilir.

Modern CSS Framework ve Bootstrap Desteği

Kurumsal uygulamalar, modern CSS çatısı olarak giderek daha fazla ortaya çıktıkça, bu çerçeveleri PDF'ye doğru şekilde dönüştürme kapasitesi PDF kütüphanelerinin seçim kriterleri arasında önemli bir alandır.

IronPDF: Tam Chromium Tabanlı Çerçeve Desteği

IronPDF'nin Chrome V8 çözüm 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 desteği ile tüm duyarlı yardımcı programları
  • Bootstrap 4: Kart bileşenleri, navigasyon sistemleri ve form düzenleri ile tam uyumluluk
  • Tailwind CSS: Tüm yardımcı sınıflar, duyarlı modifikasyonlar ve JIT derleme kalıpları
  • Foundation: Tam ızgara sistemi ve bileşen kütüphanesi desteği
  • Modern CSS3: Esnek kutular, CSS Grid, CSS değişkenleri, animasyonlar, dönüşümler ve geçişler
  • JavaScript Çerçeveleri: React, Vue, Angular bileşen işleme tam interaktivite desteği

Üretim validasyonu: Bootstrap ana sayfası ve resmi şablonlar %98+ tarayıcı sadakatiyle dönüştürülüyor.

Kod Örneği: Veritabanları ile İlgili Kurumsal Kontroller Tablosu

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

Çıktı: Bootstrap'in esnek kutu metrik kartları, duyarlı grid düzenleri ve stilize verilere tabloları ile profesyonel bir kurumsal kontrol panosu—tüm bunlar PDF'de mükemmel bir sadakatle işlenmiş.

PDFTron (Apryse): HTML2PDF Modülü ile Çerçeve Sınırlamaları

PDFTron's HTML-to-PDF dönüşümü, modern CSS çerçeveleri için belirli sınırlamalara sahip özel bir işleme motoru kullanan HTML2PDF modülü aracılığıyla sağlanır:

  • Özel Motor: CSS3 desteği kapsamlı olmaktan ziyade seçici olduğu için Chromium tabanlı değildir
  • Flexbox Desteği: Kısmi uygulama, Bootstrap 4/5 flexbox düzenleri düzgün şekilde işlenmeyebilir
  • CSS Grid: CSS Grid Layout spesifikasyonları için sınırlı destek
  • JavaScript Sınırlamaları: Tam tarayıcı motorlarına kıyasla sınırlı JavaScript yürütmesi
  • Bootstrap 3: Tablo tabanlı düzenler nedeniyle genellikle Bootstrap 4/5'ten daha iyi çalışır
  • Çerçeve Testi Gerekli: Karmaşık Bootstrap bileşenleri kapsamlı test ve potansiyel çözümler gerektirir

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

  • Hizalama sorunları ile işlenen flexbox tabanlı gezinme çubukları
  • CSS ayarlamaları gerektiren kart desteleri ve grid sistemleri
  • PDF çıktısında uyarlanabilir yordamlarının işlenmemesi
  • Bootstrap bileşenlerini basitleştirme veya yedek CSS kullanma gereksinimi

Kurumsal değerlendirme: Modern Bootstrap sürümleri (4+) üzerine kurulu uygulamalar için PDFTron, düzen dönüşümlerini ele almak için önemli ek geliştirme çabaları gerektirebilir, bu da diğer performans avantajlarını dengeleyebilir. Özel motor yaklaşımı, gerçek bir tarayıcı ile aynı işleme hassasiyetini elde etmediğiniz anlamına gelir.

Kapsamlı Bootstrap çerçevesi desteği ve test rehberliği için Bootstrap & Flexbox CSS Kılavuzu'na bakın.

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

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

IronPDF'i Şu Durumlarda Seçin:

HTML/CSS Sadakati Kritik

  • Karmaşık düzenler içeren modern web uygulamaları
  • JavaScript ağırlıklı içerik
  • Korunması gereken uyumlu tasarımlar

Hızlı Geliştirme Öncelik

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

  • Yayınlanmış fiyatlandırma, doğru bütçeleme sağlar
  • Sürpriz maliyetler veya gizli ücretler yok
  • Tüm özellikler temel lisansa dahildir

Özel Özelliklere İhtiyacınız Var

PDFTron (Apryse)'yi Seçmek için Zaman:

Kurumsal Doküman İş Akışları

  • Karmaşık form işleme ve XFA desteği
  • CAD dosya dönüştürmeleri (DWG, DXF)
  • Gelişmiş Office dokümanı yönetimi

Performansın Özelliklerden Daha Üstün Olduğu Durumlar

  • Yüksek hacimli basit doküman işleme
  • Daha düşük bellek gereksinimleri
  • Temel HTML dönüşüm ihtiyaçları

Özel Gereksinimler

  • Yerleşik doküman görüntüleyici bileşenleri
  • Kapsamlı not türleri (30+)
  • Eski sistem entegrasyonu

Büyük Kurumsal Çevre

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

Özet ve Sonuç

Hem IronPDF hem de PDFTron (Apryse), yetenekli PDF kütüphaneleridir, ancak farklı pazar segmentlerine ve kullanım durumlarına hitap eder.

IronPDF aşağıdakilerde uzmanlaşmıştı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 konteynerleştirilmiş dağıtımlar

PDFTron (Apryse) güçlü yönleri şunları içerir:

  • Kurumsal doküman iş akışları
  • CAD ve özel format desteği
  • Düşük kaynak tüketimi
  • Kapsamlı not ekleme yetenekleri
  • Eski sistem uyumlu

Çoğu .NET geliştiricisi için modern uygulamalar oluşturan IronPDF, özelliklerin, kullanım kolaylığının ve değerinin en iyi kombinasyonunu sunar. Chrome tabanlı işleme motoru, piksel mükemmelliğinde HTML'den PDF'ye dönüştürme sağlar, kolay anlaşılır API ise geliştirimi hızlandırır.

PDFTron, CAD dönüşümü, karmaşık form işleme veya eski doküman formatları ile çalışırken özel gereksinimlere sahip işletmeler için uygun kalmaktadır. Ancak, fiyatlandırma şeffaflığının ve modüler lisans yapısının eksikliği toplam maliyetleri önemli ölçüde artırabilir.

Başlarken

IronPDF'yi Deneyin:

PDFTron'u Keşfedin:

Her iki seçeneği de spesifik kullanım durumlarınızla dikkatlice değerlendirmeyi unutmayın. Uzun vadeli maliyetler, destek kalitesi ve teknik yeteneklerle birlikte özellik yol haritalarını göz önünde bulundurun.

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

Lütfen dikkate alinPDFTron, kendi sahibine ait bir tescilli markadır. Bu site PDFTron ile ilişkili, 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.

HTML'den PDF'ye dönüştürme için IronPDF ve PDFTron arasındaki performans farkları nelerdir?

IronPDF, Chrome tabanlı motoru ile karmaşık web içeriği için üstün renderlama sağlayarak, JavaScript ve CSS3 için daha iyi destek sunar. PDFTron, basit HTML için daha hızlı olsa da, karmaşık içeriği aynı etkinlikle işleyemeyebilir.

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

IronPDF, tüm özellikleri içeren şeffaf ve süresiz lisanslar sunar ve başlangıç fiyatı $749'dan başlar. PDFTron'un ise lisanslaması için özelleştirilmiş teklifler gereklidir ve bu teklifler genellikle yıllık $5.000 ila $100,000+ arasında değişebilir.

Bu kütüphaneler kullanılarak ASPX sayfaları PDF'ye dönüştürmek mümkün mü?

Evet, IronPDF, AspxToPdf.RenderThisPageAsPdf metodunu kullanarak ASPX sayfalarını tek bir kod satırıyla PDF'ye dönüştürür. PDFTron ASPX sayfa dönüştürme işlemini doğrudan desteklemez.

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

IronPDF, Azure ve AWS gibi bulut ortamları için optimize edilmiştir ve Functions ve WebApps ile sorunsuz çalışır. PDFTron, optimize bir 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şturmayı destekler. IronPDF, HTML formlarının otomatik dönüştürülmesi için CreatePdfFormsFromHtml kullanır. PDFTron, kapsamlı form alanı tipleri sunar ancak daha karmaşık entegrasyon gerektirir.

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

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

IronPDF ve PDFTron, şifre korumalı web sitelerini ele alma konusunda nasıl karşılaştırılıyorlar?

IronPDF, oturum açma formlarını ve HTTP kimlik doğrulamasını ele almak için ChromeHttpLoginCredentials kullanarak kimlik doğrulamasını desteklerken, PDFTron bu özellik için sınırlı destek sunar.

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