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" />
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
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
Zainstaluj IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Krok 2: Usuń natywne pliki binarne
Usuń te pliki i foldery z projektu:
wkhtmltox.dllwkhtmltopdf.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
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"
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
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
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
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
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
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
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!
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
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}"
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!
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
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" .
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
- Usuń pakiety NuGet autorstwa TuesPechkin
- Usuń natywne pliki binarne wkhtmltopdf
- Zainstaluj pakiet NuGet IronPDF
- Aktualizuj użycie sformułowań od
TuesPechkindoIronPdf - Dodaj inicjalizację klucza licencyjnego podczas uruchamiania
- Zastąp konwertery
ChromePdfRenderer - Konwertuj
GlobalSettingsdoRenderingOptions - Przekształć
ObjectSettingsna parametry metody - Zaktualizuj konfigurację marginesów do poszczególnych właściwości
- Aktualizuj składnię nagłówka/stopki na oparte na HTML
HtmlHeaderFooter - Napraw składnię placeholderów stron (
[page]→{page}) - 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.

