Migracja z Haukcode.DinkToPdf do IronPDF
Haukcode.DinkToPdf jest forkiem społecznościowym niegdyś popularnej biblioteki DinkToPdf, która owijka binarium wkhtmltopdf do konwersji HTML na PDF dla aplikacji .NET. Fork pozniej przemianowano na Haukcode.WkHtmlToPdfDotNet, z najnowszym wydaniem 1.5.95 opublikowanym 22 pazdziernika 2024 pod LGPL-3.0-or-later. Podczas gdy fork utrzymal paczke przy zyciu na NuGet po porzuceniu oryginalnej DinkToPdf (1.0.8, 18 kwietnia 2017), nadal laczy sie z tym samym zarchiwizowanym binarium wkhtmltopdf co jego rodzic. Repozytorium wkhtmltopdf/wkhtmltopdf zostalo zarchiwizowane 2 stycznia 2023, a cala organizacja wkhtmltopdf na GitHub zarchiwizowana 10 lipca 2024, wiec problemy upstream nie beda naprawiane.
Ten przewodnik oferuje sciezke migracji z Haukcode.DinkToPdf / Haukcode.WkHtmlToPdfDotNet do IronPDF, w tym instrukcje krok-po-kroku, porownania kodow i praktyczne przyklady dla deweloperow .NET szukajacych zmiany z zarchiwizowanego binarium wkhtmltopdf.
Porada dotycząca bezpieczeństwa: CVE-2022-35583
Haukcode.DinkToPdf dziedziczy poradę bezpieczeństwa względem swojego upstreamowego binarium wkhtmltopdf:
CVE-2022-35583 — poradnictwo dotyczące SSRF przeciwko wkhtmltopdf 0.12.6
Porada dotycząca polecenia oszustwa na poziomie serwera została opublikowana przeciwko wkhtmltopdf 0.12.6 (CVSS 9.8 w NVD; kwestionowana przez projekt wkhtmltopdf, który uznaje to za problem sanitacji danych wejściowych po stronie aplikacji, a nie błąd biblioteki). W każdym razie nie zostanie to załatane — upstream jest zarchiwizowany. Typowe wzory narażeń wskazywane w publicznych dyskusjach obejmują:
- Wektor ataku: Niezweryfikowana zawartość HTML może spowodować, że renderer pobierze wewnętrzne zasoby podczas konwersji
- Metadane AWS: Zadania do
http://169.254.169.254moga zwrocic metadane instancji, jesli renderer dziala na EC2 - Dostęp do wewnętrznej sieci: Usługi wewnętrzne mogą być osiągalne z hosta renderującego
- Lokalne dolaczanie plikow: Lokalne pliki moga byc czytelne za pomoca protokolu
file://
Nie oczekuje się żadnych poprawek upstream — repozytorium wkhtmltopdf zostało zarchiwizowane 2 stycznia 2023 roku, a ostatnie wydanie (0.12.6) miało miejsce w czerwcu 2020 roku.
IronPDF a Haukcode.DinkToPdf: porównanie funkcji
Zrozumienie różnic architektonicznych pomaga decydentom technicznym w ocenie inwestycji w migrację:
| Aspekt | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| Silnik bazowy | wkhtmltopdf (fork QtWebKit, około 2015) | Nowoczesny Chromium |
| Stan bezpieczeństwa | porada CVE-2022-35583 (niezapatchowana/kwestionowana upstream) | Brak znanych krytycznych CVE |
| Status projektu | Fork społecznościowy; upstream wkhtmltopdf zarchiwizowany | Aktywnie utrzymywane |
| HTML5/CSS3 | Brak nowoczesnego Flexbox/Grid | Pełny CSS3 |
| JavaScript | Ograniczone, niespójne | Pełne wsparcie |
| Pliki binarne | libwkhtmltox.dll/.so/.dylib na platforme |
Zarządzany pakiet NuGet |
| Bezpieczeństwo wątków | SynchronizedConverter serializuje wywolania |
Zabezpieczone przed współbieżnością już w fazie projektowania |
| Wsparcie | Społeczność | Professional wsparcie |
| Aktualizacje | Ostatnie wydanie forka 1.5.95 (22 października 2024); wyżej wkhtmltopdf 0.12.6 (Cze 2020) | Regularne wydania |
| Licencja | LGPL-3.0-or-later (fork) / MIT (original DinkToPdf) | Wersja komercyjna z bezpłatną wersją próbną |
Szybki start: Migracja z Haukcode.DinkToPdf do IronPDF
Migrację można rozpocząć natychmiast, wykonując te podstawowe kroki.
Krok 1: Usuń DinkToPdf i natywne pliki binarne
Usuń pakiety NuGet Haukcode.DinkToPdf:
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
Usuń natywne pliki binarne z projektu:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
Krok 2: Zainstaluj IronPDF
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Krok 3: Aktualizacja przestrzeni nazw
Zastąp przestrzenie nazw DinkToPdf na IronPDF:
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering; // For RenderingOptions
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering; // For RenderingOptions
Imports IronPdf
Imports IronPdf.Rendering
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
Podstawowa konwersja HTML do PDF
Najbardziej podstawowa operacja ujawnia różnicę w złożoności między tymi bibliotekami .NET do obsługi plików PDF.
Podejście Haukcode.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 = "<html><body><h1>Hello World</h1></body></html>",
}
}
};
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 = "<html><body><h1>Hello World</h1></body></html>",
}
}
};
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 List(Of ObjectSettings) From {
New ObjectSettings() With {
.HtmlContent = "<html><body><h1>Hello World</h1></body></html>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Module
Podejście IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System.IO
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Haukcode.DinkToPdf wymaga utworzenia SynchronizedConverter z PdfTools, skonstruowania HtmlToPdfDocument z zagnieżdzonymi GlobalSettings i Objects, dodania ObjectSettings z HtmlContent, wywolania converter.Convert() aby uzyskac surowe bajty i recznego zapisania do pliku za pomoca File.WriteAllBytes().
IronPDF upraszcza to do trzech linii: utworz ChromePdfRenderer, wywolaj RenderHtmlAsPdf(), i uzyj wbudowanej metody SaveAs().
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 strukturze.
Podejście Haukcode.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
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
Haukcode.DinkToPdf uzywa tego samego wzorca konstrukcji dokumentu z ObjectSettings.Page dla URL.IronPDF zapewnia dedykowana metode RenderUrlAsPdf(), ktora jasno wyraza 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.
Ustawienia strony niestandardowej
Konfiguracja orientacji, rozmiaru papieru i marginesów wymaga różnych podejść.
Podejście Haukcode.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.Letter,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("landscape.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.Letter,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("landscape.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.Letter,
.Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("landscape.pdf", pdf)
End Sub
End Module
Podejście IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
pdf.SaveAs("landscape.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
pdf.SaveAs("landscape.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 10
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>")
pdf.SaveAs("landscape.pdf")
End Sub
End Class
Haukcode.DinkToPdf zagniezdza ustawienia w GlobalSettings z oddzielnym obiektem MarginSettings.IronPDF zapewnia bezposrednie wlasciwosci RenderingOptions z jasnymi nazwami, takimi jak PaperSize, PaperOrientation, oraz indywidualnymi wlasciwosciami marginesow.
Haukcode.DinkToPdf API do IronPDF– dokumentacja API
To mapowanie przyspiesza migrację, pokazując bezpośrednie odpowiedniki API:
Mapowanie klas konwertera
| Haukcode.DinkToPdf | IronPDF |
|---|---|
SynchronizedConverter |
ChromePdfRenderer |
BasicConverter |
ChromePdfRenderer |
PdfTools |
Nie dotyczy |
IConverter |
Nie dotyczy |
Mapowanie konfiguracji dokumentu
| Haukcode.DinkToPdf | IronPDF |
|---|---|
HtmlToPdfDocument |
Wywołanie metody |
GlobalSettings |
RenderingOptions |
ObjectSettings |
RenderingOptions |
converter.Convert(doc) |
renderer.RenderHtmlAsPdf(html) |
Mapowanie właściwości GlobalSettings
| Właściwość GlobalSettings | Właściwości IronPDF |
|---|---|
ColorMode |
RenderingOptions.GrayScale |
Orientation |
RenderingOptions.PaperOrientation |
PaperSize |
RenderingOptions.PaperSize |
Margins.Top |
RenderingOptions.MarginTop |
Margins.Bottom |
RenderingOptions.MarginBottom |
Margins.Left |
RenderingOptions.MarginLeft |
Margins.Right |
RenderingOptions.MarginRight |
Mapowanie właściwości ObjectSettings
| Właściwość ObjectSettings | Odpowiednik IronPDF |
|---|---|
HtmlContent |
Pierwszy parametr do RenderHtmlAsPdf() |
Page (URL) |
renderer.RenderUrlAsPdf(url) |
HeaderSettings.Right = "[page]" |
{page} w HtmlHeader.HtmlFragment |
Migracja składni symboli zastępczych
| Haukcode.DinkToPdf | IronPDF |
|---|---|
[page] |
{page} |
[toPage] |
{total-pages} |
[date] |
{date} |
Typowe problemy związane z migracją i ich rozwiązania
Problem 1: Wymóg singletonu
Haukcode.DinkToPdf: Wymaga SynchronizedConverter jako singletona z powodu problemow z bezpieczenstwem watkow z natywnym binarium wkhtmltopdf.
Rozwiazanie: ChromePdfRendererIronPDF jest bezpieczny dla watkow z definicji — nie wymaga singletona:
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
' Before (DinkToPdf) - MUST be singleton
services.AddSingleton(GetType(IConverter), New SynchronizedConverter(New PdfTools()))
' After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton(Of IPdfService, IronPdfService)()
' Or services.AddTransient(Of IPdfService, IronPdfService)() - both are safe!
Problem 2: Natywne zależności binarne
Haukcode.DinkToPdf: Wymaga bibliotek natywnych specyficznych dla platformy (libwkhtmltox.dll/so/dylib).
Rozwiązanie:IronPDF jest samodzielnym rozwiązaniem bez natywnych zależności binarnych. Usuń te pliki po migracji:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
Problem 3: Różnice w typach zwracanych wartości
Haukcode.DinkToPdf: converter.Convert() zwraca bezposrednio byte[].
Rozwiazanie:IronPDF zwraca obiekt PdfDocument z wieloma opcjami wyjscia:
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directly
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directly
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes As Byte() = pdf.BinaryData ' Get bytes
pdf.SaveAs("output.pdf") ' Or save directly
Problem 4: Składnia symboli zastępczych nagłówków/stopek
Haukcode.DinkToPdf: Uzywa skladni nawiasow kwadratowych, takiej jak [page] i [toPage].
Rozwiązanie: Zaktualizuj do symbolów zastępczych nawiasów klamrowych IronPDF:
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
};
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
};
' Before (DinkToPdf)
HeaderSettings = New With {.Right = "Page [page] of [toPage]"}
' After (IronPDF)
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
}
Lista kontrolna migracji Haukcode.DinkToPdf
Zadania przed migracją
Przeprowadź audyt kodu źródłowego, aby zidentyfikować wszystkie przypadki użycia DinkToPdf:
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .
# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .
# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .
# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .
# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .
# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .
# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
Zadokumentuj bieżące konfiguracje GlobalSettings i ObjectSettings. Zidentyfikuj wszelki kod ładujący biblioteki natywne, który można usunąć.
Zadania związane z aktualizacją kodu
- Usuń pakiety NuGet DinkToPdf
- Zainstaluj pakiet NuGet IronPDF
- Zaktualizuj importy przestrzeni nazw z
DinkToPdfdoIronPdf - Zamien
SynchronizedConverternaChromePdfRenderer - Konwertuj wzorce
HtmlToPdfDocumentdo bezposrednich wywolan metod - Konwertuj
GlobalSettingsnaRenderingOptions - Konwertuj
ObjectSettingsnaRenderingOptions - Zaktualizuj skladnie zastepcza (
[page]→{page},[toPage]→{total-pages}) - Dodaj inicjalizację licencji IronPDF podczas uruchamiania
Zadania związane z porządkowaniem infrastruktury
- Usuń natywne pliki binarne (libwkhtmltox.*)
- Usuń kod ładujący bibliotekę natywną
- Usuń CustomAssemblyLoadContext, jeśli występuje
- Aktualizacja wstrzykiwania zależności (singleton nie jest już wymagany)
- Usuń kod wykrywania platformy dla plików binarnych natywnych
Testy po migracji
Po migracji należy zweryfikować następujące aspekty:
- Przetestuj konwersję HTML do PDF
- Przetestuj konwersję adresu URL do formatu PDF
- Sprawdź ustawienia strony (rozmiar, orientacja, marginesy)
- Sprawdź nagłówki i stopki z symbolami zastępczymi
- Przetestuj na rzeczywistych szablonach HTML
- Test wydajności pod obciążeniem
Kluczowe korzyści z migracji do IronPDF
Przejście z Haukcode.DinkToPdf na IronPDF zapewnia kilka kluczowych korzyści:
Bezpieczeństwo: Eliminuje lukę CVE-2022-35583 (SSRF) oraz inne luki w zabezpieczeniach wkhtmltopdf, które nigdy nie zostaną załatane.
Nowoczesny silnik renderujący: Wykorzystuje aktywnie aktualizowany Chromium zamiast porzuconego w 2015 roku Qt WebKit. Pełna obsługa HTML5, CSS3 i JavaScript.
Brak natywnych plików binarnych: Samodzielna biblioteka bez konieczności zarządzania bibliotekami DLL specyficznymi dla danej platformy. Ułatwia wdrażanie w systemach Windows, Linux i macOS.
Bezpieczenstwo watkow: Brak wymogu singletona—uzywaj ChromePdfRenderer swobodnie w dowolnym wzorcu, w tym przy inicjalizacji na zadanie.
Prostsze API: Bezposrednie wywolania metod (RenderHtmlAsPdf(), RenderUrlAsPdf()) zamiast skomplikowanej konstrukcji obiektu dokumentu.
Aktywny rozwój: Regularne wydania IronPDF zapewniają zgodność z bieżącymi wersjami .NET, w tym .NET Framework 4.6.2+, .NET Core 3.1+ i .NET 5/6/7/8/9/10.

