NReco PDF Generator'dan IronPDF'e C# ile Nasıl Geçilir
NReco PDF Generator'dan IronPDF'e Geçiş Sebepleri
NReco PDF Generatorile Eleştirel Güvenlik Sorunları
NReco PDF Generator, terk edilmiş wkhtmltopdf ikili dosyasını sarar ve tüm güvenlik açıklarını devralır. Bu teorik bir endişe değildir—2020'de wkhtmltopdf terk edildiğinden beri yamaları bulunmayan 20+ belgelenmiş CVE vardır:
- CVE-2020-21365: Sunucu tarafı istek sahtekarlığı (SSRF)
- CVE-2022-35583: HTML enjeksiyonu yoluyla yerel dosya okuma
- CVE-2022-35580: Uzaktan kod yürütme potansiyeli
Bu güvenlik açıkları yamalanamaz çünkü temel wkhtmltopdf projesi artık bakımda değildir.
EkNReco PDF GeneratorSınırlamaları
-
Filigranlı Ücretsiz Versiyon: Üretim kullanımı, satışla iletişim kurmayı gerektiren opak fiyatlaması olan ücretli bir lisans gerektirir.
-
Eskimiş İşlem Motoru: WebKit Qt (2012 civarı) modern web desteği kısıtlı sunar:
- CSS Grid veya Flexbox yok
- ModernJavaScript(ES6+) yok
- Web yazı tipi desteği zayıf
- CSS değişkenleri veya özel özellikler yok
-
Harici İkili Bağlılık: Her platform için wkhtmltopdf ikililerini yönetmeyi gerektirir (
wkhtmltopdf.exe,wkhtmltox.dll). -
Aktif Geliştirme Yok: Kaplama yalnızca bakım alır; temel motor güncellemeleri yoktur.
- Sınırlı Asenkron Destek: Eşzamanlılık web uygulamalarında iş parçacıklarını engeller.
NReco PDF Generator vsIronPDFKarşılaştırması
| Bağlam | NReco PDF Generator | IronPDF |
|---|---|---|
| Render Motoru | WebKit Qt (2012) | Chromium (güncel) |
| Güvenlik | 20+ CVE, yamalar yok | 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 dosyası | Kendisi yeterli |
| Async Destegi | Yalnızca eşzamanlı | Tam async/await |
| Web Yazı Tipleri | Sınırlı | Tam Google Yazı Tipleri, @font-face |
| Lisanslama | Opak fiyatlandırma, satışla iletişim kurun | Şeffaf fiyatlama |
| Ücretsiz Deneme | Filigranlı | Tam işlevsellik |
IronPDF, 2025 ve 2026 yıllarına kadar .NET 10 ve C# 14 kabulleri yapmayı planlayan ekipler için aktif geliştirme ve modern oluşturma yetenekleri ile geleceğe yönelik bir temel sağlar.
Başlamadan Önce
Önkoş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ükleme yeteneği
- 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 - Herhangi bir wkhtmltopdf kurulum senaryosunu kaldırın
- Platforma özgü ikili dosya klasörlerini 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ı Belirleme
# 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" .
API Referansının Tamamı
Temel Sınıf Eşlemeleri
| NReco PDF Generator | IronPDF |
|---|---|
HtmlToPdfConverter |
ChromePdfRenderer |
PageMargins |
Ayrı kenar boşluğu özellikleri |
PageOrientation |
PdfPaperOrientation |
PageSize |
PdfPaperSize |
Yapılandırma Yöntem Eşlemesi
| 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şluğu 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} |
Çıktı İş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) |
pdf.Stream |
Kod Geçiş Örnekleri
Örnek 1: Temel HTML'den PDF'ye
Önce (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
Sonra (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öndürme türü ve kayıt düzenindedir. NReco PDF Generator'un HtmlToPdfConverter.GeneratePdf() döndürüyor; bunu diske manuel olarak yazmalısınız File.WriteAllBytes() kullanarak. IronPDF'un ChromePdfRenderer.RenderHtmlAsPdf() yerleşik bir SaveAs() yöntemi olan bir PdfDocument nesnesi döndürür.
Bu nesne yonelimli yöntem ek faydalar sunar: kaydetmeden once PDF'yi (filigran ekleme, belgeleri birlestirme, guvenlik ekleme) manipule edebilirsiniz. Mevcut kodla uyumluluk için ham bayt ihtiyaçınız varsa, pdf.BinaryData kullanın. Daha fazla işleme seçeneği için HTML'den PDF'ye dokümantasyonuna bakın.
Örnek 2: Kenar Bosluklari ile Ozel Sayfa Boyutu
Önce (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
Sonra (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.IronPDFPdfPaperSize enum'unu (A4, Mektup, Legal gibi standart boyutları içerir) ve RenderingOptions nesnesi üzerinde bireysel marj özelliklerini kullanır.
Temel gecis değişiklikleri:
PageHeight→RenderingOptions.PaperSize = PdfPaperSize.A4new PageMargins { Top = 10, ... }→ Individual properties:RenderingOptions.MarginTop = 10`
Enum tarafından kapsanmayan özel kağıt boyutları için RenderingOptions.SetCustomPaperSizeinMilimeters(width, height) kullanın. sayfa konfigurasiyon seçenekleri hakkinda daha fazla bilgi edinin.
Örnek 3: URL'den PDF'ye Donusum
Önce (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
Sonra (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 karışıklığa neden olan GeneratePdfFromFile() metodunu hem yerel dosyalar hem de URL'ler için kullanır, nullable bir ikinci parametre ile.IronPDFözel metotlar sağlar: URL'ler için RenderUrlAsPdf() ve yerel HTML dosyaları için RenderHtmlFileAsPdf().
IronPDF yaklaşımı daha temiz ve daha sezgiseldir. Asenkron web uygulamaları için, NReco PDF Generator'un basitçe yapamayacağı bir şey olan, iş parçacıklarını engellemekten kaçınmak için await renderer.RenderUrlAsPdfAsync(url) kullanın.
Kritik Geçiş Notları
Zoom Degeri Donusumu
NReco PDF Generator float degerleri (0.0-2.0) kullanirken,IronPDFyuzdelik tamsayilar kullanir:
// 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
tüm baslik/altbilgi yer tutuculari 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
}
Dondurul Typi Değişikligi
NReco PDF Generator doğrudan byte[] döndürüyor;IronPDFPdfDocument döndürüyor:
//NReco PDF Generatorpattern:
byte[] pdfBytes = converter.GeneratePdf(html);
File.WriteAllBytes("output.pdf", pdfBytes);
//IronPDFpattern:
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);
//IronPDFpattern:
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 Guvenligi ve Yeniden Kullanilabilirlik
NReco PDF Generator genellikle her arama icin yeni bir cevirici oluşturur. IronPDF'un ChromePdfRenderer iş parçacığı 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);
}
//IronPDFpattern (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);
}
//IronPDFpattern (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
Async Destegi (Yeni Yetenek)
IronPDF, NReco PDF Generator'un sunamayacagi 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
Ariza Giderme
Problem 1: HtmlToPdfConverter Bulunamadı
Sorun: IronPDF'de HtmlToPdfConverter sınıfı yok.
Çö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()
Issue 2: GeneratePdf Yanlis Tur Donduruyor
Sorun: Kod byte[] bekliyor ama 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
Issue 3: PageMargins Nesnesi Bulunamadi
Sorun: IronPDF'de PageMargins sınıfı yok.
Cozum: Bireysel kenar boslugu özelliklerini kullanin:
// 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
Issue 4: Sayfa Numaralari Gorunmuyor
Sorun: [page] ve [topage] placeholder'ları çalışmıyor.
Çözüm:IronPDFyer 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
}
Goc Kontrol Listesi
Geçiş Öncesi
- Kod tabanındaki tüm
NReco.PdfGeneratorkullanımlarını envanter yapın - Tüm
CustomWkHtmlArgsveCustomWkHtmlPageArgsdeğerlerini belgeleyin - Yer tutucu içerikli tüm baslik/altbilgi HTML kaliplari listeleyin
- Async gereksinimlerini (web kontrolleri, servisler) belirleyin
- Zoom ve kenar boslugu ayarlarini gozden gecirin
- Karsilastirma icin mevcut PDF ciktilarinin yedegini alin -IronPDFlisans anahtarını edinin
Paket Değişiklikleri
NReco.PdfGeneratorNuGet paketini kaldırınIronPdfNuGet paketini kurun:dotnet add package IronPdf- Namespace alımlarını
using NReco.PdfGenerator;'denusing IronPdf;'e güncelleyin
Kod Değişiklikleri
- Başlangıçta lisans anahtarı yapılandırması ekleyin
HtmlToPdfConverter'yiChromePdfRendererile değiştirinGeneratePdf(html)'yiRenderHtmlAsPdf(html)ile değiştirinGeneratePdfFromFile(url, null)'yiRenderUrlAsPdf(url)ile değiştirinPageMarginsnesnesini bireysel marjin özelliklerine dönüştürün- Zoom degerlerini float'tan yuzdeliğe güncelleyin
- Placeholder söz dizimini güncelleyin:
[page]→{page},[topage]→{total-pages} File.WriteAllBytes()'yipdf.SaveAs()ile değiştirin- Faydali oldugu yerlerde senkron aramalari asenkrona dönüştürun
Geçişten Sonra
- Yeni projedir/deployment'den wkhtmltopdf ikilisini kaldirin
- Docker dosyalarini wkhtmltopdf yuklemesini kaldıracak sekilde güncelleyin
- PDF ciktilarini karsilastiran regresyon testleri yapin
- Baslik/altbilgi yer tutucularinin dogru sekilde gösterildigini dogrulayin
- Tüm hedef platformlarda test edin (Windows, Linux, macOS)
- wkhtmltopdf adimlarini kaldırmak icin CI/CD boru hattini güncelleyin
- CVE'lerin kaldirildigini dogrulayan guvenlik taramalarini güncelleyin

