Altbilgi içeriğine atla
GEçIş KıLAVUZLARı

NReco PDF Generator'dan IronPDF'e C# ile Nasıl Geçilir

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ı

Aspekt NReco PDF Generator IronPDF
Oluşturma Motoru WebKit Qt (2012) Chromium (güncel)
Güvenlik Birden fazla yamalanmamış CVE (örneğin, CVE-2020-21365, CVE-2022-35583); motor 2 Ocak 2023'te arşivlendi Aktif güvenlik güncellemeleri
CSS Desteği CSS2.1, sınırlı CSS3 Tam CSS3, Grid, Flexbox
JavaScript Temel ES5 Tam ES6+, async/await
Bağımlılıklar Harici wkhtmltopdf ikili Kendi içinde tamamlanmış
Asenkron Destek Yalnızca senkronize Tam async/await
Web Yazı Tipleri Sınırlı Tam Google Yazı Tipleri, @font-face
Lisanslama Non-SaaS tek sunucu için ücretsiz; SaaS / çoklu sunucu için $199 enterprise paketi Şeffaf ticari fiyatlandırma
Ücretsiz Katman Non-SaaS tek sunucu lisans altında ücretsiz Deneme 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
# 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";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

NReco PDF GeneratorKullanımını Tanımla

# Find all NReco.PdfGenerator references
grep -r "NReco.PdfGenerator\|HtmlToPdfConverter\|GeneratePdf" --include="*.cs" .
# 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 Generator IronPDF
HtmlToPdfConverter ChromePdfRenderer
PageMargins Bireysel kenar boşluğu özellikleri
PageOrientation PdfPaperOrientation
PageSize PdfPaperSize

İşleme Yöntemi Eşlemeleri

NReco PDF Generator IronPDF
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 Generator IronPDF
PageWidth = 210 RenderingOptions.PaperSize = PdfPaperSize.A4
PageHeight = 297 RenderingOptions.SetCustomPaperSizeinMilimeters(w, h)
Orientation = PageOrientation.Landscape RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
Size = PageSize.A4 RenderingOptions.PaperSize = PdfPaperSize.A4

Kenar Boşlukları Eşlemeleri

NReco PDF Generator IronPDF
Margins.Top = 10 RenderingOptions.MarginTop = 10
Margins.Bottom = 10 RenderingOptions.MarginBottom = 10
Margins.Left = 10 RenderingOptions.MarginLeft = 10
Margins.Right = 10 RenderingOptions.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 Generator IronPDF
byte[] pdfBytes = GeneratePdf(html) PdfDocument pdf = RenderHtmlAsPdf(html)
File.WriteAllBytes(path, bytes) pdf.SaveAs(path)
return pdfBytes return 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);
    }
}
// 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);
    }
}
Imports NReco.PdfGenerator
Imports System.IO

Class Program
    Shared Sub Main()
        Dim htmlToPdf = New HtmlToPdfConverter()
        Dim htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
        Dim pdfBytes = htmlToPdf.GeneratePdf(htmlContent)
        File.WriteAllBytes("output.pdf", pdfBytes)
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System.IO

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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);
    }
}
// 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);
    }
}
Imports NReco.PdfGenerator
Imports System.IO

Class Program
    Shared Sub Main()
        Dim htmlToPdf = New HtmlToPdfConverter()
        htmlToPdf.PageWidth = 210
        htmlToPdf.PageHeight = 297
        htmlToPdf.Margins = New PageMargins With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
        Dim htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>"
        Dim pdfBytes = htmlToPdf.GeneratePdf(htmlContent)
        File.WriteAllBytes("custom-size.pdf", pdfBytes)
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.MarginTop = 10
        renderer.RenderingOptions.MarginBottom = 10
        renderer.RenderingOptions.MarginLeft = 10
        renderer.RenderingOptions.MarginRight = 10
        Dim htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("custom-size.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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);
    }
}
// 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);
    }
}
Imports NReco.PdfGenerator
Imports System.IO

Class Program
    Shared Sub Main()
        Dim htmlToPdf As New HtmlToPdfConverter()
        Dim pdfBytes As Byte() = htmlToPdf.GeneratePdfFromFile("https://www.example.com", Nothing)
        File.WriteAllBytes("webpage.pdf", pdfBytes)
    End Sub
End Class
$vbLabelText   $csharpLabel

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

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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);
// NReco PDF Generator: Zoom = 0.9f (90%)
// IronPDF: Zoom = 90

// Conversion formula:
int ironPdfZoom = (int)(nrecoZoom * 100);
' NReco PDF Generator: Zoom = 0.9F (90%)
' IronPDF: Zoom = 90

' Conversion formula:
Dim ironPdfZoom As Integer = CInt(nrecoZoom * 100)
$vbLabelText   $csharpLabel

Yer Tutucu Söz Dizimi Güncellemesi

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

NReco PDF Generator IronPDF
[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
};
// 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
};
Imports NReco.PdfGenerator
Imports IronPdf

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

' IronPDF:
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    .MaxHeight = 20
}
$vbLabelText   $csharpLabel

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;
// 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;
' NReco PDF Generator pattern:
Dim pdfBytes As Byte() = converter.GeneratePdf(html)
File.WriteAllBytes("output.pdf", pdfBytes)

' IronPDF pattern:
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")

' Or if you need bytes:
Dim pdfBytes As Byte() = renderer.RenderHtmlAsPdf(html).BinaryData
$vbLabelText   $csharpLabel

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;
}
// 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;
}
Imports NReco.PdfGenerator
Imports IronPdf

' NReco PDF Generator pattern (creates new each time):
Public Function Generate(html As String) As Byte()
    Dim converter As New HtmlToPdfConverter()
    Return converter.GeneratePdf(html)
End Function

' IronPDF pattern (reuse renderer, thread-safe):
Private ReadOnly _renderer As New ChromePdfRenderer()

Public Function Generate(html As String) As Byte()
    Return _renderer.RenderHtmlAsPdf(html).BinaryData
End Function
$vbLabelText   $csharpLabel

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;
}
// 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;
}
Imports System.Threading.Tasks

' NReco PDF Generator: No async support available

' IronPDF: Full async support
Public Async Function GenerateAsync(html As String) As Task(Of Byte())
    Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
    Return pdf.BinaryData
End Function
$vbLabelText   $csharpLabel

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();
// NReco PDF Generator
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
' NReco PDF Generator
Dim converter As New HtmlToPdfConverter()

' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

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;
// NReco PDF Generator
byte[] pdfBytes = converter.GeneratePdf(html);

// IronPDF
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
' NReco PDF Generator
Dim pdfBytes As Byte() = converter.GeneratePdf(html)

' IronPDF
Dim pdfBytes As Byte() = renderer.RenderHtmlAsPdf(html).BinaryData
$vbLabelText   $csharpLabel

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;
// 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;
' NReco PDF Generator
converter.Margins = New PageMargins With {.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
$vbLabelText   $csharpLabel

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
};
// 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
};
Imports NReco.PdfGenerator
Imports IronPdf

converter.PageFooterHtml = "<div>Page [page] of [topage]</div>"

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    .MaxHeight = 20
}
$vbLabelText   $csharpLabel

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ınNReco 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ı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara