Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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

TuesPechkin przez lata służył jako bezpieczna dla wątków otoczka wokół natywnego binarnego wkhtmltopdf, pomagając programistom .NET przekształcać HTML na PDF. Jednak projekt wkhtmltopdf został zarchiwizowany na GitHubie w styczniu 2023 roku, a forka WebKit, na którym polega, pochodzi z około 2015 roku. To tworzy ograniczenia dotyczące bezpieczeństwa, stabilności i renderowania, które zespoły deweloperskie nie mogą już ignorować.

Niniejszy przewodnik zawiera kompletną ścieżkę migracji zTuesPechkindo IronPDF wraz 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ść
ID CVE 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 z reklamowanym ThreadSafeConverter,TuesPechkinzawiesza się 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

IronPDF vs TuesPechkin: Porównanie funkcji

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

Funkcja TuesPechkin IronPDF
Licencja Bezpłatny, open-source 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 ⚠ Zdezaktualizowany WebKit ✅ Nowoczesny Chromium
CSS3 ❌ Częściowe ✅ Obsługiwane
Flexbox/Grid ❌ Nieobsługiwane ✅ Obsługiwane
JavaScript ⚠ Niezawodny ✅ 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
  • Dowolne pliki wkhtmlto*
  • Folder TuesPechkin.Wkhtmltox

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 z złożonym łańcuchem inicjalizacyjnym: RemotingToolset, Win64EmbeddedDeployment i TempFolderDeployment. Należy również ręcznie zapisać bajty do pliku.

IronPDF całkowicie eliminuje tę procedurę. Utwórz ChromePdfRenderer, renderuj 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 w HtmlToPdfDocument.IronPDF zapewnia dedykowaną metodę RenderUrlAsPdf, która wyraźnie określa zamiar.

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
// NuGet: Install-Package TuesPechkin.Wkhtmltox.Win64
using TuesPechkin;
using System.Drawing.Printing;
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.PaperOrientation.Landscape,
                PaperSize = PaperKind.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
// NuGet: Install-Package TuesPechkin.Wkhtmltox.Win64
using TuesPechkin;
using System.Drawing.Printing;
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.PaperOrientation.Landscape,
                PaperSize = PaperKind.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.Drawing.Printing
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.PaperOrientation.Landscape,
                .PaperSize = PaperKind.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 rozdziela ustawienia na GlobalSettings dla opcji dotyczących całego dokumentu i ObjectSettings dla zawartości.IronPDF konsoliduje wszystko w RenderingOptions z jasnymi, łatwo odnajdywalnymi nazwami właściwości.

TuesPechkinAPI do IronPDF– 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, itd.
[page] placeholder {page} placeholder
[topage] placeholder {total-pages} placeholder
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:IronPDF jest 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: ThreadSafeConverterTuesPechkindalej zawiesza się przy dużym obciążeniu z AccessViolationException.

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

//IronPDF is inherently thread-safe
var renderer = new ChromePdfRenderer();
// Use from any thread without crashes
//IronPDF is 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:TuesPechkinuses [page] and [topage] placeholders.

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}"
' 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:IronPDF obsł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

Dokumentuj aktualne konfiguracje GlobalSettings (rozmiar papieru, orientacja, marginesy). Dokumentuj konfiguracje ObjectSettings (zawartość HTML, URL-e). 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 NuGet IronPDF
  4. Aktualizuj użycie sformułowań od TuesPechkin do IronPdf
  5. Dodaj inicjalizację klucza licencyjnego podczas uruchamiania
  6. Zastąp konwertery ChromePdfRenderer
  7. Konwertuj GlobalSettings do RenderingOptions
  8. Przekształć ObjectSettings na parametry metody
  9. Zaktualizuj konfigurację marginesów do poszczególnych właściwości
  10. Aktualizuj składnię nagłówka/stopki na oparte na HTML HtmlHeaderFooter
  11. Napraw składnię placeholderów stron ([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 zTuesPechkinna IronPDF zapewnia kilka kluczowych korzyści:

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

Bezpieczeństwo natywnego wątku: Koniec z złożonymi konfiguracjami ThreadSafeConverter. Koniec z awariami AccessViolationException pod obciążeniem.IronPDF automatycznie 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. Brak RemotingToolset, Win64EmbeddedDeployment ani TempFolderDeployment ceremonii. Wystarczy zainstalować pakiet NuGet.

Aktywna Praca Rozwojowa: Regularne aktualizacje IronPDF zapewniają zgodność z bieżącymi i przyszłymi wersjami .NET.

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

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.

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

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie