wkhtmltopdf ve IronPDF Karşılaştırması: Teknik Kılavuz
.NET geliştiricilerin HTML'den PDF'ye dönüştürme ihtiyacı olduğunda,wkhtmltopdfaçık kaynak doğası ve komut satırı sadeliği nedeniyle tarihsel olarak popüler bir tercih olmuştur. Ancak, projenin terk edilmesi ve kritik güvenlik açıkları, birçok ekibin modern alternatifleri değerlendirmesine neden oldu. Bu teknik karşılaştırma, güvenlik duruşunda, render yeteneklerinde ve uzun vadeli uygulanabilirlikte önemli farkları anlamak için wkhtmltopdf'yiIronPDFile karşılaştırır.
wkhtmltopdf'yi Anlamak
wkhtmltopdf, HTML'yi PDF belgelerine dönüştüren ve HTML içeriğini işlemek için doğrudan komut satırından çalışan bir araçtır ve Qt WebKit'i kullanır. Kütüphane, yıllar süren aktif geliştirme sürecinde, ücretsiz LGPLv3 lisansı ve çok platformlu kullanılabilirliği nedeniyle popülerlik kazandı.
Ancak,wkhtmltopdfartık göz ardı edilemeyecek kritik zorluklar sunmaktadır:
- Proje Terk Edilmesi: En son anlamlı yazılım güncellemeleri 2016-2017 civarında gerçekleşti
- Kritik Güvenlik Açığı: CVE-2022-35583 (CVSS 9.8 şiddetinde) bir SSRF zafiyeti olup yamalanmamıştır
- Güncel Olmayan Render Motoru: 2015'ten kalma Qt WebKit'e dayanıyor
- Sınırlı Modern Web Desteği: CSS Grid desteği yok, kırık Flexbox uygulaması, ES6+ JavaScript yok
- Ekosistem Durgunluğu: Tüm .NET sarmalayıcı kütüphaneleri (DinkToPdf, Rotativa, TuesPechkin, wkhtmltopdf-.NET, NReco.PdfGenerator) bu güvenlik açıklarını miras alır
CVE-2022-35583 Güvenlik Krizi
wkhtmltopdf'deki Sunucu Tarafı İstek Sahteciliği (SSRF) zafiyeti saldırganlara şunları sağlar:
- İç Hizmetlere Erişim: Güvenlik duvarlarının arkasındaki dahili API'lere, veritabanlarına ve servislere erişim
- Kimlik Bilgilerini Çalma: Bulut meta veriye erişim sağlayarak (AWS, GCP, Azure) IAM kimlik bilgilerini çalma
- Port Tarama: İç ağları altyapıdan tarama
- Veri Sızdırma: Özel HTML/CSS ile hassas verileri ele geçirme
Saldırı vektörü basittir—PDF oluşturucuya gönderilen kötü niyetli HTML:
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>wkhtmltopdf bu HTML'yi render ettiğinde, bu URL'leri sunucunun ağ bağlamından toplar, güvenlik duvarlarını ve güvenlik kontrollerini aşar. Bu güvenlik açığı asla yamanamayacaktır çünkü proje resmi olarak terk edilmiştir.
IronPDF'yi Anlamak
IronPDF, wkhtmltopdf'nin eksiklerini ele alan sağlam bir alternatif sunar. Aktif bakım, düzenli güncellemeler ve mevcut Chromium render motoruna dayanarak IronPDF hem güvenliği hem de modern web standartlarına uygunluğu sağlar.
Anahtar özellikler şunları içerir:
- Modern Chromium Motoru: Tam ES2024 JavaScript desteğiyle mevcut Chromium render motorunu kullanır
- Bilinen CVE Yok: Bilinen güvenlik açığı sıfır
- Aktif Geliştirme: Güvenlik güncellemeleri ve özellik geliştirmeleri ile düzenli sürümler
- Tam CSS Desteği: Tam CSS Grid, Flexbox ve modern düzen sistemleri
- Kapsamlı PDF Özellikleri: Dijital imzalar, PDF/A uyumluluğu, PDF manipülasyon yetenekleri
- Profesyonel Destek: Geniş dokümantasyon ve özel destek kanalları
Özellik Karşılaştırması
Aşağıdaki tablowkhtmltopdfileIronPDFarasındaki temel farkları vurgular:
| Özellik | wkhtmltopdf | IronPDF |
|---|---|---|
| Lisanslama | LGPLv3 (Ücretsiz) | Ticari |
| Render Motoru | Qt WebKit (2015) | Mevcut Chromium Motoru |
| Güvenlik Durumu | CVE-2022-35583 KRİTİK (9.8) YAMASIZ | Bilinen CVE Yok |
| En Son Anlamlı Güncelleme | 2016-2017 | Aktif geliştirme |
| CSS Grid | Desteklenmiyor | Desteklenen |
| Flexbox | Kırık | Desteklenen |
| ES6+ JavaScript | Desteklenmiyor | Desteklenen |
| Async/Await | Desteklenmiyor | Desteklenen |
| PDF Manipülasyonu | Desteklenmiyor | Desteklenen |
| Dijital İmzalar | Desteklenmiyor | Desteklenen |
| PDF/A Uyumlu | Desteklenmiyor | Desteklenen |
| Profesyonel Destek | Hiçbiri (terk edildi) | Ticari SLA ile |
| C# Entegrasyonu | Üçüncü taraf sarmalayıcıları ile | Doğrudan, düzenli güncellemeler |
Etkilenen Sarmalayıcı Kütüphaneler
wkhtmltopdf için tüm .NET sarmalayıcılar aynı zafiyetleri devralır:
| Sarmalayıcı Kütüphane | Durumu | Güvenlik Riski |
|---|---|---|
| DinkToPdf | Terkedilmiş | KRİTİK |
| Rotativa | Terkedilmiş | KRİTİK |
| TuesPechkin | Terkedilmiş | KRİTİK |
| wkhtmltopdf-.NET | Terkedilmiş | KRİTİK |
| NReco.PdfGenerator | wkhtmltopdf'yi kullanır | KRİTİK |
Uygulamanız bu kütüphanelerden herhangi birini kullanıyorsa, CVE-2022-35583'ye karşı savunmasızdır.
API Mimarisi Farklılıkları
wkhtmltopdf sarmalayıcıları ileIronPDFarasındaki API desenleri, karmaşıklık ve kullanılabilirlik açısından önemli farklar ortaya koyar.
wkhtmltopdfYapılandırma Deseni
wkhtmltopdf sarmalayıcılar, iç içe ayarlar konfigürasyonlarıyla belge nesneleri oluşturmayı gerektirir:
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4
},
Objects = {
new ObjectSettings()
{
HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4
},
Objects = {
new ObjectSettings()
{
HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}' NuGet: Install-Package WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End ClassBu model, SynchronizedConverter ile PdfTools oluşturarak, HtmlToPdfDocument içinde GlobalSettings ve Objects koleksiyonlarını oluşturarak ve bayt dizilerini manuel olarak dosyalara yazarak gerektirir.
IronPDFBasitleştirilmiş Desen
IronPDF, ChromePdfRenderer sınıfı ile basitleştirilmiş bir yaklaşım kullanır:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
pdf.SaveAs("output.pdf");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>")
pdf.SaveAs("output.pdf")
End Sub
End ClassChromePdfRenderer sınıfı, iç içe yapılandırma nesnelerini ortadan kaldırarak yerleşik kaydetme yöntemlerine sahip bir PdfDocument döndürür. Kapsamlı HTML dönüşüm rehberliği için HTML'den PDF'e öğreticisini inceleyin.
URL'den PDF'ye Dönüştürme
Web sayfalarını PDF'ye dönüştürmek, yaklaşımlar arasındaki karmaşıklık farkını gösterir.
wkhtmltopdfUygulaması
wkhtmltopdf, URL'leri belirtmek için Page özelliğini ObjectSettings içinde kullanır:
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4
},
Objects = {
new ObjectSettings()
{
Page = "https://www.example.com"
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4
},
Objects = {
new ObjectSettings()
{
Page = "https://www.example.com"
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}' NuGet: Install-Package WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter As New SynchronizedConverter(New PdfTools())
Dim doc As New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = {
New ObjectSettings() With {
.Page = "https://www.example.com"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End ModuleIronPDFUygulaması
IronPDF, özel RenderUrlAsPdf yöntemi sunar:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End ClassRenderUrlAsPdf yöntemi, tam JavaScript yürütümü ve modern CSS desteği ile sayfaları render etmek için Chromium motorunu kullanır—wkhtmltopdf'nin 2015 WebKit motoru tarafından sınırlanan yetenekler.
Özel PDF Ayarları
Sayfa boyutlarını, kenar boşluklarını ve yönlendirmeyi yapılandırmak, API'ler arasındaki yapısal farkları ortaya koyar.
wkhtmltopdfÖzel Ayarları
wkhtmltopdf, MarginSettings nesneleriyle iç içe GlobalSettings gerektirir:
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings()
{
Page = "input.html",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("custom-output.pdf", pdf);
}
}// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings()
{
Page = "input.html",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("custom-output.pdf", pdf);
}
}' NuGet: Install-Package WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO
Class Program
Shared Sub Main()
Dim converter As New SynchronizedConverter(New PdfTools())
Dim doc As New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Landscape,
.PaperSize = PaperKind.A4,
.Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
},
.Objects = {
New ObjectSettings() With {
.Page = "input.html",
.WebSettings = New WebSettings() With {.DefaultEncoding = "utf-8"}
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("custom-output.pdf", pdf)
End Sub
End ClassIronPDFÖzel Ayarları
IronPDF, doğrudan yapılandırma için RenderingOptions özelliklerini kullanır:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("custom-output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("custom-output.pdf");
}
}Imports IronPdf
Imports IronPdf.Rendering
Imports System
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 10
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
pdf.SaveAs("custom-output.pdf")
End Sub
End ClassAPI Eşleme Başvurusu
wkhtmltopdf'den IronPDF'ye geçişi değerlendiren ekipler, kavram eşdeğerliliklerini anlamak için bu eşlemeyi faydalı bulacaktır:
CLI'den C# API Haritalaması
| wkhtmltopdf CLI Seçeneği | IronPDF Eşdeğeri |
|---|---|
wkhtmltopdf input.html output.pdf | renderer.RenderHtmlFileAsPdf() |
wkhtmltopdf URL output.pdf | renderer.RenderUrlAsPdf() |
--page-size A4 | RenderingOptions.PaperSize = PdfPaperSize.A4 |
--page-size Letter | RenderingOptions.PaperSize = PdfPaperSize.Letter |
--orientation Landscape | RenderingOptions.PaperOrientation = Landscape |
--margin-top 10mm | RenderingOptions.MarginTop = 10 |
--margin-bottom 10mm | RenderingOptions.MarginBottom = 10 |
--margin-left 10mm | RenderingOptions.MarginLeft = 10 |
--margin-right 10mm | RenderingOptions.MarginRight = 10 |
--header-html header.html | RenderingOptions.HtmlHeader |
--footer-html footer.html | RenderingOptions.HtmlFooter |
--footer-center "[page]" | {page} yerine koyma |
--footer-center "[toPage]" | {total-pages} yerine koyma |
--enable-javascript | Varsayılan olarak etkin |
--javascript-delay 500 | RenderingOptions.WaitFor.RenderDelay = 500 |
--print-media-type | RenderingOptions.CssMediaType = Print |
--dpi 300 | RenderingOptions.Dpi = 300 |
--grayscale | RenderingOptions.GrayScale = true |
--zoom 0.8 | RenderingOptions.Zoom = 80 |
C# Sarmalayıcı API Haritalaması
| wkhtmltopdf Sarmalayıcı | IronPDF |
|---|---|
SynchronizedConverter | ChromePdfRenderer |
HtmlToPdfDocument | RenderingOptions |
GlobalSettings.Out | pdf.SaveAs() |
GlobalSettings.PaperSize | RenderingOptions.PaperSize |
GlobalSettings.Orientation | RenderingOptions.PaperOrientation |
GlobalSettings.Margins | RenderingOptions.Margin* |
ObjectSettings.Page | RenderHtmlFileAsPdf() |
ObjectSettings.HtmlContent | RenderHtmlAsPdf() |
HeaderSettings.Center | TextHeader.CenterText |
FooterSettings.Center | TextFooter.CenterText |
converter.Convert(doc) | renderer.RenderHtmlAsPdf() |
Yer Tutucu Sözdizimi Eşlemesi
| wkhtmltopdf Yer Tutucu | IronPDF Yer Tutucu |
|---|---|
[page] | {page} |
[toPage] | {total-pages} |
[date] | {date} |
[time] | {time} |
[title] | {html-title} |
[url] | {url} |
Wkhtmltopdf'den IronPDF'ye Geçiş Düşünen Ekipler İçin
Geliştirme ekiplerini IronPDF'yiwkhtmltopdfyerine değerlendirmeye yönlendiren çeşitli senaryolar:
Güvenlik Uyumluluk Gereksinimleri
Güvenlik uyumluluk gereksinimleri (SOC 2, PCI DSS, HIPAA) olan kuruluşlar, bilinen kritik güvenlik açıklarına sahip uygulamaları kabul edemez. CVE-2022-35583'ün 9,8 şiddet derecesi, çoğu güvenlik çerçevesinde derhal önlem alınmasını gerektirir.
Modern CSS Çerçevesi Benimseme
Bootstrap 5, Tailwind CSS veya özel CSS Grid düzenlerini benimseyen ekipler, wkhtmltopdf'nin bunları doğru şekilde render edemediğini görür. 2015 WebKit motoru tamamen CSS Grid desteğinden yoksundur ve kırık bir Flexbox uygulamasına sahiptir.
JavaScript Uygulaması Gereksinimleri
Modern JavaScript özelliklerini kullanan uygulamalar—ES6+ sözdizimi ok işlevleri, async/await, sınıflar ve şablon literalleri dahil—wkhtmltopdf'de başarısızlıklarla karşılaşır. IronPDF'nin Chromium motoru tam JavaScript desteği sağlar.
Bulut ve Konteyner Dağıtımları
Docker, Kubernetes veya bulut platformları kullanarak modern dağıtım stratejileri, IronPDF'nin konteyner dostu mimarisinden yararlanır. Konteynerlerdekiwkhtmltopdfikili dosyalarının güvenlik taramaları CVE güvenlik açığını işaretleyecektir.
Uzun Vadeli Bakım Endişeleri
Wkhtmltopdf için gelecekte hiçbir güncellemenin beklenmemesi, ekiplerin web standartları geliştikçe artan teknik borçlarla karşı karşıya kalmalarına yol açar. IronPDF'nin aktif geliştirme durumu, 2026'da beklenen .NET 10 da dahil olmak üzere gelecekteki .NET sürümleriyle uyumluluğu sürdürmeyi garanti eder.
EkIronPDFÖzellikleri
HTML'den PDF'ye dönüştürmenin ötesinde,IronPDFwkhtmltopdf'nin sunamayacağı belge manipülasyon özellikleri sağlar:
- PDF'leri Birleştirme: Birden fazla belgeyi tek bir dosyada birleştirin
- Belgeleri Bölme: Sayfa aralıklarını ayrı PDF'lere ayırın
- Dijital İmzalar: Belge doğruluğu için kriptografik imzalar uygulayın
- Filigranlama: Metin veya resim filigranları ekleyin
- PDF/A Uygunluğu: Arşiv standartlarına uygun belgeler oluşturun
- Form Doldurma: PDF form alanlarını programatik olarak doldurun
- Şifre Koruma: Kullanıcı ve sahip şifreleriyle PDF'leri şifreleme
- Başlıklar ve Alt Bilgiler: Tam HTML/CSS desteğiyle otomatik sayfa numaralandırma ve marka oluşturma
Async Desteği
IronPDF, web uygulaması performansı için async/await desteği sağlar:
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}Imports System.Threading.Tasks
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
Dim renderer As New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
Return pdf.BinaryData
End FunctionBu, yüksek yüklü web uygulamalarında iş parçacığı engellemesini önler—wkhtmltopdf'nin yalnızca senkron sarmalayıcılarıyla sağlanan bir yetenek değildir.
.NET Uyumluluğu ve Geleceğe Hazırlık
Wkhtmltopdf'nin terk edilmesi, daha yeni .NET sürümleri için uyumluluk testi veya güncellemeler yapılmayacağı anlamına gelir. IronPDF, .NET 8, .NET 9 ve 2026'da beklenen .NET 10 dahil olmak üzere gelecekteki sürümlerle uyumluluğu sağlayarak düzenli güncellemelerle aktif bir geliştirme sürdürür. Kütüphanenin API'sindeki async/await desteği, modern C# geliştirme uygulamaları ve C# 14'te beklenen özellikler ile uyumluluk sağlar.
Sonuç
Wkhtmltopdf veIronPDFarasındaki fark, güvenlik, render yetenekleri ve uzun vadeli uygulanabilirlik açısından önemlidir. Wkhtmltopdf'nin kritik SSRF güvenlik açığı (CVE-2022-35583) ve proje terk edilmesi, üretim uygulamaları için terk edilemez bir güvenlik duruşu yaratıyor. 2015 WebKit motoru modern CSS Grid'i işleyemez, Flexbox desteği kırık ve ES6+ JavaScript üzerinde başarısız olur.
IronPDF'nin Chromium tabanlı render motoru modern web standartları için tam destek sağlar ve bilinen CVE'leri yoktur. Basitleştirilmiş API tasarımı—iç içe yapılandırma nesneleri yerine RenderHtmlAsPdf() ve SaveAs() gibi yöntemler—kod karmaşıklığını azaltır ve wkhtmltopdf'nin sağlayamadığı PDF işleme, dijital imza ve asenkron destek gibi yetenekler ekler.
Şu andawkhtmltopdfveya sarmalayıcı kütüphaneleri (DinkToPdf, Rotativa, TuesPechkin) kullanan ekipler için, güvenlik etkileri hemen alternatiflerin değerlendirilmesini gerektirir. Wkhtmltopdf CLI seçenekleriyle IronPDF'nin RenderingOptions arasındaki API eşlemesi basittir ve IronPDF, wkhtmltopdf'de bulunan güvenlik risklerini ortadan kaldırırken her zaman daha az kod gerektirir.
Ek uygulama kılavuzu için, IronPDF belgelerini ve belirli kullanım durumları ile gelişmiş özellikleri kapsayan eğitimleri keşfedin.
