IRONSOFTWAREHOME
VIDEOLAR

C# Kullanarak RTF Nasıl PDF'ye Dönüştürülür

Curtis Chau
Curtis Chau
Updated: 19 Temmuz 2026

Neden NReco PDF Generator'dan IronPDF'e Geçiş Yapılmalı

NReco PDF Generatorile Kritik Güvenlik Sorunları

NReco PDF Üretici, wkhtmltopdf ikili dosyasını sarar ve bilinen güvenlik açıklarını miras alır. Wkhtmltopdf projesinin son kararlı sürümü 0.12.6 (Haziran 2020) idi ve yukarı akış deposu 2 Ocak 2023'te arşivlendi, bu yüzden yama gelmeyecek:

  • CVE-2020-21365: Zanaatkar HTML (aynı kaynak politika zayıflığı) ile yaşanan dizin geçişi / yerel dosya okuma
  • CVE-2022-35583: Sunucu tarafı istek sahtekarlığı (SSRF) 0.12.6 sürümünde enjekte edilen <iframe> aracılığıyla (CVSS 9.8)

Ek NReco PDF GeneratorSınırlamaları

  1. Licensing friction at scale: Non-SaaS tek sunucu üretim dağıtımları için ücretsiz; SaaS, çoklu sunucu veya dağıtım senaryoları nrecosite.com'dan $199 enterprise kaynak-kodu paketi gerektirir.

  2. Eski Renderleme Motoru: WebKit Qt (yaklaşık 2012) sınırlı CSS3/JS desteği ile:

    • CSS Izgarası veya Flexbox yok
    • ModernJavaScript(ES6+) yok
    • Zayıf web fontu desteği
    • CSS değişkenleri veya özel özellikler yok
  3. Harici İkili Bağımlılık: Her platform için wkhtmltopdf ikililerini yönetmeyi gerektirir (wkhtmltopdf.exe, wkhtmltox.dll).

  4. Bakım duraksaması: NReco.PdfGenerator 1.2.1, 8 Ocak 2023'te yayınlandı ve nuget.org üzerinde başka sürüm yayımlanmadı; temel wkhtmltopdf motoru artık güncellenmiyor.

  5. Sınırlı Async Desteği: Eşzamanlı API, web uygulamalarında thread'leri engeller.

NReco PDF Generatorve IronPDF Karşılaştırması

AspektNReco PDF GeneratorIronPDF
Oluşturma MotoruWebKit Qt (2012)Chromium (güncel)
GüvenlikBirden fazla yamalanmamış CVE (örneğin, CVE-2020-21365, CVE-2022-35583); motor 2 Ocak 2023'te arşivlendiAktif güvenlik güncellemeleri
CSS DesteğiCSS2.1, sınırlı CSS3Tam CSS3, Grid, Flexbox
JavaScriptTemel ES5Tam ES6+, async/await
BağımlılıklarHarici wkhtmltopdf ikiliKendi içinde tamamlanmış
Asenkron DestekYalnızca senkronizeTam async/await
Web Yazı TipleriSınırlıTam Google Yazı Tipleri, @font-face
LisanslamaNon-SaaS tek sunucu için ücretsiz; SaaS / çoklu sunucu için $199 enterprise paketiŞeffaf ticari fiyatlandırma
Ücretsiz KatmanNon-SaaS tek sunucu lisans altında ücretsizDeneme filigran gerektirmez

Başlamadan Önce

Ön Koşullar

  1. .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Erişimi: NuGet paketlerini yükleyebilme
  3. IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin

NuGet Paket Değişiklikleri

# Remove NReco.PdfGenerator
dotnet remove package NReco.PdfGenerator

# Install IronPDF
dotnet add package IronPdf
SHELL

Ayrıca wkhtmltopdf ikili dosyalarını dağıtımınızdan kaldırın:

  • Projeden wkhtmltopdf.exe, wkhtmltox.dll silin
  • Wkhtmltopdf kurulum betiklerini kaldırın
  • Platforma özgü ikili klasörleri silin

Lisans Yapılandırması

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

NReco PDF GeneratorKullanımını Tanımla

# Find all NReco.PdfGenerator references
grep -r "NReco.PdfGenerator\|HtmlToPdfConverter\|GeneratePdf" --include="*.cs" .
SHELL

Tam API Referansı

Çekirdek Sınıf Eşlemeleri

NReco PDF GeneratorIronPDF
HtmlToPdfConverterChromePdfRenderer
PageMarginsBireysel kenar boşluğu özellikleri
PageOrientationPdfPaperOrientation
PageSizePdfPaperSize

İşleme Yöntemi Eşlemeleri

NReco PDF GeneratorIronPDF
GeneratePdf(html)RenderHtmlAsPdf(html)
GeneratePdfFromFile(url, output)RenderUrlAsPdf(url)
GeneratePdfFromFile(htmlPath, output)RenderHtmlFileAsPdf(path)
(asenkron desteklenmiyor)RenderHtmlAsPdfAsync(html)
(asenkron desteklenmiyor)RenderUrlAsPdfAsync(url)

Sayfa Yapılandırma Eşlemeleri

NReco PDF GeneratorIronPDF
PageWidth = 210RenderingOptions.PaperSize = PdfPaperSize.A4
PageHeight = 297RenderingOptions.SetCustomPaperSizeinMilimeters(w, h)
Orientation = PageOrientation.LandscapeRenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
Size = PageSize.A4RenderingOptions.PaperSize = PdfPaperSize.A4

Kenar Boşlukları Eşlemeleri

NReco PDF GeneratorIronPDF
Margins.Top = 10RenderingOptions.MarginTop = 10
Margins.Bottom = 10RenderingOptions.MarginBottom = 10
Margins.Left = 10RenderingOptions.MarginLeft = 10
Margins.Right = 10RenderingOptions.MarginRight = 10
new PageMargins { ... }Bireysel özellikler

Başlık/Altbilgi Yer Tutucu Eşlemeleri

NReco PDF Generator(wkhtmltopdf)IronPDF
[page]{page}
[topage]{total-pages}
[date]{date}
[time]{time}
[title]{html-title}

Çıkış İşleme Eşlemeleri

NReco PDF GeneratorIronPDF
byte[] pdfBytes = GeneratePdf(html)PdfDocument pdf = RenderHtmlAsPdf(html)
File.WriteAllBytes(path, bytes)pdf.SaveAs(path)
return pdfBytesreturn pdf.BinaryData
new MemoryStream(pdfBytes)new MemoryStream(pdf.BinaryData)

Kod Göç Örnekleri

Örnek 1: Temel HTML'den PDF'ye

Öncesi (NReco PDF Generator):

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}

Sonrası (IronPDF):

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

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

Temel fark, dönen tür ve kaydetme desenindedir. NReco PDF Generator'ın HtmlToPdfConverter.GeneratePdf() döner, bunu File.WriteAllBytes() kullanarak diske elle yazmalısınız. IronPDF'in ChromePdfRenderer.RenderHtmlAsPdf() yöntemi, yerleşik SaveAs() yöntemi olan bir PdfDocument nesnesi döner.

Bu nesne odaklı yaklaşım, ek avantajlar sağlar: kaydetmeden önce PDF'yi (filigranlar ekle, belgeleri birleştir, güvenlik ekle) manipüle edebilirsiniz. Mevcut kodla uyumluluk için ham baytlara ihtiyacınız varsa, pdf.BinaryData yöntemini kullanın. HTML'den PDF'ye belgelemeyi ek işleme seçenekleri için inceleyin.

Örnek 2: Kenar Boşlukları ile Özel Sayfa Boyutu

Öncesi (NReco PDF Generator):

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        htmlToPdf.PageWidth = 210;
        htmlToPdf.PageHeight = 297;
        htmlToPdf.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("custom-size.pdf", pdfBytes);
    }
}

Sonrası (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("custom-size.pdf");
    }
}

NReco PDF Generator, sayısal boyutlar (PageWidth = 210, PageHeight = 297) ve bir PageMargins nesnesi kullanır. IronPDF, PdfPaperSize enumunu (A4, Letter, Legal gibi standart boyutları içerir) ve RenderingOptions nesnesindeki bireysel kenar boşluğu özelliklerini kullanır.

Ana geçiş değişiklikleri:

  • PageHeightRenderingOptions.PaperSize = PdfPaperSize.A4
  • new PageMargins { Top = 10, ... }→ Individual properties: RenderingOptions.MarginTop = 10

Enumda kapsamayan özel kağıt boyutları için RenderingOptions.SetCustomPaperSizeinMilimeters(width, height) yöntemini kullanın. sayfa yapılandırma seçenekleri hakkında daha fazla bilgi edinin.

Örnek 3: URL'den PDF'ye Dönüştürme

Öncesi (NReco PDF Generator):

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var pdfBytes = htmlToPdf.GeneratePdfFromFile("https://www.example.com", null);
        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

NReco PDF Generator, hem yerel dosyalar hem de URL'ler için belirsiz bir şekilde adlandırılmış GeneratePdfFromFile() yöntemini kullanır, ikinci parametre boş değerlendirilebilir. IronPDF, URL'ler için RenderUrlAsPdf() ve yerel HTML dosyaları için RenderHtmlFileAsPdf() adanmış yöntemler sağlar.

IronPDF yaklaşımı daha temiz ve daha sezgiseldir. Asenkron web uygulamaları için, iş parçacıklarının engellenmesini önlemek için await renderer.RenderUrlAsPdfAsync(url) kullanın—bu, NReco PDF Generator'un yapamadığı bir şeydir.


Kritik Taşıma Notları

Yakınlaştırma Değeri Dönüşümü

NReco PDF Generator, float değerlerini (0.0-2.0) kullanırken,IronPDF yüzde tam sayılarını kullanır:

// NReco PDF Generator: Zoom = 0.9f (90%)
// IronPDF: Zoom = 90

// Conversion formula:
int ironPdfZoom = (int)(nrecoZoom * 100);

Yer Tutucu Söz Dizimi Güncellemesi

Tüm başlık/altbilgi yer tutucuları güncellenmelidir:

NReco PDF GeneratorIronPDF
[page]{page}
[topage]{total-pages}
[date]{date}
[title]{html-title}
// NReco PDF Generator:
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF:
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};

Dönüş Türü Değişikliği

NReco PDF Generator doğrudan byte[] döner;IronPDFPdfDocument döner:

// NReco PDF Generatorpattern:
byte[] pdfBytes = converter.GeneratePdf(html);
File.WriteAllBytes("output.pdf", pdfBytes);

//IronPDF pattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;

Thread Güvenliği ve Geri Kullanılabilirlik

NReco PDF Generator genellikle çağrı başına yeni bir dönüştürücü oluşturur. IronPDF'in ChromePdfRenderer sınıfı iplik güvenlidir ve tekrar kullanılabilir:

// NReco PDF Generatorpattern (creates new each time):
public byte[] Generate(string html)
{
    var converter = new HtmlToPdfConverter();
    return converter.GeneratePdf(html);
}

//IronPDF pattern (reuse renderer, thread-safe):
private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] Generate(string html)
{
    return _renderer.RenderHtmlAsPdf(html).BinaryData;
}

Asenkron Destek (Yeni Kapasite)

IronPDF, NReco PDF Generator'ın sunamayacağı async/await desenlerini destekler:

// NReco PDF Generator: No async support available

// IronPDF: Full async support
public async Task<byte[]> GenerateAsync(string html)
{
    var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}

Hata Ayıklama

Sorun 1: HtmlToPdfConverter Bulunamadı

Sorun: IronPDF'de HtmlToPdfConverter sınıfı mevcut değil.

Çözüm: ChromePdfRenderer kullanın:

// NReco PDF Generator
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();

Sorun 2: GeneratePdf Yanlış Tür Döndürüyor

Sorun: Kod byte[] bekliyor ancak PdfDocument alıyor.

Çözüm: .BinaryData özelliğine erişin:

// NReco PDF Generator
byte[] pdfBytes = converter.GeneratePdf(html);

// IronPDF
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;

Sorun 3: PageMargins Nesnesi Bulunamadı

Sorun: IronPDF'de PageMargins sınıfı mevcut değil.

Çözüm: Bireysel kenar boşluğu özelliklerini kullanın:

// NReco PDF Generator
converter.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };

// IronPDF
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;

Sorun 4: Sayfa Numaraları Görünmüyor

Sorun: [page] ve [topage] yer tutucular çalışmıyor.

**Çözüm:**IronPDF yer tutucu sözdizimine güncelleyin:

// NReco PDF Generator
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};

Geçiş Kontrol Listesi

Öncesi-Geçiş

  • Kod tabanındaki tüm NReco.PdfGenerator kullanımlarını envanterleyin
  • Tüm CustomWkHtmlArgs ve CustomWkHtmlPageArgs değerlerini belgeleyin
  • Yer tutucularla tüm başlık/altbilgi HTML şablonlarını listeleyin
  • Asenkron gereksinimleri belirleyin (web denetleyicileri, hizmetler)
  • Yakınlaştırma ve kenar boşluğu ayarlarını gözden geçirin
  • Kıyaslama için mevcut PDF çıktılarının yedeğini alın -IronPDF lisans anahtarını edinin

Paket Değişiklikleri

  • NReco.PdfGenerator NuGet paketini kaldırın
  • IronPdf NuGet paketini yükleyin: dotnet add package IronPdf
  • Namespace içe aktarmalarını using NReco.PdfGenerator;'dan using IronPdf;'ye güncelleyin

Kod Değişiklikleri

Başlangıçta lisans anahtarı yapılandırmasını ekleyin

  • HtmlToPdfConverter ile ChromePdfRenderer değiştirin
  • GeneratePdf(html) ile RenderHtmlAsPdf(html) değiştirin
  • GeneratePdfFromFile(url, null) ile RenderUrlAsPdf(url) değiştirin
  • PageMargins nesnesini bireysel kenar boşluğu özelliklerine dönüştürün
  • Yakınlaştırma değerlerini ondalık sayılardan yüzdelik değerlere güncelleyin
  • Yer tutucu sözdizimini güncelleyin: [page]{page}, [topage]{total-pages}
  • File.WriteAllBytes() ile pdf.SaveAs() değiştirin
  • Eşleme çağrılarını faydalı olduğunda asenkrona dönüştürün

Geçiş Sonrası

  • Projekten/deploydan wkhtmltopdf ikili dosyalarını kaldırın
  • Wkhtmltopdf kurulumu kaldırmak için Docker dosyalarını güncelleyin
  • PDF çıkışını karşılaştırmak için regresyon testlerini çalıştırın
  • Başlık/altbilgi yer tutucularının doğru şekilde işlendiğini doğrulayın
  • Hedef platformların tümünde test yapın (Windows, Linux, macOS)
  • CI/CD hattını wkhtmltopdf adımlarını kaldırmak için güncelleyin
  • CVE kaldırılmasını doğrulamak için güvenlik taramalarını güncelleyin

Lütfen dikkate alın: NReco ve wkhtmltopdf, ilgili sahiplerinin tescilli ticari markalarıdır. Bu site, NReco veya wkhtmltopdf ile ilişkili değil, onları onaylamıyor veya sponsor olmuyor. 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