PORóWNANIE

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
SHELL

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
SHELL

Plus instalacja i zarządzanie plikiem binarnym wkhtmltopdf specyficznym dla platformy.

Instalacja IronPDF:

Install-Package IronPdf
Install-Package IronPdf
SHELL

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"
$vbLabelText   $csharpLabel

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>")
$vbLabelText   $csharpLabel

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:

  1. Zainstaluj pakiet NuGet IronPDF: Install-Package IronPdf
  2. Zapoznaj się z samouczkiem dotyczącym konwersji HTML do PDF, aby poznać podstawowe wzorce konwersji
  3. Poznaj konwersję adresów URL do formatu PDF w celu przechwytywania stron internetowych
  4. 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.