PORóWNANIE

TuesPechkin vs IronPDF: Przewodnik porównania technicznego

Gdy programiści .NET muszą przekonwertować HTML na PDF, do wyboru mają kilka bibliotek opakowujących opartych na starszych silnikach renderujących.TuesPechkinstanowi jedno z takich rozwiązań, wykorzystujące bibliotekę wkhtmltopdf w celu zapewnienia możliwości generowania plików PDF. W niniejszym porównaniu technicznym analizujemyTuesPechkinw zestawieniu z IronPDF, aby pomóc architektom i programistom zrozumieć kompromisy między starszymi opakowaniami a nowoczesnymi bibliotekami PDF.

Zrozumienie TuesPechkin

TuesPechkin to bezpieczna dla wątków nakładka na bibliotekę wkhtmltopdf, zaprojektowana, aby pomóc programistom w generowaniu dokumentów PDF z treści HTML. Biblioteka stara się rozwiązać wyzwania związane z współbieżnością, inherentne dla wkhtmltopdf, poprzez dostarczenie implementacji ThreadSafeConverter.

JednakTuesPechkindziedziczy podstawowe ograniczenia wynikające z technologii, na której się opiera:

  • Porzucona fundacja:TuesPechkinwykorzystuje bibliotekę wkhtmltopdf, która została zaktualizowana po raz ostatni w 2015 r. i oficjalnie porzucona w grudniu 2022 r.
  • Przestarzały silnik renderujący: wykorzystuje Qt WebKit 4.8, silnik renderujący sprzed ery Chrome
  • Złożone zarządzanie wątkami: Wymaga ręcznej konfiguracji bezpieczeństwa wątków przez deweloperów przy użyciu RemotingToolset i wzorców wdrożenia
  • Stabilność pod obciążeniem: Nawet przy konfiguracji bezpiecznej dla wątków, biblioteka może się zawieszać przy wysokiej współbieżności z AccessViolationException lub zacięcia procesów
  • Ograniczona obsługa CSS: Brak obsługi nowoczesnych funkcji CSS, takich jak Flexbox czy CSS Grid
  • Ograniczenia JavaScript: Niewiarygodne wykonywanie kodu JavaScript bez obsługi ES6+

Kwestie bezpieczeństwa

TuesPechkin dziedziczy wszystkie luki w zabezpieczeniach z wkhtmltopdf. Luka CVE-2022-35583, oceniona jako krytyczna (9,8/10), stanowi lukę typu Server-Side Request Forgery, która dotyczy wszystkich wersji TuesPechkin. Ponieważ projekt wkhtmltopdf został porzucony, ta luka nigdy nie zostanie załatana, co oznacza, że aplikacje korzystające z bibliotekiTuesPechkinpozostają na stałe narażone na ataki.

Zrozumienie IronPDF

IronPDF stosuje zasadniczo inne podejście, oferując nowoczesną, komercyjną bibliotekę PDF z natywną bezpieczeństwem wątków i silnikiem renderującym opartym na Chromium. Zamiast wykorzystywać starsze narzędzia,IronPDFkoncentruje się przede wszystkim na generowaniu plików PDF.

Najważniejsze cechy IronPDF to:

  • Nowoczesny silnik Chromium: obsługuje HTML5, CSS3, Flexbox, CSS Grid oraz JavaScript ES6+
  • Natywna bezpieczeństwo wątków: Nie jest wymagane ręczne zarządzanie wątkami — operacje współbieżne działają automatycznie
  • Aktywny rozwój: cotygodniowe aktualizacje i ciągłe ulepszenia
  • Kompleksowe funkcje PDF: Oprócz generowania plików obejmują one również edycję, podpisy cyfrowe, zgodność z formatem PDF/A oraz wypełnianie formularzy
  • Prosta integracja: łatwa instalacja NuGet bez wdrażania natywnych plików binarnych

Porównanie funkcji

Poniższa tabela przedstawia różnice techniczne międzyTuesPechkina IronPDF:

FunkcjaTuesPechkinIronPDF
LicencjaBezpłatne (licencja MIT)Komercjalne
Bezpieczeństwo wątkówWymaga ręcznego zarządzaniaWsparcie native
WspółbieżnośćOgraniczona, może ulegać awariom pod obciążeniemSolidny, obsługuje wysoką współbieżność
Stan rozwojuNieaktywne, ostatnia aktualizacja w 2015 r.Aktywne, ciągłe ulepszenia
Łatwość użytkowaniaZłożona konfiguracjaPrzyjazny dla użytkownika z przewodnikami
DokumentacjaPodstawoweObszerne, z przykładami
Silnik renderującyQt WebKit 4.8 (przestarzały)Nowoczesny Chromium
Obsługa CSS3CzęścioweObsługiwane
Flexbox/GridNieobsługiwaneObsługiwane
JavaScriptNiewiarygodnePełna obsługa ES6+
Manipulacja plikami PDFNiedostępneObsługiwane
Podpisy cyfroweNiedostępneObsługiwane
Zgodność z PDF/ANiedostępneObsługiwane
Wypełnianie formularzyNiedostępneObsługiwane
Znaki wodneNiedostępneObsługiwane
Scal/PodzielNiedostępneObsługiwane
Nagłówki/stopkiTylko podstawowy tekstPełna obsługa HTML
Poprawki bezpieczeństwaNigdy (porzucone)Regularne aktualizacje

Różnice w architekturze API

Różnice architektoniczne międzyTuesPechkinaIronPDFstają się natychmiast widoczne po przeanalizowaniu wzorców inicjalizacji i podstawowego sposobu użytkowania.

Złożoność inicjalizacji TuesPechkin

TuesPechkin wymaga złożonego rytuału inicjalizacji obejmującego konwertery, zestawy narzędzi i konfiguracje wdrożeniowe:

// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        string html = "<html><body><h1>Hello World</h1></body></html>";
        byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
        {
            Objects = { new ObjectSettings { HtmlText = html } }
        });

        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        string html = "<html><body><h1>Hello World</h1></body></html>";
        byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
        {
            Objects = { new ObjectSettings { HtmlText = html } }
        });

        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
Imports TuesPechkin
Imports System.IO

Class Program
    Shared Sub Main()
        Dim converter = New StandardConverter(
            New RemotingToolset(Of PdfToolset)(
                New Win64EmbeddedDeployment(
                    New TempFolderDeployment())))

        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdfBytes As Byte() = converter.Convert(New HtmlToPdfDocument With {
            .Objects = {New ObjectSettings With {.HtmlText = html}}
        })

        File.WriteAllBytes("output.pdf", pdfBytes)
    End Sub
End Class
$vbLabelText   $csharpLabel

Ten wzorzec wymaga zrozumienia wielu zagnieżdżonych klas: StandardConverter, RemotingToolset, Win64EmbeddedDeployment i TempFolderDeployment. Konfiguracja wdrożeniowa musi również odpowiadać architekturze platformy docelowej (x86/x64).

Uproszczone podejście IronPDF

IronPDF całkowicie eliminuje złożoność wdrażania dzięki prostemu interfejsowi API:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)

        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Klasa ChromePdfRenderer zapewnia natychmiastowy dostęp do generowania plików PDF bez konieczności konfiguracji specyficznej dla platformy. Aby uzyskać wyczerpujące wskazówki dotyczące konwersji HTML, zapoznaj się z samouczkiem dotyczącym konwersji HTML do PDF.

Konwersja adresów URL do formatu PDF

Konwersja stron internetowych do dokumentów PDF pokazuje różnice w użyteczności API między tymi dwiema bibliotekami.

Wdrożenie TuesPechkin

TuesPechkin używa właściwości PageUrl w ramach ObjectSettings do określenia URL-a:

// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
        {
            Objects = {
                new ObjectSettings {
                    PageUrl = "https://www.example.com"
                }
            }
        });

        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        byte[] pdfBytes = converter.Convert(new HtmlToPdfDocument
        {
            Objects = {
                new ObjectSettings {
                    PageUrl = "https://www.example.com"
                }
            }
        });

        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
Imports TuesPechkin
Imports System.IO

Class Program
    Shared Sub Main()
        Dim converter = New StandardConverter(
            New RemotingToolset(Of PdfToolset)(
                New Win64EmbeddedDeployment(
                    New TempFolderDeployment())))

        Dim pdfBytes As Byte() = converter.Convert(New HtmlToPdfDocument With {
            .Objects = {
                New ObjectSettings With {
                    .PageUrl = "https://www.example.com"
                }
            }
        })

        File.WriteAllBytes("webpage.pdf", pdfBytes)
    End Sub
End Class
$vbLabelText   $csharpLabel

Obowiązują te same ograniczenia dotyczące złożoności inicjalizacji, a przestarzały silnik WebKit może nieprawidłowo renderować nowoczesne strony internetowe z powodu braku obsługi CSS3 i JavaScript.

Wdrożenie IronPDF

IronPDF zapewnia dedykowaną metodę renderowania adresów URL dzięki nowoczesnemu silnikowi Chromium:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");

        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")

        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Metoda RenderUrlAsPdf ładuje strony w przeglądarce Chromium bez interfejsu graficznego, wykonując kod JavaScript i dokładnie stosując wszystkie nowoczesne style CSS. Ma to kluczowe znaczenie dla aplikacji internetowych zbudowanych przy użyciu frameworków takich jak React, Angular lub Vue.js, którychTuesPechkinnie jest w stanie poprawnie renderować.

Niestandardowe ustawienia renderowania

Konfiguracja wymiarów strony, marginesów i orientacji ujawnia różne podejścia do ustawień dokumentu.

Konfiguracja TuesPechkin

TuesPechkin używa klas GlobalSettings i ObjectSettings z zagnieżdżoną konfiguracją:

// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        string html = "<html><body><h1>Custom PDF</h1></body></html>";

        var document = new HtmlToPdfDocument
        {
            GlobalSettings = {
                Orientation = GlobalSettings.PdfOrientation.Landscape,
                PaperSize = GlobalSettings.PdfPaperSize.A4,
                Margins = new MarginSettings { Unit = Unit.Millimeters, Top = 10, Bottom = 10 }
            },
            Objects = {
                new ObjectSettings { HtmlText = html }
            }
        };

        byte[] pdfBytes = converter.Convert(document);
        File.WriteAllBytes("custom.pdf", pdfBytes);
    }
}
// NuGet: Install-Package TuesPechkin
using TuesPechkin;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new StandardConverter(
            new RemotingToolset<PdfToolset>(
                new Win64EmbeddedDeployment(
                    new TempFolderDeployment())));

        string html = "<html><body><h1>Custom PDF</h1></body></html>";

        var document = new HtmlToPdfDocument
        {
            GlobalSettings = {
                Orientation = GlobalSettings.PdfOrientation.Landscape,
                PaperSize = GlobalSettings.PdfPaperSize.A4,
                Margins = new MarginSettings { Unit = Unit.Millimeters, Top = 10, Bottom = 10 }
            },
            Objects = {
                new ObjectSettings { HtmlText = html }
            }
        };

        byte[] pdfBytes = converter.Convert(document);
        File.WriteAllBytes("custom.pdf", pdfBytes);
    }
}
Imports TuesPechkin
Imports System.IO

Module Program
    Sub Main()
        Dim converter = New StandardConverter(
            New RemotingToolset(Of PdfToolset)(
                New Win64EmbeddedDeployment(
                    New TempFolderDeployment())))

        Dim html As String = "<html><body><h1>Custom PDF</h1></body></html>"

        Dim document = New HtmlToPdfDocument With {
            .GlobalSettings = New GlobalSettings With {
                .Orientation = GlobalSettings.PdfOrientation.Landscape,
                .PaperSize = GlobalSettings.PdfPaperSize.A4,
                .Margins = New MarginSettings With {.Unit = Unit.Millimeters, .Top = 10, .Bottom = 10}
            },
            .Objects = {
                New ObjectSettings With {.HtmlText = html}
            }
        }

        Dim pdfBytes As Byte() = converter.Convert(document)
        File.WriteAllBytes("custom.pdf", pdfBytes)
    End Sub
End Module
$vbLabelText   $csharpLabel

Konfiguracja IronPDF

IronPDF centralizuje ustawienia we właściwości RenderingOptions z intuicyjnymi nazwami właściwości:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;

        string html = "<html><body><h1>Custom PDF</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("custom.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;

        string html = "<html><body><h1>Custom PDF</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("custom.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Engines.Chrome
Imports System

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()

        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.MarginTop = 10
        renderer.RenderingOptions.MarginBottom = 10

        Dim html As String = "<html><body><h1>Custom PDF</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)

        pdf.SaveAs("custom.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Klasa RenderingOptions zapewnia ujednolicone podejście do konfiguracji, w którym wartości marginesów są określane bezpośrednio w milimetrach bez obiektów opakowujących.

Bezpieczeństwo wątków i współbieżność

Bezpieczeństwo wątków stanowi kluczowy aspekt generowania plików PDF po stronie serwera, a obie biblioteki stosują zasadniczo różne podejścia.

Zarządzanie wątkami TuesPechkin

TuesPechkin reklamuje działanie bezpieczne dla wątków przez ThreadSafeConverter, ale implementacja ma udokumentowane ograniczenia:

//TuesPechkin- Even with ThreadSafeConverter, crashes under load
var converter = new TuesPechkin.ThreadSafeConverter(
    new TuesPechkin.RemotingToolset<PechkinBindings>());

// Under high load, applications may experience:
// - System.AccessViolationException
// - StackOverflowException
// - Process hangs indefinitely
// - Memory corruption
//TuesPechkin- Even with ThreadSafeConverter, crashes under load
var converter = new TuesPechkin.ThreadSafeConverter(
    new TuesPechkin.RemotingToolset<PechkinBindings>());

// Under high load, applications may experience:
// - System.AccessViolationException
// - StackOverflowException
// - Process hangs indefinitely
// - Memory corruption
' TuesPechkin- Even with ThreadSafeConverter, crashes under load
Dim converter = New TuesPechkin.ThreadSafeConverter(
    New TuesPechkin.RemotingToolset(Of PechkinBindings)())

' Under high load, applications may experience:
' - System.AccessViolationException
' - StackOverflowException
' - Process hangs indefinitely
' - Memory corruption
$vbLabelText   $csharpLabel

Biblioteka wkhtmltopdf, na której opiera się to rozwiązanie, nie została zaprojektowana z myślą o scenariuszach o wysokiej współbieżności i nawet przy zarządzaniu wątkami na poziomie opakowania nadal występują problemy ze stabilnością przy znacznym obciążeniu.

Rodzima wspolbieznosc IronPDF

IronPDF zapewnia natywną bezpieczeństwo wątków bez konieczności konfiguracji:

//IronPDF- Native thread safety
var renderer = new ChromePdfRenderer();

// Safe for concurrent use across multiple threads
// No AccessViolationException
// No process hangs
// Stable under high load
//IronPDF- Native thread safety
var renderer = new ChromePdfRenderer();

// Safe for concurrent use across multiple threads
// No AccessViolationException
// No process hangs
// Stable under high load
'IronPDF- Native thread safety
Dim renderer As New ChromePdfRenderer()

' Safe for concurrent use across multiple threads
' No AccessViolationException
' No process hangs
' Stable under high load
$vbLabelText   $csharpLabel

ChromePdfRenderer wewnętrznie obsługuje współbieżność, co pozwala programistom skupić się na logice aplikacji, a nie na synchronizacji wątków.

Obsługa nowoczesnych standardów CSS i JavaScript

Różnice między silnikami renderującymiTuesPechkiniIronPDFstają się najbardziej widoczne podczas pracy z nowoczesnymi technologiami internetowymi.

Ograniczenia renderowania TuesPechkin

Silnik Qt WebKit 4.8 autorstwa TuesPechkina powstał przed pojawieniem się nowoczesnych systemów układów CSS:


<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr);">
    <div>Grid Item 1</div>
    <div>Grid Item 2</div>
    <div>Grid Item 3</div>
</div>

<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr);">
    <div>Grid Item 1</div>
    <div>Grid Item 2</div>
    <div>Grid Item 3</div>
</div>
HTML

Aplikacje korzystające zTuesPechkinmuszą opierać się na układach tabelarycznych lub innych rozwiązaniach zastępczych CSS2.1, aby uzyskać projekty wielokolumnowe.

Nowoczesne renderowanie IronPDF

Silnik Chromium firmyIronPDFobsługuje wszystkie nowoczesne technologie CSS i JavaScript:

// Modern CSS works correctly with IronPDF
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Renders correctly with full Flexbox support
// Modern CSS works correctly with IronPDF
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Renders correctly with full Flexbox support
Dim html As String = "
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Renders correctly with full Flexbox support
$vbLabelText   $csharpLabel

Dzięki temu programiści mogą używać tego samego kodu HTML/CSS zarówno do wyświetlania stron internetowych, jak i generowania plików PDF, bez konieczności utrzymywania oddzielnych szablonów.

Kiedy zespoły rozważają alternatywy dla TuesPechkin

Istnieje kilka scenariuszy, w których zespoły programistów często rozważają alternatywy dla TuesPechkin:

Wymagania dotyczące bezpieczeństwa

Ponieważ luka CVE-2022-35583 została oceniona jako krytyczna (9,8/10), a biblioteka wkhtmltopdf, na której opiera się program, została oficjalnie wycofana, organizacje zobowiązane do przestrzegania wymogów bezpieczeństwa nie mogą dalej korzystać z TuesPechkin. Luka SSRF umożliwia atakującym uzyskanie dostępu do sieci wewnętrznych, kradzież danych uwierzytelniających oraz wyciek danych poprzez złośliwą zawartość HTML.

Wdrażanie nowoczesnych technologii internetowych

Zespoły korzystające z nowoczesnych frameworków frontendowych (React, Angular, Vue.js) lub systemów układów CSS (Flexbox, Grid) zauważają, żeTuesPechkinnie jest w stanie poprawnie renderować ich treści. Przestarzały silnik WebKit 4.8 nie obsługuje technologii, które są standardem od prawie dziesięciu lat.

Stabilność pod obciążeniem

Aplikacje działające po stronie serwera, doświadczające zawieszeń, zacięć lub błędów AccessViolationException przy współbieżnym generowaniu PDF, często śledzą te problemy do ograniczeń związanych z wątkami w TuesPechkin. Nawet z konfiguracją ThreadSafeConverter, podstawowa biblioteka wkhtmltopdf nie została zaprojektowana do środowisk o wysokiej współbieżności.

Wymagania dotyczące funkcji pliku PDF

TuesPechkin oferuje wyłącznie konwersję plików HTML do formatu PDF. Zespoły wymagające manipulacji plikami PDF (łączenie, dzielenie), podpisów cyfrowych, zgodności z PDF/A, wypełniania formularzy lub znakowania wodnego muszą dodać dodatkowe biblioteki lub rozważyć alternatywy, takie jak IronPDF, które zapewniają te możliwości natywnie.

Uproszczone wdrażanie

Wzorzec inicjalizacjiTuesPechkinz RemotingToolset, Win64EmbeddedDeployment i TempFolderDeployment dodaje złożoność wdrożenia. Natywne pliki binarne specyficzne dla platformy muszą być poprawnie skonfigurowane dla każdego środowiska docelowego.IronPDFeliminuje tę złożoność dzięki standardowej instalacji NuGet.

Przewodnik po mapowaniu API

Zespoły rozważające przejście zTuesPechkinnaIronPDFuznają to zestawienie za pomocne w zrozumieniu równoważności pojęć:

TuesPechkinIronPDF
StandardConverter / ThreadSafeConverterChromePdfRenderer
HtmlToPdfDocumentParametry metody
GlobalSettings.PaperSizeRenderingOptions.PaperSize
GlobalSettings.OrientationRenderingOptions.PaperOrientation
GlobalSettings.MarginsRenderingOptions.MarginTop/Bottom/Left/Right
ObjectSettings.HtmlTextRenderHtmlAsPdf(html)
ObjectSettings.PageUrlRenderUrlAsPdf(url)
RemotingToolset + DeploymentNie jest potrzebne
[page] placeholder{page} placeholder
[toPage] placeholder{total-pages} placeholder

Dodatkowe możliwości plików PDF

Oprócz konwersji HTML do PDF,IronPDFoferuje funkcje edycji dokumentów, którychTuesPechkinnie jest w stanie zapewnić:

Zgodność z platformą .NET i gotowość na przyszłość

Brak aktywności w rozwoju projektuTuesPechkinoznacza brak aktualizacji dla nowszych wersji .NET.IronPDFjest aktywnie rozwijany i regularnie aktualizowany, co zapewnia kompatybilność z .NET 8, .NET 9 oraz przyszłymi wersjami, w tym .NET 10, którego premiera przewidziana jest na 2026 rok. Obsługa async/await w całym API biblioteki jest zgodna z nowoczesnymi praktykami programistycznymi w języku C#, w tym z funkcjami dostępnymi w C# 13 i przewidywanymi możliwościami C# 14.

Wnioski

TuesPechkin iIronPDFreprezentują różne epoki generowania plików PDF w środowisku .NET.TuesPechkinoferuje bezpłatną nakładkę na wkhtmltopdf na licencji MIT, ale dziedziczy krytyczne luki w zabezpieczeniach, przestarzały silnik renderujący, złożone wymagania dotyczące zarządzania wątkami oraz problemy ze stabilnością pod obciążeniem. Technologia ta została wycofana w 2022 r. i nie są planowane żadne aktualizacje zabezpieczeń.

IronPDF stanowi nowoczesną, aktywnie rozwijaną alternatywę z silnikiem renderującym opartym na Chromium, który obsługuje aktualne technologie internetowe. Jego natywna bezpieczeństwo wątków, kompleksowe funkcje PDF oraz prosta konstrukcja API rozwiązują ograniczenia związane z opakowaniami wkhtmltopdf.

W przypadku zespołów korzystających obecnie zTuesPechkindecyzja o migracji wynika często z wymogów bezpieczeństwa, potrzeb związanych z jakością renderowania, obaw dotyczących stabilności lub wymagań dotyczących funkcji PDF wykraczających poza podstawową konwersję HTML. Mapowanie API między tymi dwiema bibliotekami jest proste, przy czymIronPDFzazwyczaj wymaga mniejszego nakładu kodu ze względu na uproszczone wzorce inicjalizacji i konfiguracji.

Aby uzyskać dodatkowe wskazówki dotyczące wdrażania, zapoznaj się z dokumentacją IronPDF oraz samouczkami obejmującymi konkretne przypadki użycia i zaawansowane funkcje.

Zwróć uwagęTuesPechkin i wkhtmltopdf sa zarejestrowanymi znakami towarowymi swoich wlascicieli. Ta strona nie jest powiazana ani popierana, ani sponsorowana przezTuesPechkinlub wkhtmltopdf. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.