Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z TuesPechkin do IronPDF w języku C#

TuesPechkin od lat służy jako bezpieczna dla wątków nakładka na bibliotekę wkhtmltopdf, pomagając programistom .NET konwertować HTML na PDF. Jednak technologia wkhtmltopdf, na której opiera się to rozwiązanie, została zaktualizowana po raz ostatni w 2015 r. i oficjalnie wycofana w grudniu 2022 r. Powoduje to poważne ograniczenia w zakresie bezpieczeństwa, stabilności i renderowania, których zespoły programistów nie mogą już dłużej ignorować.

Niniejszy przewodnik zawiera kompletną ścieżkę migracji zTuesPechkindoIronPDFwraz z instrukcjami krok po kroku, porównaniami kodu i praktycznymi przykładami dla profesjonalnych programistów .NET rozważających tę zmianę.

Dlaczego warto przejść zTuesPechkinjuż teraz

Decyzja o migracji zTuesPechkinnie jest już opcjonalna dla zespołów programistycznych dbających o bezpieczeństwo. Biblioteka wkhtmltopdf, na której opiera się to narzędzie, zawiera krytyczne, niezałatane luki w zabezpieczeniach, które nigdy nie zostaną naprawione.

Krytyczna luka w zabezpieczeniach: CVE-2022-35583

Atrybut Wartość
CVE ID CVE-2022-35583
Waga KLUCZOWE (9,8/10)
Wektor ataku Sieć
Status NIGDY NIE ZOSTANIE POPRAWIONE
Dotyczy WSZYSTKIE wersjeTuesPechkin

Opiekunowie projektu wkhtmltopdf wyraźnie oświadczyli, że NIE będą naprawiać luk w zabezpieczeniach. Każda aplikacja korzystająca zTuesPechkinjest stale narażona na ataki typu Server-Side Request Forgery (SSRF).

Jak działa atak

Podczas przetwarzania kodu HTML dostarczonego przez użytkownika osoby atakujące mogą wstrzyknąć złośliwą zawartość:


<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-admin-panel:8080/api/users?export=all" />

<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-admin-panel:8080/api/users?export=all" />
HTML

Umożliwia to atakującym uzyskanie dostępu do punktów końcowych metadanych AWS/Azure/GCP, kradzież wewnętrznych danych API, skanowanie portów w sieciach wewnętrznych oraz wyciek poufnych danych konfiguracyjnych.

Kryzys technologiczny

TuesPechkin wykorzystuje bibliotekę wkhtmltopdf, która korzysta z Qt WebKit 4.8 — przestarzałej technologii sprzed ery Chrome. Oznacza to, że:

  • Brak obsługi Flexbox
  • Brak obsługi CSS Grid
  • Nieprawidłowe działanie kodu JavaScript
  • Brak obsługi ES6+

Kryzys stabilności

Nawet przy reklamowanym ThreadSafeConverter,TuesPechkinulega awarii przy dużym obciążeniu:

// ❌TuesPechkin- "ThreadSafeConverter" still crashes
var converter = new TuesPechkin.ThreadSafeConverter(
    new TuesPechkin.RemotingToolset<PechkinBindings>());

// Under high load, you'll see:
// System.AccessViolationException: Attempted to read or write protected memory
// Process terminated unexpectedly
// Converter hangs indefinitely
// ❌TuesPechkin- "ThreadSafeConverter" still crashes
var converter = new TuesPechkin.ThreadSafeConverter(
    new TuesPechkin.RemotingToolset<PechkinBindings>());

// Under high load, you'll see:
// System.AccessViolationException: Attempted to read or write protected memory
// Process terminated unexpectedly
// Converter hangs indefinitely
' ❌TuesPechkin- "ThreadSafeConverter" still crashes
Dim converter = New TuesPechkin.ThreadSafeConverter(
    New TuesPechkin.RemotingToolset(Of PechkinBindings)())

' Under high load, you'll see:
' System.AccessViolationException: Attempted to read or write protected memory
' Process terminated unexpectedly
' Converter hangs indefinitely
$vbLabelText   $csharpLabel

IronPDFvs TuesPechkin: Porównanie funkcji

Zrozumienie różnic architektonicznych pomaga decydentom technicznym w ocenie inwestycji w migrację:

Funkcja TuesPechkin IronPDF
Licencja Bezpłatne (licencja MIT) Komercjalne
Bezpieczeństwo wątków Wymaga ręcznego zarządzania Wsparcie native
Współbieżność Ograniczona, może ulegać awariom pod obciążeniem Solidny, obsługuje wysoką współbieżność
Rozwój Nieaktywne, ostatnia aktualizacja w 2015 r. Aktywne, ciągłe ulepszenia
Łatwość użytkowania Złożona konfiguracja Przyjazny dla użytkownika z przewodnikami
Dokumentacja Podstawowe Obszerne, z przykładami
Bezpieczeństwo ❌ Krytyczne luki CVE ✅ Brak znanych luk w zabezpieczeniach
HTML do PDF ⚠️ Przestarzały WebKit ✅ Modern Chromium
CSS3 ❌ Częściowe ✅ Obsługiwane
Flexbox/Grid ❌ Nieobsługiwane ✅ Obsługiwane
JavaScript ⚠️ Niewiarygodne ✅ Pełna obsługa ES6+
Manipulacja plikami PDF ❌ Niedostępne ✅ Pełne
Podpisy cyfrowe ❌ Niedostępne ✅ Pełne
Zgodność z PDF/A ❌ Niedostępne ✅ Pełne
Wypełnianie formularzy ❌ Niedostępne ✅ Pełne
Znaki wodne ❌ Niedostępne ✅ Pełne
Scal/Podziel ❌ Niedostępne ✅ Pełne

Szybki start: Migracja zTuesPechkindo IronPDF

Migrację można rozpocząć natychmiast, wykonując te podstawowe kroki.

Krok 1: Zastąp pakiety NuGet

Usuń wszystkie pakiety TuesPechkin:

# RemoveTuesPechkinand all related packages
dotnet remove package TuesPechkin
dotnet remove package TuesPechkin.Wkhtmltox.Win64
dotnet remove package TuesPechkin.Wkhtmltox.Win32
# RemoveTuesPechkinand all related packages
dotnet remove package TuesPechkin
dotnet remove package TuesPechkin.Wkhtmltox.Win64
dotnet remove package TuesPechkin.Wkhtmltox.Win32
SHELL

Zainstaluj IronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

Krok 2: Usuń natywne pliki binarne

Usuń te pliki i foldery z projektu:

  • wkhtmltox.dll
  • wkhtmltopdf.exe
  • Wszelkie pliki wkhtmlto*
  • TuesPechkin.Wkhtmltox folder

Krok 3: Aktualizacja przestrzeni nazw

Zastąp przestrzenie nazwTuesPechkinprzestrzenią nazw IronPdf:

// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;

// After (IronPDF)
using IronPdf;
// Before (TuesPechkin)
using TuesPechkin;
using TuesPechkin.Wkhtmltox.Win64;

// After (IronPDF)
using IronPdf;
' Before (TuesPechkin)
Imports TuesPechkin
Imports TuesPechkin.Wkhtmltox.Win64

' After (IronPDF)
Imports IronPdf
$vbLabelText   $csharpLabel

Krok 4: Inicjalizacja licencji

Dodaj inicjalizację licencji podczas uruchamiania aplikacji:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Przykłady migracji kodu

Konwersja HTML do PDF

Najczęstszy przypadek użycia pokazuje różnicę w złożoności między tymi bibliotekami .NET do obsługi plików PDF.

Podejście TuesPechkin:

// 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

Podejście IronPDF:

// 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

WersjaTuesPechkinwymaga utworzenia StandardConverter ze złożonym łańcuchem inicjalizacji: RemotingToolset, Win64EmbeddedDeployment oraz TempFolderDeployment. Należy również ręcznie zapisać bajty do pliku.

IronPDF całkowicie eliminuje tę procedurę. Utwórz ChromePdfRenderer, wyrenderuj HTML i zapisz. Kod jest samowystarczalny i nie wymaga znajomości zestawów narzędzi wdrożeniowych ani zarządzania plikami binarnymi specyficznymi dla danej platformy.

W przypadku zaawansowanych scenariuszy konwersji HTML do PDF zapoznaj się z przewodnikiem po konwersji HTML do PDF.

Konwersja adresów URL do formatu PDF

Konwersja adresów URL do formatu PDF wykazuje podobne różnice w stopniu złożoności.

Podejście TuesPechkin:

// 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

Podejście IronPDF:

// 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

TuesPechkin używa ObjectSettings.PageUrl zagnieżdżonego wewnątrz HtmlToPdfDocument.IronPDFudostępnia dedykowaną metodę RenderUrlAsPdf, która jasno wyraża intencję.

Zapoznaj się z dokumentacją dotyczącą konwersji adresów URL do formatu PDF, aby uzyskać informacje na temat uwierzytelniania i opcji niestandardowych nagłówków.

Niestandardowe ustawienia renderowania

Orientacja strony, rozmiar papieru i marginesy wymagają różnych podejść do konfiguracji.

Podejście TuesPechkin:

// 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

Podejście IronPDF:

// 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

TuesPechkin dzieli ustawienia na GlobalSettings dla opcji dotyczących całego dokumentu oraz ObjectSettings dla treści.IronPDFkonsoliduje wszystko w RenderingOptions z jasnymi, łatwo rozpoznawalnymi nazwami właściwości.

TuesPechkinAPI doIronPDF– dokumentacja API dla mapowania

To mapowanie przyspiesza migrację, pokazując bezpośrednie odpowiedniki API:

TuesPechkin IronPDF
StandardConverter ChromePdfRenderer
ThreadSafeConverter ChromePdfRenderer
HtmlToPdfDocument Parametry metody
GlobalSettings RenderingOptions
ObjectSettings.HtmlText RenderHtmlAsPdf(html)
ObjectSettings.PageUrl RenderUrlAsPdf(url)
GlobalSettings.PaperSize RenderingOptions.PaperSize
GlobalSettings.Orientation RenderingOptions.PaperOrientation
MarginSettings MarginTop, MarginBottom itp.
[page] miejsce na tekst {page} miejsce na tekst
[toPage] miejsce na tekst {total-pages} miejsce na tekst
RemotingToolset Nie jest potrzebne
Win64EmbeddedDeployment Nie jest potrzebne
TempFolderDeployment Nie jest potrzebne

Typowe problemy związane z migracją i ich rozwiązania

Problem 1: Złożony kod inicjalizacyjny

Problem:TuesPechkinwymaga skomplikowanej konfiguracji konwertera z wykorzystaniem zestawów narzędzi wdrożeniowych.

Rozwiązanie:IronPDFjest prosty:

// Before (TuesPechkin)
var converter = new StandardConverter(
    new RemotingToolset<PdfToolset>(
        new Win64EmbeddedDeployment(
            new TempFolderDeployment())));

// After (IronPDF)
var renderer = new ChromePdfRenderer();
// That's it!
// Before (TuesPechkin)
var converter = new StandardConverter(
    new RemotingToolset<PdfToolset>(
        new Win64EmbeddedDeployment(
            new TempFolderDeployment())));

// After (IronPDF)
var renderer = new ChromePdfRenderer();
// That's it!
' Before (TuesPechkin)
Dim converter = New StandardConverter(
    New RemotingToolset(Of PdfToolset)(
        New Win64EmbeddedDeployment(
            New TempFolderDeployment())))

' After (IronPDF)
Dim renderer = New ChromePdfRenderer()
' That's it!
$vbLabelText   $csharpLabel

Problem 2: Awarie związane z bezpieczeństwem wątków

Problem: ThreadSafeConverter firmyTuesPechkinnadal ulega awarii przy dużym obciążeniu z AccessViolationException.

Rozwiązanie:IronPDFma wbudowaną obsługę wielowątkowości — nie wymaga specjalnej konfiguracji:

//IronPDFis inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashes
//IronPDFis inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashes
'IronPDF is inherently thread-safe
Dim renderer As New ChromePdfRenderer()
' Use from any thread without crashes
$vbLabelText   $csharpLabel

Problem 3: Składnia symbolu zastępczego numeru strony

Problem:TuesPechkinużywa symboli zastępczych [page] i [toPage].

Rozwiązanie: Zaktualizuj do składni symboli zastępczych IronPDF:

// Before (TuesPechkin)
"Page [page] of [toPage]"

// After (IronPDF)
"Page {page} of {total-pages}"
// Before (TuesPechkin)
"Page [page] of [toPage]"

// After (IronPDF)
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Problem 4: Uszkodzony układ CSS

Problem: Układy Flexbox i Grid nie działają w TuesPechkin, ponieważ wkhtmltopdf używa Qt WebKit 4.8.

Rozwiązanie: Użyj odpowiedniego, nowoczesnego CSS z IronPDF:

// Remove table-based workarounds, use modern CSS
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// Works correctly with Chromium!
// Remove table-based workarounds, use modern CSS
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// Works correctly with Chromium!
' Remove table-based workarounds, use modern CSS
Dim html As String = "
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>"

Dim pdf = renderer.RenderHtmlAsPdf(html)
' Works correctly with Chromium!
$vbLabelText   $csharpLabel

Zagadnienie 5: Zarządzanie plikami binarnymi

Problem:TuesPechkinwymaga plików binarnych wkhtmltopdf dostosowanych do konkretnej platformy oraz konfiguracji ścieżki.

Rozwiązanie:IronPDFobsługuje wszystkie zależności za pośrednictwem NuGet — nie ma potrzeby zarządzania natywnymi plikami binarnymi:

# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries needed
# Just install the package
dotnet add package IronPdf
# No wkhtmltopdf binaries needed
SHELL

Lista kontrolna migracji TuesPechkin

Zadania przed migracją

Przeprowadź audyt kodu źródłowego, aby zidentyfikować wszystkie wystąpienia TuesPechkin:

grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .
grep -r "using TuesPechkin" --include="*.cs" .
grep -r "ThreadSafeConverter\|RemotingToolset" --include="*.cs" .
SHELL

Uwzględnij aktualne ustawienia GlobalSettings (rozmiar papieru, orientacja, marginesy). Dokument ObjectSettings konfiguracje (treść HTML, adresy URL). Zidentyfikuj implementacje nagłówków/stopek do konwersji. Zlokalizuj wszystkie pliki binarne wkhtmltopdf w celu usunięcia.

Zadania związane z aktualizacją kodu

  1. Usuń pakiety NuGet autorstwa TuesPechkin
  2. Usuń natywne pliki binarne wkhtmltopdf
  3. Zainstaluj pakiet IronPdf NuGet
  4. Zaktualizuj instrukcje using z TuesPechkin na IronPdf
  5. Dodaj inicjalizację klucza licencyjnego podczas uruchamiania
  6. Zastąp konwertery przez ChromePdfRenderer
  7. Zamień GlobalSettings na RenderingOptions
  8. Zamień ObjectSettings na parametry metody
  9. Zaktualizuj konfigurację marginesów do poszczególnych właściwości
  10. Zaktualizuj składnię nagłówków/stopek do formatu HTML HtmlHeaderFooter
  11. Popraw składnię symbolu zastępczego strony ([page]{page})
  12. Usuń cały kod dotyczący wdrażania/zestawu narzędzi

Testy po migracji

Po migracji należy zweryfikować następujące aspekty:

  • Uruchom wszystkie testy jednostkowe
  • Testuj scenariusze bezpieczne dla wątków (IronPDF obsługuje wielowątkowość bez awarii)
  • Porównaj jakość wydruku PDF (Chromium renderuje dokładniej)
  • Sprawdź renderowanie CSS (Flexbox i Grid już działają)
  • Testowanie wykonywania kodu JavaScript (obsługiwany jest teraz standard ES6+)
  • Test renderowania nagłówka/stopki
  • Testy wydajności operacji wsadowych
  • Skanowanie bezpieczeństwa w celu sprawdzenia, czy nie pozostały żadne pliki binarne wkhtmltopdf

Kluczowe korzyści z migracji do IronPDF

Przejście zTuesPechkinnaIronPDFzapewnia kilka kluczowych korzyści:

Bezpieczeństwo: Wyeliminowano lukę CVE-2022-35583 oraz inne luki w zabezpieczeniach biblioteki wkhtmltopdf. Silnik Chromium firmyIronPDFotrzymuje regularne aktualizacje zabezpieczeń.

Wbudowana bezpieczeństwo wątków: Koniec ze skomplikowanymi konfiguracjami ThreadSafeConverter. Koniec z awariami AccessViolationException pod obciążeniem.IronPDFautomatycznie obsługuje współbieżność.

Nowoczesny silnik renderujący: pełna obsługa CSS3, Flexbox, Grid oraz JavaScript ES6+. Twoje pliki PDF wyświetlają się dokładnie tak, jak treść wygląda w nowoczesnych przeglądarkach.

Uproszczone wdrażanie: brak konieczności zarządzania plikami binarnymi specyficznymi dla danej platformy. Bez RemotingToolset, Win64EmbeddedDeployment ani TempFolderDeployment. Wystarczy zainstalować pakiet NuGet.

Aktywny rozwój: W miarę jak do 2026 r. wzrośnie popularność .NET 10 i C# 14, regularne aktualizacjeIronPDFzapewnią zgodność z obecnymi i przyszłymi wersjami .NET.

Rozszerzone możliwości:TuesPechkinkonwertuje wyłącznie HTML na PDF.IronPDFoferuje funkcje edycji plików PDF, podpisów cyfrowych, zgodności z formatem PDF/A, wypełniania formularzy, znaków wodnych oraz operacji scalania i dzielenia plików.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie