Jak przeprowadzić migrację z DinkToPdf do IronPDF w języku C#
DinkToPdf wykorzystuje bibliotekę wkhtmltopdf, dziedzicząc wszystkie jej luki w zabezpieczeniach i ograniczenia techniczne. Zrozumienie tych kwestii ma kluczowe znaczenie dla oceny pilności migracji.
Krytyczne kwestie bezpieczeństwa
DinkToPdf dziedziczy niezałatane porady dotyczące bezpieczeństwa z wkhtmltopdf:
- CVE-2022-35583 (SSRF): Porada dotycząca Server-Side Request Forgery przeciw wkhtmltopdf 0.12.6 (CVSS 9.8 w NVD; zakwestionowane przez projekt źródłowy jako problem z sanitacją danych wejściowych aplikacji, a nie błąd biblioteki). Tak czy inaczej, nie zostanie to załatane.
- Archiwizowany projekt: Repozytorium
wkhtmltopdf/wkhtmltopdfzostało zarchiwizowane 2 stycznia 2023, a cała organizacja GitHubwkhtmltopdfzostała zarchiwizowana 10 lipca 2024. - Brak przyszłych łatek zabezpieczeń: Wszelkie znane lub przyszłe podatności nie zostaną naprawione upstream.
Problemy techniczne
| Problem | Wpływ |
|---|---|
| Bezpieczeństwo wątków | BasicConverter jest tylko jednowątkowy; SynchronizedConverter serializuje wywołania i nadal może powodować awarie po stronie natywnej pod obciążeniem |
| Pliki binarne | Złożona implementacja z binariami specyficznymi dla platformy libwkhtmltox |
| Ograniczenia CSS | Starsza gałąź QtWebKit—brak wsparcia dla nowoczesnych układów Flexbox/Grid |
| JavaScript | Niespójne wykonanie, przekroczenie limitów czasu |
| Renderowanie | Przestarzały silnik oparty na QtWebKit (wkhtmltopdf 0.12.6, ostatnie wydanie czerwiec 2020) |
| Konserwacja | DinkToPdf 1.0.8 ostatnio wydana 18 kwietnia 2017 na NuGet |
Porównanie architektur
| Aspekt | DinkToPdf | IronPDF |
|---|---|---|
| Bezpieczeństwo | CVE-2022-35583 (SSRF), niezałatane / zakwestionowane upstream | Brak znanych krytycznych CVE |
| Silnik renderujący | Starsza gałąź QtWebKit (wkhtmltopdf 0.12.6) | Nowoczesny Chromium |
| Bezpieczeństwo wątków | SynchronizedConverter serializuje wywołania; native-side crashes reported under load |
Zabezpieczone przed współbieżnością już w fazie projektowania |
| Zależności natywne | Binaria specyficzne dla platformy libwkhtmltox |
Zarządzany pakiet NuGet |
| Obsługa CSS | Brak nowoczesnegoFlexbox/Grid | PełnyCSS3 |
| JavaScript | Ograniczone, niespójne | Obsługiwane |
| Konserwacja | Ostatnie wydanieDinkToPdfkwiecień 2017; organizacja wkhtmltopdf zarchiwizowana lipiec 2024 | Aktywnie utrzymywane |
Porównanie funkcji
| Funkcja | DinkToPdf | IronPDF |
|---|---|---|
| HTML do PDF | ✅(przestarzały silnik) | ✅ (Chromium) |
| URL do pliku PDF | ✅ | ✅ |
| Niestandardowe marginesy | ✅ | ✅ |
| Nagłówki/stopki | ✅(ograniczone) | ✅(pełny kod HTML) |
| CSS3 | ❌Ograniczone | ✅Pełne |
| Flexbox/Grid | ❌ | ✅ |
| JavaScript | ⚠ Ograniczone | ✅Pełne |
| Manipulacja plikami PDF | ❌ | ✅ |
| Wypełnianie formularzy | ❌ | ✅ |
| Podpisy cyfrowe | ❌ | ✅ |
| Szyfrowanie | ❌ | ✅ |
| Znaki wodne | ❌ | ✅ |
| Scal/Podziel | ❌ | ✅ |
Przygotowania przed migracją
Wymagania wstępne
Upewnij się, że Twoje środowisko spełnia następujące wymagania:
- .NET Framework 4.6.2+, .NET Core 3.1+, or .NET 5/6/7/8/9/10
- Visual Studio 2019+ lub VS Code z rozszerzeniem C#
- Dostęp do menedżera pakietów NuGet
- Klucz licencyjny IronPDF(bezpłatna wersja próbna dostępna na stronie ironpdf.com)
Audyt wykorzystania DinkToPdf
Uruchom te polecenia w katalogu rozwiązania, aby zidentyfikować wszystkie odwołania do DinkToPdf:
# Find allDinkToPdfusages in your codebase
grep -r "using DinkToPdf" --include="*.cs" .
grep -r "SynchronizedConverter\|HtmlToPdfDocument\|ObjectSettings" --include="*.cs" .
# Find NuGet package references
grep -r "DinkToPdf" --include="*.csproj" .
# Find wkhtmltopdf binaries
find . -name "libwkhtmltox*"
# Find allDinkToPdfusages in your codebase
grep -r "using DinkToPdf" --include="*.cs" .
grep -r "SynchronizedConverter\|HtmlToPdfDocument\|ObjectSettings" --include="*.cs" .
# Find NuGet package references
grep -r "DinkToPdf" --include="*.csproj" .
# Find wkhtmltopdf binaries
find . -name "libwkhtmltox*"
Zmiany wymagające dostosowania
| Zmiana | DinkToPdf | IronPDF | Wpływ |
|---|---|---|---|
| Konwerter | SynchronizedConverter(new PdfTools()) |
ChromePdfRenderer |
Prostsze tworzenie instancji |
| Dokument | HtmlToPdfDocument |
Bezpośrednie wywołanie metody | Brak obiektu dokumentu |
| Ustawienia | GlobalSettings + ObjectSettings |
RenderingOptions |
Obiekt z pojedynczymi opcjami |
| Typ zwracanej wartości | byte[] |
PdfDocument |
Bardziej wydajny obiekt |
| Binarny | libwkhtmltox.dll/so |
Brak (zarządzane) | Usuń pliki natywne |
| Bezpieczeństwo wątków | BasicConverter jednowątkowy; SynchronizedConverter serializuje |
Domyślnie bezpieczne dla wątków | Prostszy kod |
| DI | Wymagany singleton | Każdy okres użytkowania | Elastyczny |
Proces migracji krok po kroku
Krok 1: Zaktualizuj pakiety NuGet
UsuńDinkToPdfi zainstaluj IronPDF:
# Remove DinkToPdf
dotnet remove package DinkToPdf
# Install IronPDF
dotnet add package IronPdf
# Remove DinkToPdf
dotnet remove package DinkToPdf
# Install IronPDF
dotnet add package IronPdf
Krok 2: Usuń natywne pliki binarne
Usuń z projektu następujące pliki specyficzne dla platformy:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
IronPDF nie ma żadnych natywnych zależności — wszystko jest kodem zarządzanym.
Krok 3: Zaktualizuj odniesienia do przestrzeni nazw
Zastąp przestrzenie nazwDinkToPdfna IronPDF:
// Remove these
using DinkToPdf;
using DinkToPdf.Contracts;
// Add this
using IronPdf;
// Remove these
using DinkToPdf;
using DinkToPdf.Contracts;
// Add this
using IronPdf;
Imports IronPdf
Krok 4: Skonfiguruj licencję
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Kompletna dokumentacja API
Mapowanie klas podstawowych
| DinkToPdf | IronPDF |
|---|---|
SynchronizedConverter |
ChromePdfRenderer |
BasicConverter |
ChromePdfRenderer |
PdfTools |
Nie jest potrzebne |
HtmlToPdfDocument |
Nie jest potrzebne |
GlobalSettings |
RenderingOptions |
ObjectSettings |
RenderingOptions |
MarginSettings |
Właściwości poszczególnych marginesów |
Mapowanie ustawień globalnych
| DinkToPdf GlobalSettings | Odpowiednik IronPDF |
|---|---|
ColorMode = ColorMode.Color |
Domyślnie (zawsze kolor) |
Orientation = Orientation.Portrait |
PaperOrientation = PdfPaperOrientation.Portrait |
Orientation = Orientation.Landscape |
PaperOrientation = PdfPaperOrientation.Landscape |
PaperSize = PaperKind.A4 |
PaperSize = PdfPaperSize.A4 |
Margins = new MarginSettings() |
Właściwości poszczególnych marginesów |
Mapowanie ustawień marginesów
| DinkToPdfMarginesy | Odpowiednik IronPDF |
|---|---|
Margins.Top = 10 |
MarginTop = 10 |
Margins.Bottom = 10 |
MarginBottom = 10 |
Margins.Left = 15 |
MarginLeft = 15 |
Margins.Right = 15 |
MarginRight = 15 |
Przykłady migracji kodu
Podstawowy HTML do PDF
Podstawowa konwersja pokazuje radykalne uproszczenie w porównaniu z rozbudowaną konfiguracjąDinkToPdfi usprawnionym API IronPDF.
Wdrożenie DinkToPdf:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>",
.WebSettings = New WebSettings() With {
.DefaultEncoding = "utf-8"
}
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Module
Wdrożenie IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF redukuje 20-wierszową konfiguracjęDinkToPdfdo 4 wierszy. Brak SynchronizedConverter, brak PdfTools, brak HtmlToPdfDocument, brak ObjectSettings — tylko renderowanie i zapis. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą konwersji HTML do PDF.
Konwersja adresów URL do formatu PDF
Wdrożenie DinkToPdf:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = New List(Of ObjectSettings) From {
New ObjectSettings() With {
.Page = "https://www.example.com"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Module
Wdrożenie 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
Funkcja RenderUrlAsPdfIronPDF zastępuje zagnieżdżoną konfigurację ObjectSettings.Page bezpośrednim wywołaniem metody. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą konwersji URL na PDF.
Ustawienia niestandardowe z orientacją poziomą i marginesami
Wdrożenie DinkToPdf:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("custom.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("custom.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Landscape,
.PaperSize = PaperKind.A4,
.Margins = New MarginSettings() With {
.Top = 10,
.Bottom = 10,
.Left = 15,
.Right = 15
}
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>",
.WebSettings = New WebSettings() With {
.DefaultEncoding = "utf-8"
}
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("custom.pdf", pdf)
End Sub
End Module
Wdrożenie IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 15;
renderer.RenderingOptions.MarginRight = 15;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>");
pdf.SaveAs("custom.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 15;
renderer.RenderingOptions.MarginRight = 15;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>");
pdf.SaveAs("custom.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 15
renderer.RenderingOptions.MarginRight = 15
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>")
pdf.SaveAs("custom.pdf")
End Sub
End Module
Funkcja RenderingOptionsIronPDF zastępuje zarówno GlobalSettings, jak i MarginSettings zintegrowanym, płynnym API. Aby uzyskać więcej opcji konfiguracyjnych, zapoznaj się z dokumentacją opcji renderowania.
Ważne uwagi dotyczące migracji
Usuń pliki binarne
Najważniejszym etapem porządkowania jest usunięcie natywnych plików binarnych wkhtmltopdf.IronPDF nie ma żadnych natywnych zależności:
# Delete native binaries
rm libwkhtmltox.* 2>/dev/null
# Delete native binaries
rm libwkhtmltox.* 2>/dev/null
Nie jest wymagany singleton
DokumentacjaDinkToPdfsugeruje zarejestrowanie SynchronizedConverter jako singleton. Biblioteka ChromePdfRendererIronPDF jest bezpieczna dla wątków w dowolnym czasie życia DI:
//DinkToPdf- typically registered as singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
//IronPDF- any lifetime works
services.AddScoped<ChromePdfRenderer>();
// Or just create inline:
var renderer = new ChromePdfRenderer();
//DinkToPdf- typically registered as singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
//IronPDF- any lifetime works
services.AddScoped<ChromePdfRenderer>();
// Or just create inline:
var renderer = new ChromePdfRenderer();
' DinkToPdf - typically registered as singleton
services.AddSingleton(GetType(IConverter), New SynchronizedConverter(New PdfTools()))
' IronPDF - any lifetime works
services.AddScoped(Of ChromePdfRenderer)()
' Or just create inline:
Dim renderer As New ChromePdfRenderer()
Bogatszy typ zwracanej wartości
DinkToPdf zwraca byte[].IronPDF zwraca PdfDocument z możliwościami manipulacji:
//DinkToPdfreturns byte[]
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
return File(pdf, "application/pdf");
//IronPDF returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
return File(pdf.BinaryData, "application/pdf");
//DinkToPdfreturns byte[]
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
return File(pdf, "application/pdf");
//IronPDF returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
return File(pdf.BinaryData, "application/pdf");
' DinkToPdf returns byte()
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
Return File(pdf, "application/pdf")
' IronPDF returns PdfDocument
Dim pdfDoc = renderer.RenderHtmlAsPdf(html)
pdfDoc.SaveAs("output.pdf")
Return File(pdfDoc.BinaryData, "application/pdf")
Pełna obsługa CSS3
Nowoczesne układy, które nie działają w DinkToPdf, działają idealnie w IronPDF:
//DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit)
var html = "<div style='display: flex;'>...</div>"; // Broken!
//IronPDF- full support (modern Chromium)
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html); // Works!
//DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit)
var html = "<div style='display: flex;'>...</div>"; // Broken!
//IronPDF- full support (modern Chromium)
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html); // Works!
' DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit)
Dim html As String = "<div style='display: flex;'>...</div>" ' Broken!
' IronPDF- full support (modern Chromium)
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!
Lista kontrolna po migracji
Po zakończeniu migracji kodu sprawdź, czy:
- Uruchom wszystkie testy jednostkowe, aby sprawdzić, czy generowanie plików PDF działa poprawnie
- Przetestuj scenariusze wielowątkowe (ścieżka
SynchronizedConverterserializuje wywołania i była podatna na awarie po stronie natywnej pod obciążeniem) - Porównaj jakość wyjściowego pliku PDF (renderowanie IronPDF w Chromium jest lepsze)
- Sprawdź renderowanie CSS (Flexbox/Grid teraz działa)
- Testowanie działania koduJavaScript(niezawodne w połączeniu z IronPDF)
- Zaktualizuj potoki CI/CD, aby usunąć instalację wkhtmltopdf
- Sprawdź, czy skanowanie bezpieczeństwa zakończyło się pomyślnie (brak flag CVE-2022-35583)
- Usuń natywne wdrażanie plików binarnych ze skryptów Docker/wdrożeniowych
Dodatkowe zasoby
- Dokumentacja IronPDF
- Samouczki dotyczące konwersji HTML do PDF
- Dokumentacja API
- Pakiet NuGet
- Opcje licencyjne
Migracja zDinkToPdfdo IronPDF eliminuje niezaktualizowaną powierzchnię ataku wkhtmltopdf (CVE-2022-35583), zserializowany model współbieżności SynchronizedConverter, wdrażanie binariów natywnych oraz starszą ścieżkę renderowania QtWebKit. Przejście na nowoczesny silnik Chromium dostarcza pełne wsparcie dla CSS3, niezawodne wykonywanieJavaScripti aktywnie utrzymywaną bibliotekę.

