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" />
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
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
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- Wszelkie pliki
wkhtmlto* TuesPechkin.Wkhtmltoxfolder
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 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
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 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
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 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!
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
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}"
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: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
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" .
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
- Usuń pakiety NuGet autorstwa TuesPechkin
- Usuń natywne pliki binarne wkhtmltopdf
- Zainstaluj pakiet IronPdf NuGet
- Zaktualizuj instrukcje using z
TuesPechkinnaIronPdf - Dodaj inicjalizację klucza licencyjnego podczas uruchamiania
- Zastąp konwertery przez
ChromePdfRenderer - Zamień
GlobalSettingsnaRenderingOptions - Zamień
ObjectSettingsna parametry metody - Zaktualizuj konfigurację marginesów do poszczególnych właściwości
- Zaktualizuj składnię nagłówków/stopek do formatu HTML
HtmlHeaderFooter - Popraw składnię symbolu zastępczego strony (
[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 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.

