IRONSOFTWAREHOME
VIDEOLAR

C# içinde İçindekiler Tablosu Nasıl Eklenir | IronPDF

Curtis Chau
Curtis Chau
Updated: 19 Temmuz 2026

wkhtmltopdf, HTML belgelerini Qt 4.8 + QtWebKit kullanarak PDF'ye dönüştürmek için yaygın olarak kullanılan bir araç olmuştur. Geliştiriciler arasında komut satırı yetenekleri ve ücretsiz lisansı için popüler olmasına rağmen, proje artık görmezden gelinemeyecek kritik güvenlik riskleri sunmaktadır. GitHub deposu 2 Ocak 2023'te arşivlendi; son üst sürüm, 11 Haziran 2020'den 0.12.6'dır; ve CVE-2022-35583 (CVSS 9.8, SSRF) yamalanmamış olarak kalmaktadır.

Bu rehber, wkhtmltopdf'ten IronPDF'e tam bir geçiş yolu sağlamakta ve bu güvensizlik riskini uygulamalarından yok etmesi gereken profesyonel .NET geliştiricileri için adım adım talimatlar, kod karşılaştırmaları ve pratik örnekler sunmaktadır.

Kritik Güvenlik Uyarısı: CVE-2022-35583

wkhtmltopdf, asla düzeltilemeyecek ciddi bir güvenlik açığı içerir:

IssueDetayDurumu
CVE-2022-35583 (SSRF, CWE-918)KRİTİK (CVSS 9.8)YAMALANMADI — bakımcılar tarafından tartışmaya açık
GitHub deposu arşivlendiSadece okunur2 Ocak 2023
Son üst sürüm0.12.611 Haziran 2020
Alt motorQt 4.8 + QtWebKit (Qt 4.8 EOL 2015)ESKİ
CSS Grid DesteğiNoneKırık
Flexbox DesteğiKısmiKırık
ES6+ JavaScriptSınırlıKırık

SSRF Saldırısının Nasıl Çalıştığını

Sunucu Tarafı İstek Sahtekarlığı (SSRF) güvenlik açığı, saldırganların iç hizmetlere erişmesine, kimlik bilgilerini çalmasına, ağınızın içini taramasına ve duyarlı verileri yanlış HTML ile dışa çıkarmasına olanak tanır:

<!-- Malicious HTML submitted to your PDF generator -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
HTML

wkhtmltopdf bu HTML'i render ettiğinde, bu URL'leri sunucunuzun ağ bağlamından çeker ve güvenlik duvarlarını ve güvenlik kontrollerini atlar.

Etkilenen Sarmalayıcı Kütüphaneler

Her .NET sargısı aynı wkhtmltopdf yerel ikili dosyasını paketler ya da dışa bırakır, bu nedenle kendileri ne kadar aktif olursa olsun hepsi CVE maruz kalır:

Sarmalayıcı KütüphaneEn son NuGetGüvenlik Riski
DinkToPdf1.0.8 (Nisan 2017) — terk edilmişCVE-2022-35583 kalıtları
Rotativa.AspNetCore (webgio çatallanma)1.4.0 (Kasım 2023) — sargı güncellendi, ikili dosya dondurulduCVE-2022-35583 kalıtları
TuesPechkin2.1.1 (Ocak 2015) — terk edilmişCVE-2022-35583 kalıtları
Haukcode.WkHtmlToPdfDotNet (önceki adı WkHtmlToPdf-DotNet)1.5.95 (Ekim 2024) — sargı güncellendi, ikili dosya dondurulduCVE-2022-35583 kalıtları
NReco.PdfGeneratorsargı güncellendi, wkhtmltopdf paketlenmiştirCVE-2022-35583 kalıtları

Bu kütüphanelerden herhangi birini kullanıyorsanız, tüm HTML girdisini temizlemediğiniz sürece uygulamanız CVE-2022-35583'e maruz kalır.

##IronPDF vs wkhtmltopdf: Özellik Karşılaştırması

Mimari farklılıkları anlamak, teknik karar vericilerin geçiş yatırımını değerlendirmesine yardımcı olur:

ÖzellikwkhtmltopdfIronPDF
LisanslamaLGPLv3 (Ücretsiz)Ticari
Render MotoruQt 4.8 + QtWebKit (Qt 4.8 EOL 2015)Mevcut Chromium motoru
Güvenlik AçıklarıCVE-2022-35583 (CVSS 9.8) yamalanmamış, tartışmaya açıkRaport edilmemiş kritik CVE'ler yok
Aktif BakımGitHub deposu 2 Ocak 2023'te arşivlendi; son sürüm Haziran 2020Düzenli sürümlerle aktif olarak korunur
Modern Web Standartları için DestekSınırlı (kırık flexbox, CSS Grid yok)Desteklenen
Entegrasyon ve DestekTopluluk forumları ile sınırlıdırGeniş kapsamlı belgeler ve özel destek
CSS Grid❌ Desteklenmiyor✅ Desteklenir
Flexbox⚠ Bozuk✅ Desteklenir
ES6+ JavaScript❌ Desteklenmiyor✅ Desteklenir
Async/Await❌ Desteklenmiyor✅ Desteklenir
PDF Manipülasyonu❌ Desteklenmiyor✅ Desteklenir
Dijital İmzalar❌ Desteklenmiyor✅ Desteklenir
PDF/A Uyumlu❌ Desteklenmiyor✅ Desteklenir

Hızlı Başlangıç: wkhtmltopdf'ten IronPDF'e Geçiş

Geçiş bu öncü adımlarla hemen başlayabilir.

Adım 1: wkhtmltopdf Paketlerini ve İkili Dosyalarını Kaldırın

Tüm wkhtmltopdf sarmalayıcı paketlerini kaldırın:

# Remove wkhtmltopdf wrapper (whichever you're using)
dotnet remove package Haukcode.WkHtmlToPdfDotNet
dotnet remove package DinkToPdf
dotnet remove package TuesPechkin
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore
dotnet remove package NReco.PdfGenerator

# Remove wkhtmltopdf binary from your deployment
# Delete wkhtmltopdf.exe, wkhtmltox.dll, etc.
SHELL

Adım 2:IronPDF Yükleme

# Add IronPDF(secure, modern alternative)
dotnet add package IronPdf
SHELL

3. Adım: Namespace'leri Güncelleme

wkhtmltopdf ad alanlarınıIronPDF ad alanı ile değiştirin:

// Before (wkhtmltopdf)
using Haukcode.WkHtmlToPdfDotNet;
using Haukcode.WkHtmlToPdfDotNet.Contracts;

// After (IronPDF)
using IronPdf;

Adım 4: Lisansı Başlat

Uygulama başlangıcında lisans başlatmayı ekleyin:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Kod Göç Örnekleri

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

En temel işlem, bu .NET PDF yaklaşımları arasındaki karmaşıklık farkını ortaya çıkarır.

wkhtmltopdf Yaklaşımı:

// NuGet: Install-Package Haukcode.WkHtmlToPdfDotNet
using Haukcode.WkHtmlToPdfDotNet;
using Haukcode.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);
    }
}

IronPDF Yaklaşımı:

// 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");
    }
}

wkhtmltopdf, SynchronizedConverter oluşturmak için PdfTools gerektirir, GlobalSettings ve Objects kullanarak bir HtmlToPdfDocument inşa eder, ColorMode, Orientation ve PaperSize gibi özellikleri ayarlamayı, converter.Convert() çağrısı yapılarak ham baytları almayı ve File.WriteAllBytes() ile bir dosyaya elle yazmayı gerektirir.

IronPDF bu işlemi tamamen ortadan kaldırıyor—bir ChromePdfRenderer oluşturun, RenderHtmlAsPdf() çağırın ve yerleşik SaveAs() metodunu kullanın.

İleri düzey HTML-to-PDF senaryoları için HTML'den PDF'ye dönüşüm rehberine bakın.

URL'leri PDF'ye Dönüştürme

URL'den PDF'ye dönüştürmede benzer karmaşıklık modelleri gösterir.

wkhtmltopdf Yaklaşımı:

// NuGet: Install-Package Haukcode.WkHtmlToPdfDotNet
using Haukcode.WkHtmlToPdfDotNet;
using Haukcode.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);
    }
}

IronPDF Yaklaşımı:

// 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");
    }
}

wkhtmltopdf, URL belirtmek için Page özelliğini ObjectSettings içinde kullanır, aynı belge oluşturma modelini gerektirir. IronPDF, amacı açıkça ifade eden özel bir RenderUrlAsPdf() metodu sağlar.

Kimlik doğrulama ve özel başlık seçenekleri için URL'den PDF'ye dokümantasyonu inceleyin.

Özel Ayarlar: Sayfa Yapılandırması ile HTML Dosyaları

Yönlendirme, kenar boşlukları ve kağıt boyutu yapılandırması farklı yaklaşımlar gerektirir.

wkhtmltopdf Yaklaşımı:

// NuGet: Install-Package Haukcode.WkHtmlToPdfDotNet
using Haukcode.WkHtmlToPdfDotNet;
using Haukcode.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);
    }
}

IronPDF Yaklaşımı:

// 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");
    }
}

wkhtmltopdf, ayarları GlobalSettings ve Objects içine yerleştirir, MarginSettings ise ayrı bir nesne olarak bırakılır. IronPDF, PaperOrientation, MarginTop ve PaperSize gibi adları net olan doğrudan RenderingOptions özelliklerini sağlar.

wkhtmltopdf API'den IronPDF Haritalama Referansı

Bu eşleştirme, doğrudan API eşdeğerlerini göstererek geçişi hızlandırır:

CLI'den IronPDF Haritalama

wkhtmltopdf CLI SeçeneğiIronPDF Eşdeğeri
wkhtmltopdf input.html output.pdfrenderer.RenderHtmlFileAsPdf()
wkhtmltopdf URL output.pdfrenderer.RenderUrlAsPdf()
--page-size A4RenderingOptions.PaperSize = PdfPaperSize.A4
--page-size LetterRenderingOptions.PaperSize = PdfPaperSize.Letter
--orientation LandscapeRenderingOptions.PaperOrientation = Landscape
--margin-top 10mmRenderingOptions.MarginTop = 10
--margin-bottom 10mmRenderingOptions.MarginBottom = 10
--margin-left 10mmRenderingOptions.MarginLeft = 10
--margin-right 10mmRenderingOptions.MarginRight = 10
--header-html header.htmlRenderingOptions.HtmlHeader
--footer-center "[page]"{page} yer tutucu
--footer-center "[toPage]"{total-pages} yer tutucu
--enable-javascriptVarsayılan olarak etkin
--javascript-delay 500RenderingOptions.WaitFor.RenderDelay = 500
--dpi 300RenderingOptions.Dpi = 300
--grayscaleRenderingOptions.GrayScale = true

C# Sarmalayıcı API Haritalaması

wkhtmltopdf SarmalayıcıIronPDF
SynchronizedConverterChromePdfRenderer
HtmlToPdfDocumentRenderingOptions
GlobalSettings.Outpdf.SaveAs()
GlobalSettings.PaperSizeRenderingOptions.PaperSize
GlobalSettings.OrientationRenderingOptions.PaperOrientation
GlobalSettings.MarginsRenderingOptions.Margin*
ObjectSettings.PageRenderHtmlFileAsPdf()
ObjectSettings.HtmlContentRenderHtmlAsPdf()
converter.Convert(doc)renderer.RenderHtmlAsPdf()

Yer Tutucu Sözdizimi Geçişi

wkhtmltopdf Yer TutucuIronPDF Yer Tutucu
[page]{page}
[toPage]{total-pages}
[date]{date}
[time]{time}
[title]{html-title}
[url]{url}

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: Başlık/Dipnot Yer Tutucu Söz Dizimi

wkhtmltopdf: [page] ve [toPage] gibi köşeli parantez sözdizimini kullanır.

Çözüm: IronPDF'in süslü parantez yer tutucularına güncelleyin:

// Before (wkhtmltopdf)
FooterSettings = { Left = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

Sorun 2: JavaScript Gecikme Yapılandırması

wkhtmltopdf: Sınırlı güvenilirlikle JavaScriptDelay özelliğini kullanır.

**Çözüm:**IronPDF birden fazla seçenek sunar:

renderer.RenderingOptions.EnableJavaScript = true;

// Option 1: Fixed delay
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Option 2: Wait for specific element (more reliable)
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

// Option 3: Wait for JavaScript condition
renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true");

Sorun 3: Modern CSS Render Edilmiyor

Belirti: CSS Grid ve Flexbox düzenleri wkhtmltopdf'te yanlış render ediliyor.

Çözüm: IronPDF'in Chromium motoru modern CSS'yi doğru şekilde işler:

// This CSS now works with IronPDF
var html = @"
<style>
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
    .flex { display: flex; justify-content: space-between; align-items: center; }
</style>
<div class='grid'>
    <div>Column 1</div>
    <div>Column 2</div>
    <div>Column 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);

Sorun 4: Senkron ve Asenkron Render

wkhtmltopdf: Sarmalayıcılar senkron çalışır ve iş parçacıklarını engeller.

**Çözüm:**IronPDF asenkron render destekler:

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}

wkhtmltopdf Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Kod tabanınızı denetleyerek tüm wkhtmltopdf kullanımlarını belirleyin:

# Find all wkhtmltopdf references
grep -r "Haukcode.WkHtmlToPdfDotNet\|WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa\|NReco.PdfGenerator" --include="*.cs" .
grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" .
SHELL

Kaldırmak için wkhtmltopdf ikili dosyalarını bulun ve belgeleyin. Mevcut ayarları (kağıt boyutu, kenar boşlukları, başlıklar/dipnotlar) belgeleyin.

Kod Güncelleme Görevleri

  1. Tüm wkhtmltopdf sarmalayıcı NuGet paketlerini kaldırın
  2. wkhtmltopdf ikili dosyalarını kaldırın (wkhtmltopdf.exe, wkhtmltox.dll) 3.IronPDF NuGet paketini yükleyin
  3. Namespace dosya eklemelerini Haukcode.WkHtmlToPdfDotNet (veya kullandığınız sarmalayıcı) ile IronPdf olarak güncelleyin.
  4. SynchronizedConverter öğesini ChromePdfRenderer ile değiştirin.
  5. HtmlToPdfDocument desenlerini doğrudan işleme metodlarına dönüştürün.
  6. GlobalSettings yapılandırmalarını RenderingOptions olarak güncelleyin.
  7. Kenar boşluğu yapılandırmalarını MarginSettings'tan bireysel özelliklere dönüştürün.
  8. Yer tutucu yapısını güncelleyin ([page]{page}, [toPage]{total-pages}).
  9. Başlangıçta IronPDF lisans başlatma ekleyin

Geçiş Sonrası Testler

Geçiş sonrasında bu yönleri doğrulayın:

  • PDF çıktısının görsel karşılaştırması (modern CSS desteği ile gelişmeli)
  • Modern CSS render'ını doğrulayın (CSS Grid ve Flexbox artık çalışıyor)
  • JavaScript ağırlıklı sayfaları test edin
  • Wkhtmltopdf ikili dosyalarının kalmadığını doğrulamak için güvenlik taraması yapın
  • Performans karşılaştırması için yük testi

Güvenlik Doğrulaması

# Scan for any remaining wkhtmltopdf artifacts
find /var/www/ -name "*wkhtmlto*" 2>/dev/null
find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null
docker images | grep wkhtmltopdf

# Check if any process is still using it
ps aux | grep wkhtmltopdf
SHELL

IronPDF'e Geçmenin Temel Faydaları

Wkhtmltopdf'den IronPDF'e geçişin sağladığı birkaç önemli avantaj bulunmaktadır:

Güvenlik: CVE-2022-35583 ve tüm wkhtmltopdf güvenlik açıkları ortadan kaldırıldı. IronPDF, bilinen bir CVE'ye sahip değildir ve düzenli güvenlik güncellemeleri alır.

Modern Rendering Motoru: IronPDF, güncel Chromium motorunu kullanır ve tam CSS3, CSS Grid, Flexbox ve ES6+ JavaScript desteği sağlar. Modern framework'ler doğru bir şekilde render edilir.

Basitleştirilmiş API: Direkt render metotlar, belge oluşturma kalıplarının yerine geçer. Yerleşik SaveAs() metotları, manuel bayt işlemlerini ortadan kaldırıyor.

Genişletilmiş Yetiler: PDF manipülasyonu, dijital imzalar, PDF/A uyumu, filigranlar ve birleştirme/bölme işlemleri, wkhtmltopdf'in sağlayamadığı dahili özelliklerdir.

Aktif Geliştirme: IronPDF'nin düzenli güncellemeleri, mevcut .NET sürümlerini takip eder, bu sayede modern .NET ve C# dil sürümleri gönderildiği gibi desteklenir.

Async Desteği: Yüksek yüklü web uygulamalarında native async/await desteğiyle thread kilitlenmesini önler.

Lütfen dikkate alın: DinkToPdf, NReco, Rotativa, TuesPechkin, ve wkhtmltopdf, ilgili sahiplerinin tescilli ticari markalarıdır. Bu site DinkToPdf, NReco, Rotativa, TuesPechkin veya wkhtmltopdf ile bağlantılı, onaylanmış veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.
Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez