IRONSOFTWAREHOME
VIDEOLAR

C# Kullanarak DOCX'i PDF'e Dönüştürmek

Curtis Chau
Curtis Chau
Updated: 18 Mayıs 2026

Haukcode.DinkToPdf, .NET uygulamaları için HTML'yi PDF'ye dönüştürmek amacıyla wkhtmltopdf ikili dosyasını saran ve bir zamanlar popüler olan DinkToPdf kütüphanesinin topluluk çatallamasıdır. Fork daha sonra Haukcode.WkHtmlToPdfDotNet olarak yeniden adlandırıldı ve en son yayın olan 1.5.95, 22 Ekim 2024'te LGPL-3.0-veya-daha-sonrası altında yayımlandı. Fork, orijinal DinkToPdf (1.0.8, 18 Nisan 2017) terk edildikten sonra NuGet üzerinde paketi canlı tutsa da, yine de ebeveyni ile aynı arşivlenmiş wkhtmltopdf ikili dosyasına bağlıdır. wkhtmltopdf/wkhtmltopdf deposu 2 Ocak 2023'te arşivlendi ve tüm wkhtmltopdf GitHub organizasyonu 10 Temmuz 2024'te arşivlendi, bu yüzden upstream sorunlar yamalanmayacak.

Bu kılavuz, .NET geliştiricileri için arşivlenmiş wkhtmltopdf ikili dosyasını kullanmayı bırakmayı düşünenler için Haukcode.DinkToPdf / Haukcode.WkHtmlToPdfDotNet'den IronPDF'e geçiş yolunu, adım adım talimatlar, kod karşılaştırmaları ve pratik örnekler içerir.

Güvenlik Danışmanlığı: CVE-2022-35583

Haukcode.DinkToPdf, üst akar wkhtmltopdf ikili dosyasına karşı yükseltilmiş bir güvenlik danışmanlığını devralır:

CVE-2022-35583 — wkhtmltopdf 0.12.6'ya karşı SSRF danışmanlığı

wkhtmltopdf 0.12.6'ya karşı bir Sunucu Tarafı İstek Köleliği danışmanlığı yayımlandı (NVD'de CVSS 9.8; üzerinde dikkat çeken wkhtmltopdf proje upstream'i bunu bir kütüphane hatası yerine uygulama tarafı giriş temizleme sorunu olarak görüyor). Her halükarda, yamalanacak — upstream arşivlendi. Halk tartışmasında işaret edilen tipik maruz kalma desenleri şunları içerir:

  • Saldırı Vektörü: Güvenilmeyen HTML içeriği, dönüştürme sırasında iç kaynakları almak için işleyicinin zorlandığı hususlara neden olabilir
  • AWS Metadata: http://169.254.169.254 istekleri, eğer renderer EC2 üzerinde çalışıyorsa örnek metadata döndürebilir
  • İç Ağ Erişimi: İç hizmetler, işleme sunucusundan erişilebilir olabilir
  • Local File Inclusion: file:// protokolü ile yerel dosyalar okunabilir olabilir

Yukarı akış yaması beklenmiyor — wkhtmltopdf deposu 2 Ocak 2023'te arşivlendi ve son sürüm (0.12.6) Haziran 2020'deydi.

##IronPDF vs Haukcode.DinkToPdf: Özellik Karşılaştırması

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

AspektHaukcode.DinkToPdfIronPDF
Motor Tabanıwkhtmltopdf (QtWebKit çatallaması, yaklaşık 2015)Modern Krom
Güvenlik DurumuCVE-2022-35583 danışmanlığı (yamalanmamış / tartışmalı upstream)Bilinen kritik CVE yoktur
Proje DurumuTopluluk forku; üst düzey wkhtmltopdf arşivlendiAktif olarak sürdürülüyor
HTML5/CSS3Modern Flexbox/Grid yokTam CSS3
JavaScriptSınırlı, tutarsızTam destek
Yerel İkili Dosyalarlibwkhtmltox.dll/.so/.dylib platform başınaYönetilen NuGet paketi
İş Parçacığı GüvenliğiSynchronizedConverter çağrıları serileştirirTasarımı gereği iş parçacığı güvenli
DestekToplulukProfesyonel destek
GüncellemelerSon sürüm çatalı 1.5.95 (22 Ekim 2024); üst düzey wkhtmltopdf 0.12.6 (Haziran 2020)Düzenli sürümler
LisansLGPL-3.0-veya-daha sonra (çatal) / MIT (orijinal DinkToPdf)Ücretli deneme ile ticari

Hızlı Başlangıç: Haukcode.DinkToPdf'ten IronPDF'e Geçiş

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

Adım 1: DinkToPdf ve Yerel Dosyaları Kaldır

Haukcode.DinkToPdf NuGet paketlerini kaldırın:

# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
SHELL

Projenizden yerel dosyaları silin:

  • libwkhtmltox.dll (Windows)
  • libwkhtmltox.so (Linux)
  • libwkhtmltox.dylib (macOS)

Adım 2:IronPDF Yükleme

# Install IronPDF
dotnet add package IronPdf
SHELL

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

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

// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions

Adım 4: Lisansı Başlat

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

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

Kod Göç Örnekleri

Temel HTML'den PDF'ye Dönüştürme

En temel işlem, bu .NET PDF kütüphaneleri arasındaki karmaşıklık farkını ortaya koymaktadır.

Haukcode.DinkToPdf Yaklaşımı:

// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.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 = "<html><body><h1>Hello World</h1></body></html>",
                }
            }
        };
        
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}

IronPDF Yaklaşımı:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        
        pdf.SaveAs("output.pdf");
    }
}

Haukcode.DinkToPdf, PdfTools ile bir SynchronizedConverter oluşturmayı, iç içe GlobalSettings ve Objects ile bir HtmlToPdfDocument oluşturmayı, HtmlContent ile bir ObjectSettings eklemeyi, ham byte almak için converter.Convert() çağrısı yapmayı ve elle bir dosyaya File.WriteAllBytes() ile yazmayı gerektirir.

IronPDF bunu üç satıra indirger: bir ChromePdfRenderer oluştur, RenderHtmlAsPdf() çağrısı yap ve yerleşik SaveAs() metodunu kullan.

İ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ürme, benzer model farklılıkları gösterir.

Haukcode.DinkToPdf Yaklaşımı:

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

Haukcode.DinkToPdf, URL'ler için ObjectSettings.Page ile aynı belge oluşturma desenini kullanır. IronPDF, niyeti net bir şekilde 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 Sayfa Ayarları

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

Haukcode.DinkToPdf Yaklaşımı:

// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.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.Letter,
                Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
            },
            Objects = {
                new ObjectSettings() {
                    HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
                }
            }
        };
        
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("landscape.pdf", pdf);
    }
}

IronPDF Yaklaşımı:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
        
        pdf.SaveAs("landscape.pdf");
    }
}

Haukcode.DinkToPdf, ayarları ayrı bir MarginSettings nesnesi ile GlobalSettings içinde iç içe yerleştirir. IronPDF, PaperSize, PaperOrientation ve bireysel kenar boşluğu özellikleri gibi net isimlere sahip doğrudan RenderingOptions özellikleri sunar.

Haukcode.DinkToPdf API'den IronPDF'e Eşleme Referansı

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

Dönüştürücü Sınıf Eşleme

Haukcode.DinkToPdfIronPDF
SynchronizedConverterChromePdfRenderer
BasicConverterChromePdfRenderer
PdfToolsYok
IConverterYok

Belge Yapılandırma Eşleme

Haukcode.DinkToPdfIronPDF
HtmlToPdfDocumentYöntem çağrısı
GlobalSettingsRenderingOptions
ObjectSettingsRenderingOptions
converter.Convert(doc)renderer.RenderHtmlAsPdf(html)

GlobalSettings Özellik Eşleme

GlobalSettings ÖzellikIronPDF Özelliği
ColorModeRenderingOptions.GrayScale
OrientationRenderingOptions.PaperOrientation
PaperSizeRenderingOptions.PaperSize
Margins.TopRenderingOptions.MarginTop
Margins.BottomRenderingOptions.MarginBottom
Margins.LeftRenderingOptions.MarginLeft
Margins.RightRenderingOptions.MarginRight

ObjectSettings Özellik Eşleme

ObjectSettings ÖzellikIronPDF Eşdeğeri
HtmlContentİlk parametre RenderHtmlAsPdf()
Page (URL)renderer.RenderUrlAsPdf(url)
HeaderSettings.Right = "[page]"{page} HtmlHeader.HtmlFragment içinde

Yer Tutucu Sözdizimi Geçişi

Haukcode.DinkToPdfIronPDF
[page]{page}
[toPage]{total-pages}
[date]{date}

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

Sorun 1: Singleton Gereksinimi

Haukcode.DinkToPdf: Yerel wkhtmltopdf ikili dosyası ile iplik güvenliği sorunları nedeniyle tek başına bir SynchronizedConverter gerektirir.

Çözüm: IronPDF'in ChromePdfRenderer'i tasarım gereği iplik güvenlidir—tek başına bir nesne gerektirmez:

// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));

// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!

Sorun 2: Yerel Dosya Bağımlılıkları

Haukcode.DinkToPdf: Platforma özgü yerel kütüphaneleri (libwkhtmltox.dll/so/dylib) gerektirir.

Çözüm: IronPDF, yerel dosya bağımlılıkları olmadan kendi kendine yeten bir yapıdır. Geçiş sonrası bu dosyaları silin:

  • libwkhtmltox.dll (Windows)
  • libwkhtmltox.so (Linux)
  • libwkhtmltox.dylib (macOS)

Sorun 3: Dönüş Türü Farklılıkları

Haukcode.DinkToPdf: converter.Convert() doğrudan byte[] döndürür.

Çözüm: IronPDF, birden fazla çıktı seçeneği sunan bir PdfDocument nesnesi döndürür:

var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData;  // Get bytes
pdf.SaveAs("output.pdf");       // Or save directly

Sorun 4: Başlık/Altbilgi Yer Tutucu Sözdizimi

Haukcode.DinkToPdf: [page] ve [toPage] gibi köşeli parantez sözdizimi kullanır.

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

// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
};

Haukcode.DinkToPdf Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Kod tabanınızı DinkToPdf kullanımını belirlemek için denetleyin:

# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .

# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .

# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .

# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
SHELL

Mevcut GlobalSettings ve ObjectSettings yapılandırmalarını belgeleyin. Kaldırılabilecek herhangi bir yerel kütüphane yükleme kodunu tespit edin.

Kod Güncelleme Görevleri

  1. DinkToPdf NuGet paketlerini kaldırın 2.IronPDF NuGet paketini yükleyin
  2. Namespace eklemelerini DinkToPdf'dan IronPdf'ya güncelle
  3. SynchronizedConverter'yi ChromePdfRenderer ile değiştirin
  4. HtmlToPdfDocument desenlerini doğrudan metod çağrılarına dönüştürün
  5. GlobalSettings'yi RenderingOptions'ya dönüştürün
  6. ObjectSettings'yi RenderingOptions'ya dönüştürün
  7. Yer tutucu sözdizimini güncelle ([page]{page}, [toPage]{total-pages}) 9.IronPDF lisans başlatmasını başlatma sırasında ekleyin

Altyapı Temizlik Görevleri

  1. Yerel dosyaları silin (libwkhtmltox.*)
  2. Yerel kütüphane yükleme kodunu kaldırın
  3. ÖzelleştirilmişAssemblyLoadContext'i kaldırın, eğer mevcutsa
  4. Bağımlılık Enjeksiyonunu güncelleyin (tekil artık gerekmez)
  5. Yerel dosyalar için platform algılama kodunu kaldırın

Geçiş Sonrası Testler

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

  • HTML'den PDF'e dönüştürmeyi test edin
  • URL'den PDF'e dönüştürmeyi test edin
  • Sayfa ayarlarını doğrulayın (boyut, yönlendirme, kenar boşlukları)
  • Yer tutucularla birlikte başlıkları ve altbilgileri doğrulayın
  • Gerçek HTML şablonlarıyla test yapın
  • Yük altında performans testi yapın

IronPDF'e Geçmenin Temel Faydaları

Haukcode.DinkToPdf'den IronPDF'e geçiş, birkaç kritik avantaj sağlar:

Güvenlik: Asla yamalanmayacak CVE-2022-35583 (SSRF) ve diğer wkhtmltopdf güvenlik açıklarını ortadan kaldırır.

Modern Rendering Motoru: 2015'ten kalma bırakılmış Qt WebKit yerine aktif olarak güncellenen Chromium'u kullanır. Tam HTML5, CSS3 ve JavaScript desteği.

Yerel Dosya Yok: Yönetilecek platforma özgü DLL'ler olmadan kendi kendine yeten bir kütüphane. Windows, Linux ve macOS genelinde dağıtımı kolaylaştırır.

İplik Güvenliği: Tek başına nesne gereksinimi yok—herhangi bir modelde, istek başına örneklenmeyi de içeren, ChromePdfRenderer'u özgürce kullanın.

Basit API: Karmaşık belge nesnesi oluşturma yerine doğrudan metod çağrıları (RenderHtmlAsPdf(), RenderUrlAsPdf()).

Aktif Geliştirme: IronPDF'nin düzenli sürüm sıklığı, .NET Framework 4.6.2+, .NET Core 3.1+ ve .NET 5/6/7/8/9/10 dahil olmak üzere mevcut .NET sürümleriyle uyumlu tutar.

Lütfen dikkate alın: DinkToPdf, Haukcode.DinkToPdf, Haukcode.WkHtmlToPdfDotNet ve wkhtmltopdf kendi sahiplerinin ticari markaları veya ürün adlarıdır. Bu site, bu projelerden herhangi biri ile ilişkili değildir, onaylanmamıştır veya sponsoru 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