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ı
-
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.
-
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
-
Harici İkili Bağımlılık: Her platform için wkhtmltopdf ikililerini yönetmeyi gerektirir (
wkhtmltopdf.exe,wkhtmltox.dll). -
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.
- 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
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleyebilme
- 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
Ayrıca wkhtmltopdf ikili dosyalarını dağıtımınızdan kaldırın:
- Projeden
wkhtmltopdf.exe,wkhtmltox.dllsilin - 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"
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" .
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
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
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
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
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:
PageHeight→RenderingOptions.PaperSize = PdfPaperSize.A4new 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
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
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)
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
}
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
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
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
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()
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
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
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
}
Geçiş Kontrol Listesi
Öncesi-Geçiş
- Kod tabanındaki tüm
NReco.PdfGeneratorkullanımlarını envanterleyin - Tüm
CustomWkHtmlArgsveCustomWkHtmlPageArgsdeğ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.PdfGeneratorNuGet paketini kaldırınIronPdfNuGet paketini yükleyin:dotnet add package IronPdf- Namespace içe aktarmalarını
using NReco.PdfGenerator;'danusing IronPdf;'ye güncelleyin
Kod Değişiklikleri
Başlangıçta lisans anahtarı yapılandırmasını ekleyin
HtmlToPdfConverterileChromePdfRendererdeğiştirinGeneratePdf(html)ileRenderHtmlAsPdf(html)değiştirinGeneratePdfFromFile(url, null)ileRenderUrlAsPdf(url)değiştirinPageMarginsnesnesini 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()ilepdf.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

