QuestPDF'den IronPDF'e C# ile Nasıl Geçilir
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against QuestPDF on pricing, HTML support, and licensing.
QuestPDF'den IronPDF'ye geçmek, PDF üretim iş akışınızı özel bir C# akıcı API'den kapsamlı PDF manipülasyon yetenekleriyle standart bir HTML/CSS tabanlı yaklaşıma dönüştürür. Bu rehber, mevcut web becerilerinizi kullanmanıza, HTML şablonlarını yeniden kullanmanıza ve QuestPDF'nin basitçe sağlayamayacağı özellikleri kazanmanıza olanak tanıyan eksiksiz, adım adım bir geçiş yolu sunar.
Neden QuestPDF'den IronPDF'ye Geçilmeli
QuestPDF'yi Anlamak
QuestPDF, C#'ta programatik olarak PDF üretmek için spesifik olarak oluşturulmuş modern bir akıcı API'dir. Bazı eşdeğerleri gibi kapsamlı HTML'den PDF'e dönüştürme yeteneği sunmamasının aksine, QuestPDF, programatik düzen API işlevsellikleriyle sınırlıdır. QuestPDF, geliştiricilerin C# kodu kullanarak tamamen yeni belgeler oluşturması gerektiği senaryolarda mükemmel sonuç verir, HTML'ye güvenilmeden.
Kütüphane, geliri 1 milyon doların altında olan işletmeler için ücretsizdir, fakat bu gelir seviyesinin kanıtlanması gerekliliği, bazıları için uyumluluk yükü olabilir. Bu eşiği aşan kullanıcılar, QuestPDF'yi potansiyel bir çözüm olarak değerlendirdiğinde uzun vadeli planlamaya dahil edilmesi gereken bir lisans almak zorundadır.
Temel Sorun: HTML Desteği Yok
QuestPDF genellikle HTML'den PDF'e dönüştürme için önerilse de, HTML'yi hiç desteklememektedir. Geliştirici forumlarında yoğun bir şekilde tanıtılmasına rağmen,QuestPDFkendi özel düzen dilini kullanıyor ve bu da mevcut web becerilerinizden yararlanmak yerine tamamen yeni bir DSL öğrenmenizi gerektiriyor.
| Özellik | QuestPDF | IronPDF | |
|---|---|---|---|
| HTML'den PDF'ye | DESTEKLENMİYOR | Desteklenir | |
| CSS Stili | DESTEKLENMİYOR | Tam CSS3 | |
| **Mevcut Sablo | lar** | Bastan yeniden insa edilmesi gerekir | HTML/CSS varliklarini yeniden kullanin |
| Tasarim Araci Uyumlulugu | None | Herhangi bir web tasarim araci | |
| Öğrenme Eğrisi | Yeni tescilli DSL | Web beceri transferi | |
| Yerlesim Onizlemesi | IDE plugin gerektirir | Herhangi bir tarayicide onizle | |
| PDF Manipulasyonu | None | Birleştirme, bölme, düzenleme |
IronPDF, QuestPDF'nin tamamen eksik olduğu yerli HTML'den PDF'e işleme sağlar, belgeleri C# kodunda manuel olarak yeniden yapılandırma ihtiyaçını ortadan kaldırır. Bu, QuestPDF'nin gerçekleştiremeyeceği kapsamlı PDF manipülasyon özelliklerini (birleştirme, bölme, düzenleme, güvenlik) içerir.
QuestPDFLisans Modeli
QuestPDF'nin 'Community Lisansı', yalnızca şirketinizin yıllık brüt geliri 1 milyon doların altındaysa ücretsizdir. Müşterileriniz (yalnızca siz geliştirici olarak değil) eğer gelir eşiklerini aşarlarsa lisans satın almak zorunda kalabilirler. Basit bir geliştirici başına ticari lisansın aksine, QuestPDF'nin modeli, gelir açıklamasını ve uyumluluk takibini gerektirir.
IronPDF, basit lisanslama sunar: geliştirici başına bir lisans, gelir denetimleri yok, müşteri lisanslama gereksinimleri yok ve net, tahmin edilebilir maliyetler.
.NET 10 ve C# 14 benimsemeye yönelik 2025 ve 2026 yılı planlamaları yapan ekipler için IronPDF, gelir bazlı denetimler olmadan geçerli lisanslama ve mevcut web geliştirme becerilerinden yararlanan standart bir HTML/CSS yaklaşımı sunar.
Başlamadan Önce
Önkoşullar
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleme yeteneği
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
Lisans Yapılandırması
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
QuestPDFKullanımını Bulun
# Find allQuestPDFusages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
# Find allQuestPDFusages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
API Referansının Tamamı
Namespace Değişiklikleri
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
Imports IronPdf
Temel API Eşleştirmeleri
| QuestPDF Kavrami | IronPDF Eşdeğeri |
|---|---|
Document.Create() |
new ChromePdfRenderer() |
.Page() |
RenderHtmlAsPdf() |
.Text() |
HTML <p>, <h1>, <span> |
.Bold() |
CSS font-weight: bold |
.FontSize(24) |
CSS font-size: 24px |
.Image() |
HTML <img src="..."> |
.Table() |
HTML <table> |
.Column() |
CSS görüntüle: esnek; flex-direction: column |
.Row() |
CSS görüntüle: esnek; flex-direction: row |
PageSizes.A4 |
RenderingOptions.PaperSize |
.Margin() |
RenderingOptions.Margin* |
.GeneratePdf() |
pdf.SaveAs() |
| N/A | PdfDocument.Merge() |
| N/A | PdfDocument.FromFile() |
| N/A | pdf.SecuritySettings |
Kod Geçiş Örnekleri
Örnek 1: Temel Belge Oluşturma (HTML'den PDF'e)
Önce (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("Hello World").FontSize(20).Bold()
column.Item().Text("This is a paragraph of text.")
End Sub)
End Sub)
End Sub).GeneratePdf("output.pdf")
End Sub
End Module
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Bu örnek, temel paradigma farkını göstermektedir. QuestPDF, akıcı API'sini ve method zincirlemesi yoluyla stil vermeyi öğrenmeyi gerektirir: Document.Create(), container.Page(), page.Content().Column(), column.Item().Text(), .FontSize(20).Bold(). Ayrıca lisans türünü QuestPDF.Settings.License = LicenseType.Community ile ayarlamanız gerekmektedir.
IronPDF, her web geliştiricisinin bildiği standart HTML'i kullanır: Başlıklar için <h1>, paragraflar için <p>. Öğrenilecek bir özel DSL yok. IronPDF'in yaklaşımı, daha temiz bir sözdizimi ve modern .NET uygulamalarıyla daha iyi entegrasyon sunar. Kapsamlı örnekler için HTML'den PDF'e döndürme belgesine bakın.
Örnek 2: Fatura Oluşturma
Önce (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("INVOICE").FontSize(24).Bold()
column.Item().Text("Invoice #: 12345").FontSize(12)
column.Item().PaddingTop(20)
column.Item().Text("Customer: John Doe")
column.Item().Text("Total: $100.00").Bold()
End Sub)
End Sub)
End Sub).GeneratePdf("invoice.pdf")
End Sub
End Module
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("invoice.pdf")
End Sub
End Class
QuestPDF, düzen için .Column() ve .Item(), boşluk için .PaddingTop(20) kullanır. IronPDF, başlık için <h1>, paragraflar için <p>, boşluk için <br/> ve kalın metin için <strong> şeklinde standart HTML kullanır.
Gerçek avantaj:IronPDFile, tasarımcılar HTML şablonlarını bağımsız olarak oluşturabilir ve değiştirebilir.QuestPDFile her tasarım değişikliği, bir C# geliştiricisinin kodu değiştirmesini gerektirir. Detayli bilgi icin eğitimlerimize bakin.
Örnek 3: Sayfa Numaralı Başlıklar ve Altbilgiler
Önce (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Header().Text("Document Header").FontSize(14).Bold()
page.Content().Text("Main content of the document.")
page.Footer().AlignCenter().Text(Sub(text)
text.Span("Page ")
text.CurrentPageNumber()
End Sub)
End Sub)
End Sub).GeneratePdf("document.pdf")
End Sub
End Module
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "<p>Main content of the document.</p>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.Header = New TextHeaderFooter() With {
.CenterText = "Document Header",
.FontSize = 14
}
pdf.Footer = New TextHeaderFooter() With {
.CenterText = "Page {page}"
}
pdf.SaveAs("document.pdf")
End Sub
End Class
QuestPDF, page.Header() ve page.Footer() ile .AlignCenter() ve .CurrentPageNumber() gibi akıcı metotlar kullanır. IronPDF, TextHeaderFooter ve içinde CenterText ile FontSize gibi özelliklere sahip objeleri kullanır. {page} yer tutucu otomatik olarak geçerli sayfa numarasını ekler.
Kritik Geçiş Notları
Paradigma Değişimi
Temel değişiklik, özel bir C# DSL'den standart HTML/CSS'ye geçiştir:
// QuestPDF: Proprietary fluent API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// QuestPDF: Proprietary fluent API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
' QuestPDF: Proprietary fluent API
container.Page(Sub(page)
page.Content().Column(Sub(column)
column.Item().Text("Invoice").Bold().FontSize(24)
column.Item().Row(Sub(row)
row.RelativeItem().Text("Customer:")
row.RelativeItem().Text("Acme Corp")
End Sub)
End Sub)
End Sub)
' IronPDF: Standard HTML/CSS
Dim html As String = "
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
Yerleşim Şablon Dönüşümleri
| QuestPDFDeseni | HTML/CSS Eşdeğeri |
|---|---|
.Column() |
görüntüle: esnek; flex-direction: column |
.Row() |
görüntüle: esnek; flex-direction: row |
.RelativeItem() |
flex: 1 |
.Table() |
<table> elemanı |
.PaddingTop(20) |
padding-top: 20px veya <br/> |
.AlignCenter() |
text-align: center |
.FontSize(24) |
font-size: 24px |
.Bold() |
font-weight: bold veya <strong> |
Sayfa Ayarları Dönüşümleri
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20; // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20; // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
' QuestPDF
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
' IronPDF
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20 ' mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Geçiş Sonrası Yeni Özellikler
IronPDF'e geçtikten sonra QuestPDF'in sunamadığı yetenekleri kazanırsınız:
PDF Birleştirme
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
Dim cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>")
Dim content = renderer.RenderHtmlAsPdf(reportHtml)
Dim existing = PdfDocument.FromFile("appendix.pdf")
Dim merged = PdfDocument.Merge(cover, content, existing)
merged.SaveAs("complete.pdf")
PDF Güvenliği
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "reader"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SaveAs("protected.pdf")
URL'den PDF'e
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
Dim pdf = renderer.RenderUrlAsPdf("https://example.com/report")
pdf.SaveAs("webpage.pdf")
Mevcut PDF'leri Yükleme ve Düzenleme
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
Dim pdf = PdfDocument.FromFile("existing.pdf")
' Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf")
Özellik Karsilastirma Ozeti
| Özellik | QuestPDF | IronPDF |
|---|---|---|
| HTML'den PDF'ye | Desteklenmiyor | Ana özellik |
| Öğrenme Eğrisi | Özel DSL | Standart web becerileri |
| Şablon Önizleme | Eklenti gerekli | Herhangi bir tarayıcı |
| Tasarım İşbirliği | Yalnızca geliştiriciler | Tasarımcılar + Geliştiriciler |
| Mevcut Varlıklar | Yeniden inşa edilmesi gerekiyor | HTML/CSS yeniden kullanın |
| PDF Manipulasyonu | Desteklenmiyor | Desteklenir |
| Güvenlik/İmzalama | Desteklenmiyor | Desteklenir |
| Lisans Modeli | Gelir tabanlı | Geliştirici başına |
| Müşteri Etkisi | Lisanslara ihtiyaç olabilir | None |
| Bootstrap/Tailwind | Desteklenmiyor | Desteklenir |
| URL'den PDF'ye | Desteklenmiyor | Desteklenir |
Goc Kontrol Listesi
Geçiş Öncesi
- TümQuestPDFdoküman şablonlarını tanımlayın (
Document.Create,.GeneratePdf) - Kullanılan DSL kalıplarını belgelendirin (
.Column(),.Row(),.Table(),.Text()) - Stil yöntemlerini CSS karşılıklarına eşleyin
- ironpdf.com adresindenIronPDFlisans anahtarını alın
Paket Değişiklikleri
QuestPDFNuGet paketini kaldırınIronPdfNuGet paketini yükleyin:dotnet add package IronPdf
Kod Değişiklikleri
- Ad alanı eklerini güncelleyin
QuestPDF.Settings.License = LicenseType.CommunitykaldırınDocument.Create()deseniniChromePdfRenderer+ HTML'e dönüştürün.Column()/.Row()ile CSS Flexbox'ı değiştirin.Table()yerineHTML<table>elemanlarını kullanın.Text().Bold().FontSize(24)'yı<h1 style='...'>'ya dönüştürünpage.Header()/page.Footer()yerineTextHeaderFooterkullanın.CurrentPageNumber()yerine{page}yer tutucuyu kullanın.GeneratePdf()'yipdf.SaveAs()'ya dönüştürün- Uygulama başlatıldığında lisans başlatma ekleyin
Geçişten Sonra
- PDF çıktısının görsel karşılaştırması
- Çok sayfalı belgeleri doğru sayfa bölmeleri için test edin
- Gerektiğinde yeni yetenekler ekleyin (güvenlik, birleştirme, URL-to-PDF gibi)

