NReco.PdfGenerator a IronPDF: Przewodnik po porównaniu technicznym
Przegląd NReco.PdfGenerator
NReco.PdfGenerator to biblioteka C#, która konwertuje dokumenty HTML na pliki PDF przy użyciu narzędzia wiersza poleceń wkhtmltopdf. Oferuje prosty API poprzez swoją klasę HtmlToPdfConverter, która korzysta z wkhtmltopdf do renderowania.
Narzędzie wkhtmltopdf wykorzystuje jako silnik renderujący WebKit Qt w wersji pochodzącej z około 2012 roku. Chociaż jest ono szeroko stosowane, prace nad wkhtmltopdf zostały wstrzymane w 2020 roku, co oznacza brak aktualizacji zabezpieczeń i nowych funkcji. Stanowi to wyzwanie dla zespołów tworzących nowoczesne aplikacje, które wymagają aktualnych rozwiązań CSS i JavaScript.
Bezpłatna wersja NReco.PdfGenerator zawiera znaki wodne na generowanych plikach PDF, co wymaga posiadania licencji komercyjnej do użytku produkcyjnego. Aby uzyskać informacje o cenach tych licencji, trzeba skontaktować się z działem sprzedaży, co może skomplikówać procesy zakupowe.
Wprowadzenie do IronPDF
IronPDF to biblioteka .NET, która wykorzystuje nowoczesny silnik renderujący oparty na Chromium do konwersji HTML, CSS i JavaScript na dokumenty PDF. Klasa ChromePdfRenderer służy jako główny interfejs do konwersji HTML na PDF, oferując szerokie możliwości konfiguracji przez właściwość RenderingOptions.
W przeciwieństwie do nakładek wkhtmltopdf, silnik renderującyIronPDFjest regularnie aktualizowany pod kątem bezpieczeństwa i kompatybilności. Biblioteka jest samowystarczalna, co eliminuje konieczność zarządzania zewnętrznymi zależnościami binarnymi na różnych platformach.
IronPDF oferuje okres próbny z pełną funkcjonalnością (bez znaków wodnych), co pozwala zespołom ocenić możliwości produktu przed zakupem. Licencjonowanie komercyjne opiera się na opublikowanych, przejrzystych cenach.
Porównanie silników renderujących
Główna różnica między tymi bibliotekami polega na ich silnikach renderujących, co ma wpływ na bezpieczeństwo i kompatybilność z CSS.
| Aspekt | NReco.PdfGenerator | IronPDF |
|---|---|---|
| Silnik renderujący | WebKit Qt (2012) | Chromium (aktualne) |
| Bezpieczeństwo | Ponad 20 CVE, porzuconych | Aktywne aktualizacje zabezpieczeń |
| Obsługa CSS | CSS2.1, ograniczone CSS3 | Pełna obsługa CSS3, Grid, Flexbox |
| JavaScript | Podstawowy ES5 | Pełna obsługa ES6+ |
| Zależności | Zewnętrzny plik binarny wkhtmltopdf | Samodzielny |
| Obsługa asynchroniczna | Tylko synchroniczne | Pełna obsługa async/await |
| Czcionki internetowe | Ograniczone | Pełna obsługa czcionek Google Fonts, @font-face |
| Bezpłatna wersja próbna | Z znakiem wodnym | Pełna funkcjonalność |
| Przejrzystość cen | Opaque, skontaktuj się z działem sprzedaży | Opublikowane ceny |
NReco.PdfGenerator dziedziczy wszystkie luki w zabezpieczeniach z wkhtmltopdf, w tym udokumentówane luki CVE dotyczące fałszowania żądań po stronie serwera, luk w zabezpieczeniach związanych z odczytem plików lokalnych oraz potencjalnego zdalnego wykonania kodu. Ponieważ wkhtmltopdf zostało wycofane w 2020 r., nie są dostępne żadne poprawki dla tych problemów.
Silnik Chromium firmyIronPDFzapewnia obsługę aktualnych standardów internetowych, umożliwiając korzystanie z nowoczesnych funkcji CSS, takich jak układy Grid i Flexbox, zmienne CSS oraz właściwości niestandardowe. Wykonywanie kodu JavaScript obsługuje składnię ES6+, w tym wzorce async/await.
Podstawowa konwersja HTML do PDF
Obie biblioteki obsługują podstawową konwersję HTML do PDF, choć wykorzystują różne wzorce API.
Podejście NReco.PdfGenerator:
// 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
Podejście 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
Obie biblioteki wymagają minimalnej ilości kodu do podstawowych konwersji. NReco.PdfGenerator zwraca tablicę byte[] wymagającą ręcznych operacji na plikach, podczas gdyIronPDFzwraca obiekt PdfDocument z wygodnymi metodami, jak SaveAs(). ObiektIronPDFzapewnia również dostęp do BinaryData dla dostępu do tablicy bajtów oraz Stream dla operacji strumieniowych.
Dla programistów zaznajomionych z procesem konwersji HTML do PDF interfejs APIIronPDFbędzie intuicyjny, a jednocześnie zapewni dodatkowe możliwości wykraczające poza podstawową konwersję.
Konwersja adresów URL do formatu PDF
Konwersja stron internetowych do dokumentów PDF ujawnia różnice w nazewnictwie metod i semantyce API.
Konwersja adresu URL NReco.PdfGenerator:
// 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
Konwersja adresów URL w 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.PdfGenerator wykorzystuje GeneratePdfFromFile() zarówno dla ścieżek plików, jak i URL, co może być mylące semantycznie.IronPDFudostępnia dedykowaną metodę RenderUrlAsPdf, która jasno wskazuje wykonywaną operację.
Niestandardowy rozmiar strony i marginesy
Profesjonalne dokumenty często wymagają określonych wymiarów stron i konfiguracji marginesów. Obie biblioteki obsługują te dostosowania przy użyciu różnych wzorców konfiguracyjnych.
Konfiguracja strony NReco.PdfGenerator:
// 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
Konfiguracja strony 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.PdfGenerator wymaga określenia wymiarów strony w milimetrach (210×297 dla A4) i używa obiektu PageMargins.IronPDFużywa wyliczenia PdfPaperSize dla standardowych rozmiarów i zapewnia indywidualne właściwości marginesów przez RenderingOptions. Klasa RenderingOptions centralizuje całą konfigurację strony, dzięki czemu ustawienia są dostępne poprzez autouzupełnianie w środowisku IDE.
Przewodnik po mapowaniu API
Dla zespołów rozważających migrację z NReco.PdfGenerator doIronPDFzrozumieniuiuiuiuie mapowań API pomaga oszacować nakład pracy i zaplanować przejście.
Mapowanie podstawowych metod
| NReco.PdfGenerator | IronPDF |
|---|---|
new HtmlToPdfConverter() |
new ChromePdfRenderer() |
GeneratePdf(html) |
RenderHtmlAsPdf(html) |
GeneratePdfFromFile(url, output) |
RenderUrlAsPdf(url) |
GeneratePdfFromFile(path, output) |
RenderHtmlFileAsPdf(path) |
| (nieobsługiwane) | RenderHtmlAsPdfAsync(html) |
Mapowania właściwości konfiguracyjnych
| NReco.PdfGenerator | IronPDF |
|---|---|
Orientation = PageOrientation.Landscape |
RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
Size = PageSize.A4 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
Margins.Top = 10 |
RenderingOptions.MarginTop = 10 |
Zoom = 0.9f |
RenderingOptions.Zoom = 90 |
PageHeaderHtml = "..." |
RenderingOptions.HtmlHeader |
PageFooterHtml = "..." |
RenderingOptions.HtmlFooter |
Różnice w składni symboli zastępczych
Nagłówki i stopki często zawierają treści dynamiczne, takie jak numery stron. Składnia symboli zastępczych różni się w zależności od biblioteki:
| NReco.PdfGenerator | IronPDF | Cel |
|---|---|---|
[page] |
{page} |
Numer bieżącej strony |
[topage] |
{total-pages} |
Łączna liczba stron |
[date] |
{date} |
Aktualna data |
[time] |
{time} |
Aktualny czas |
[title] |
{html-title} |
Tytuł dokumentu |
[webpage] |
{url} |
Adres źródłowy |
Zespoły migrujące z NReco.PdfGenerator muszą zaktualizować wszystkie szablony nagłówków i stopek, stosując nową składnię symboli zastępczych.
Konwersja wartości powiększenia
NReco.PdfGenerator używa wartości zmiennoprzecinkowych (0,0–2,0) do Zoomu, podczas gdyIronPDFużywa wartości procentowych:
// NReco: Zoom = 0.75f means 75%
// IronPDF: Zoom = 75 means 75%
int ironPdfZoom = (int)(nrecoZoom * 100);
// NReco: Zoom = 0.75f means 75%
// IronPDF: Zoom = 75 means 75%
int ironPdfZoom = (int)(nrecoZoom * 100);
' NReco: Zoom = 0.75F means 75%
' IronPDF: Zoom = 75 means 75%
Dim ironPdfZoom As Integer = CInt(nrecoZoom * 100)
Porównanie obsługi asynchronicznej
Nowoczesne aplikacje internetowe czerpią korzyści z operacji asynchronicznych, które nie blokują wątków. Jest to szczególnie ważne w aplikacjach ASP.NET Core obsługujących żądania równoległe.
NReco.PdfGenerator zapewnia operacje wyłącznie synchroniczne, co może blokować wątki serwera WWW podczas generowania plików PDF:
// NReco.PdfGenerator - synchronous only
var pdfBytes = converter.GeneratePdf(html); // Blocks thread
// NReco.PdfGenerator - synchronous only
var pdfBytes = converter.GeneratePdf(html); // Blocks thread
IronPDF obsługuje pełne wzorce async/await:
//IronPDF- async support
var pdf = await renderer.RenderHtmlAsPdfAsync(html); // Non-blocking
await pdf.SaveAsAsync("output.pdf");
//IronPDF- async support
var pdf = await renderer.RenderHtmlAsPdfAsync(html); // Non-blocking
await pdf.SaveAsAsync("output.pdf");
Imports System.Threading.Tasks
' IronPDF - async support
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html) ' Non-blocking
Await pdf.SaveAsAsync("output.pdf")
W przypadku aplikacji generujących pliki PDF w odpowiedzi na żądania HTTP, obsługa asynchronicznaIronPDFpoprawia skalowalność poprzez zwolnienie wątków podczas procesu renderowania.
Różnice w zależnościach i wdrażaniu
NReco.PdfGenerator wymaga, aby plik binarny wkhtmltopdf był dostępny w systemie. Stwarza to wyzwania związane z wdrożeniem:
- Należy zarządzać plikami binarnymi specyficznymi dla platformy (Windows .exe, Linux .so, macOS .dylib)
- Obrazy Docker wymagają instalacji wkhtmltopdf
- Potrzebne są etapy dostarczania plików binarnych w potokach CI/CD
- Skanery bezpieczeństwa sygnalizują znane luki CVE
IronPDF jest samodzielnym pakietem NuGet:
#IronPDFinstallation - complete
dotnet add package IronPdf
# NReco.PdfGenerator installation - plus binary management
dotnet add package NReco.PdfGenerator
# Plus: install wkhtmltopdf per platform
#IronPDFinstallation - complete
dotnet add package IronPdf
# NReco.PdfGenerator installation - plus binary management
dotnet add package NReco.PdfGenerator
# Plus: install wkhtmltopdf per platform
Zespoły migrujące z NReco.PdfGenerator mogą usunąć pliki binarne wkhtmltopdf i uprościć proces wdrażania.
Kiedy zespoły rozważają przejście z NReco.PdfGenerator na IronPDF
Kilka czynników skłania zespoły do rozważeniaIronPDFjako alternatywy dla NReco.PdfGenerator:
Zgodność z wymógąmi bezpieczeństwa: Organizacje, które muszą spełniać wymogi bezpieczeństwa, stają przed wyzwaniem, gdy skanery podatności wykrywają luki CVE w wkhtmltopdf. Ponieważ wkhtmltopdf zostało wycofane, nie ma możliwości usunięcia tych luk w zabezpieczeniach w ramach NReco.PdfGenerator. Aktywnie utrzymywany silnik Chromium firmyIronPDFotrzymuje aktualizacje zabezpieczeń.
Wymagania dotyczące nowoczesnego CSS: Projekty wymagające CSS Grid, Flexbox, zmiennych CSS lub innych nowoczesnych funkcji CSS nie mogą korzystać z silnika WebKit wkhtmltopdf z 2012 roku. Projektanci stron internetowych często tworzą układy, które w NReco.PdfGenerator renderują się nieprawidłowo lub w ogóle się nie wyświetlają.
Zgodność z JavaScript: Aplikacje generujące pliki PDF z treścią renderowaną przez JavaScript (wykresy, tabele dynamiczne, wartości obliczone) wymagają obsługi nowoczesnego JavaScript. Ograniczenia wkhtmltopdf dotyczące ES5 uniemożliwiają korzystanie z nowoczesnych bibliotek JavaScript.
Architektura aplikacji asynchronicznej: Aplikacje ASP.NET Core korzystają z asynchronicznego generowania plików PDF w celu zachowania wydajności wątków. API NReco.PdfGenerator, działające wyłącznie w trybie synchronicznym, może powodować wąskie gardła w zakresie skalowalności.
Uproszczenie wdrażania: Zarządzanie plikami binarnymi wkhtmltopdf specyficznymi dla platformy w środowiskach programistycznych, testowych i produkcyjnych zwiększa złożoność operacyjną. Zespoły poszukują samodzielnych rozwiązań, które upraszczają procesy CI/CD.
Przejrzystość cen: Planowanie budżetu wymaga przewidywalnych kosztów. Nieprzejrzysta polityka cenowa NReco.PdfGenerator (kontakt z działem sprzedaży) utrudnia zakup, podczas gdy opublikowane cenyIronPDFumożliwiają proste planowanie budżetu.
Porównanie instalacji
Instalacja NReco.PdfGenerator:
Install-Package NReco.PdfGenerator
Install-Package NReco.PdfGenerator
Plus instalacja i zarządzanie plikiem binarnym wkhtmltopdf specyficznym dla platformy.
Instalacja IronPDF:
Install-Package IronPdf
Install-Package IronPdf
IronPDF wymaga konfiguracji klucza licencyjnego podczas uruchamiania aplikacji:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Obie biblioteki obsługują .NET Framework 4.6.2+ oraz .NET Core/.NET 5+, dzięki czemu są kompatybilne z nowoczesnym programowaniem .NET ukierunkowanym na .NET 10 i C# 14.
Rozważania dotyczące wydajności
Silnik Chromium firmyIronPDFwymaga czasu na inicjalizację przy pierwszym użyciu (około 1,5 sekundy na uruchomienie Chromium). Kolejne renderowania są znacznie szybsze. W przypadku aplikacji, których uruchomienie wymaga krótkiego czasu reakcji, rozgrzanie renderera podczas inicjalizacji aplikacji zapobiega wpływowi tego opóźnienia na operacje widoczne dla użytkownika:
// Warm up at startup
new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>");
// Warm up at startup
new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>");
Dim renderer As New ChromePdfRenderer()
renderer.RenderHtmlAsPdf("<html></html>")
NReco.PdfGenerator ma również obciążenie związane z inicjalizacją podczas uruchamiania procesu wkhtmltopdf, a także ciągłe obciążenie pamięci wynikające z zarządzania procesami zewnętrznymi.
Podejmowanie decyzji
Wybór między NReco.PdfGenerator aIronPDFzależy od konkretnych wymagań:
Rozważ użycie NReco.PdfGenerator, jeśli: masz już działające poprawnie procesy oparte na wkhtmltopdf, wyniki skanera bezpieczeństwa są akceptowalne w Twoim środowisku, nie potrzebujesz nowoczesnych funkcji CSS lub JavaScript oraz możesz zarządzać wdrażaniem plików binarnych specyficznych dla danej platformy.
Rozważ IronPDF, jeśli: zgodność z wymógąmi bezpieczeństwa wymaga uwzględnienia luk CVE w wkhtmltopdf, Twoje projekty wykorzystują nowoczesne funkcje CSS, takie jak Grid lub Flexbox, potrzebujesz obsługi async/await dla aplikacji internetowych, chcesz uprościć wdrażanie poprzez wyeliminowanie zewnętrznych plików binarnych lub preferujesz przejrzyste licencjonowanie i ceny.
Dla zespołów tworzących nowoczesne aplikacje .NET w 2025 r. i planujących działania na 2026 r. aktywnie utrzymywany silnik Chromium firmyIronPDFstanowi podstawę zgodności z obecnymi i przyszłymi standardami internetowymi.
Pierwsze kroki z IronPDF
Aby ocenićIronPDFpod kątem swoich potrzeb w zakresie generowania plików PDF:
- Zainstaluj pakiet NuGet IronPDF:
Install-Package IronPdf - Zapoznaj się z samouczkiem dotyczącym konwersji HTML do PDF, aby poznać podstawowe wzorce konwersji
- Poznaj konwersję adresów URL do formatu PDF w celu przechwytywania stron internetowych
- Konfiguracja nagłówków i stopek w profesjonalnych dokumentach
Samouczki IronPDF zawierają wyczerpujące przykłady typowych scenariuszy, a Dokumentacja API opisuje wszystkie dostępne klasy i metody.
Podsumowanie
NReco.PdfGenerator iIronPDFreprezentują różne epoki technologii generowania plików PDF. NReco.PdfGenerator wykorzystuje silnik WebKit z 2012 roku wkhtmltopdf, zachowując zarówno jego znane API, jak i luki w zabezpieczeniach oraz ograniczenia renderowania.IronPDFwykorzystuje nowoczesny silnik Chromium, który jest aktywnie utrzymywany, obsługuje aktualne standardy internetowe i oferuje funkcje asynchroniczne.
Dla zespołów, które dbają o zgodność z wymógąmi bezpieczeństwa, nowoczesne wymagania CSS/JavaScript lub złożoność wdrażania,IronPDFoferuje rozwiązanie bez technicznego długu związanego z porzuconymi zależnościami. Przejście wymaga aktualizacji wywołań API i składni symboli zastępczych, ale eliminuje konieczność zarządzania zewnętrznymi plikami binarnymi i rozwiązuje udokumentówane luki w zabezpieczeniach.
Oceń obie opcje pod kątem konkretnych wymagań dotyczących bezpieczeństwa, wierności renderowania, obsługi asynchronicznej oraz prostoty wdrożenia. Zrozumienie różnic architektonicznych przedstawionych w tym porównaniu pomoże Ci podjąć świadomą decyzję, która będzie zgodna z Twoimi potrzebami w zakresie generowania plików PDF i celami modernizacji.