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:
- Visual Studio 2022 veya daha sonraki bir sürümü açın
- "Yeni bir proje oluştur"a tıklayın
- "ASP.NET Core Web App"i seçin (.NET 6.0 veya daha yenisi önerilir)
- Proje adınızı ve konumunuzu seçin
- İhtiyaçlarınıza göre "Web Application (Model-View-Controller)" veya "Web API"yi seçin
- Optimal uyumluluk için ".NET 8.0" veya daha yenisinin seçildiğinden emin olun
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
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:
- Solution Explorer'da projenizin uzerine sag tiklayin
- "NuGet Paketlerini Yonet"i secin
- "Gözat"a tıklayın ve "IronPDF" arayın
- IronPDF paketinde 'Yükle'ye tıklayın
IronPDF kurulumu için Visual Studio'nun Çözüm Gezgini üzerinden NuGet Paket Yöneticisine erişim
Visual Studio'nun Proje menüsü aracılığıyla NuGet Paket Yöneticisine alternatif erişim
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
Yöntem 3: Doğrudan İndirerek Kurulum
NuGet erişimi olmayan ortamlar için:
- IronPDF'nin resmi sitesinden indirin
- ZIP dosyasını proje dizininize çıkarın
- Visual Studio'da, 'Başvurular'ı sağ tıklayın → 'Başvuru Ekle'
IronPdf.dlldosyasina 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
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ı
-
SDK'yı Çıkartın
# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/# Example extraction path PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/SHELL -
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 -
Gerekli Kütüphaneleri Kopyalayın
LibklasorunuPDFNET_BASE'dan proje dizininize kopyalayin- Hem
PDFNetLoader.dllhem de platforma ozelPDFNet.dllicin referanslar ekleyin
- Yerel Kopya Özelliğini Yapılandırın
Doğru PDFTron dağıtımı için PDFNet.dll'nin Yerel Kopya özelliğini False olarak ayarlama
-
App.config dosyasını güncelleyin
<configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration><configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration>XML -
Yapı Sonrası Olayları Yapılandırın
xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Yxcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /YSHELL
NuGet Kurulumu (Basitleştirilmiş)
Daha basit bir yaklaşım için:
- NuGet Paket Yöneticisini Açın
- 'PDFTron.NET.x64' veya platforma özgü paketi arayın
- Mimariniz için uygun paketi yükleyin
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")
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
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
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
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
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
IronPDF'nin ASPX'den PDF'ye özelliği şunları korur:
ViewStateve 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
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
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
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:
- 24/5 e-posta ile mühendislik destek
- Geliştirme ekibine doğrudan erişim
- Tipik yanit süresi: 24-48 saat
- Kapsamli dokümantasyon
- Aktif topluluk forumlari
- Video dersler ve kod örnekleri
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
Ü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.ForEachkullanmak 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")
Çı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
- Basit API geliştirme süresini azaltır
- Kapsamlı kod örnekleri
- Minimum öğrenme eğrisi
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
- ASPX'den PDF'ye dönüşüm
- Azure ve bulut optimizasyonu
- Kapsamlı HTML/CSS/JS desteği
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.
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.



