Migracja z Haukcode.DinkToPdf do IronPDF
Haukcode.DinkToPdf jest kontynuacją niegdyś popularnej biblioteki DinkToPdf, która wykorzystuje plik binarny wkhtmltopdf do konwersji HTML na PDF dla aplikacji .NET. Chociaż Haukcode.DinkToPdf nadążał za .NET Core po tym, jak pierwotny projekt utknął w martwym punkcie, niesie ze sobą poważne problemy związane z bezpieczeństwem wynikające z jego zależności od upstreamu. Projekt wkhtmltopdf został zarchiwizowany w styczniu 2023 r., więc te problemy nigdy nie zostaną rozwiązane.
Niniejszy przewodnik zawiera szczegółowy plan migracji z Haukcode.DinkToPdf do IronPDF, w tym instrukcje krok po kroku, porównania kodu i praktyczne przykłady dla profesjonalnych programistów .NET, którzy chcą wyeliminować zagrożenia bezpieczeństwa ze swoich procesów generowania plików PDF.
Krytyczne ostrzeżenie dotyczące bezpieczeństwa: CVE-2022-35583
Haukcode.DinkToPdf dziedziczy poważną lukę w zabezpieczeniach po wkhtmltopdf, której nie da się usunąć:
CVE-2022-35583 — Krytyczna luka SSRF (CVSS 9,8)
Biblioteka wkhtmltopdf (oraz wszystkie nakładki, w tym Haukcode.DinkToPdf) jest podatna na ataki typu Server-Side Request Forgery (SSRF):
- Wektor ataku: złośliwa zawartość HTML może spowodować, że serwer pobierze zasoby wewnętrzne
- Atak na metadane AWS: Możliwość uzyskania dostępu do
http://169.254.169.254w celu kradzieży danych uwierzytelniających AWS - Dostęp do sieci wewnętrznej: Możliwość skanowania i uzyskiwania dostępu do usług wewnętrznych
- Włączanie plików lokalnych: Możliwość odczytu plików lokalnych za pośrednictwem protokołu
file:// - Wpływ: Możliwe całkowite przejęcie infrastruktury
Nie ma żadnej poprawki dla tej luki, ponieważ projekt wkhtmltopdf został porzucony i zarchiwizowany w 2023 roku. Ostatnią wydaną wersją była wersja 0.12.6 z 2020 roku.
IronPDFa Haukcode.DinkToPdf: porównanie funkcji
Zrozumienie różnic architektonicznych pomaga decydentom technicznym w ocenie inwestycji w migrację:
| Aspekt | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| Silnik bazowy | wkhtmltopdf (Qt WebKit ~2015) | Chromium (regularnie aktualizowane) |
| Stan bezpieczeństwa | CVE-2022-35583 (KLUCZOWE, niemożliwe do naprawienia) | Aktywnie aktualizowane |
| Status projektu | Rozwidlenie porzuconego projektu | Aktywnie rozwijane |
| HTML5/CSS3 | Ograniczone | Obsługiwane |
| JavaScript | Ograniczone, niezabezpieczone | Pełny silnik V8 |
| Pliki binarne | Wymagane (specyficzne dla platformy) | Samodzielny |
| Bezpieczeństwo wątków | Wymagany wzorzec singleton | Zabezpieczone przed współbieżnością już w fazie projektowania |
| Wsparcie | Tylko dla społeczności | Professional wsparcie |
| Aktualizacje | Nie przewiduje się żadnych | Regularne wydania |
| Licencja | MIT (bezpłatne) | 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żdżonymi GlobalSettings i Objects, dodanie ObjectSettings z HtmlContent, wywołanie converter.Convert() w celu uzyskania surowych bajtów oraz ręczne zapisanie do pliku za pomocą File.WriteAllBytes().
IronPDF upraszcza to do trzech wierszy: utwórz ChromePdfRenderer, wywołaj RenderHtmlAsPdf() i użyj 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 wykorzystuje ten sam wzorzec tworzenia dokumentów z ObjectSettings.Page dla adresów URL.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.
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 umieszcza ustawienia wewnątrz GlobalSettings z oddzielnym obiektem MarginSettings.IronPDFudostępnia bezpośrednie właściwości RenderingOptions o jasnych nazwach, takich jak PaperSize, PaperOrientation oraz indywidualne właściwości marginesów.
Haukcode.DinkToPdf API doIronPDF– 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ściIronPDF |
|---|---|
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 | OdpowiednikIronPDF |
|---|---|
HtmlContent |
Pierwszy parametr do RenderHtmlAsPdf() |
Page (URL) |
renderer.RenderUrlAsPdf(url) |
HeaderSettings.Right = "[page]" |
TextHeader.RightText = "{page}" |
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 singletonu ze względu na problemy z bezpieczeństwem wątków w natywnym pliku binarnym wkhtmltopdf.
Rozwiązanie: ChromePdfRenderer firmyIronPDFjest z założenia bezpieczny dla wątków — nie wymaga singletonu:
// 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:IronPDFjest 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 bezpośrednio byte[].
Rozwiązanie:IronPDFzwraca obiekt PdfDocument z wieloma opcjami wyjściowymi:
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: Używa składni z nawiasami kwadratowymi, np. [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.TextHeader = new TextHeaderFooter
{
RightText = "Page {page} of {total-pages}"
};
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
RightText = "Page {page} of {total-pages}"
};
' Before (DinkToPdf)
HeaderSettings = New With {.Right = "Page [page] of [toPage]"}
' After (IronPDF)
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
.RightText = "Page {page} of {total-pages}"
}
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" .
Uwzględnij aktualne 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 IronPdf NuGet
- Zaktualizuj importy przestrzeni nazw z
DinkToPdfnaIronPdf - Zastąp
SynchronizedConverterprzezChromePdfRenderer - Zamień wzorce
HtmlToPdfDocumentna bezpośrednie wywołania metod - Zamień
GlobalSettingsnaRenderingOptions - Zamień
ObjectSettingsnaRenderingOptions - Zaktualizuj składnię symboli zastępczych (
[page]→{page},[toPage]→{total-pages}) - Dodaj inicjalizację licencjiIronPDFpodczas 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 naIronPDFzapewnia 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.
Bezpieczeństwo wątków: Brak wymogu singletonu — używaj ChromePdfRenderer swobodnie w dowolnym schemacie, w tym przy instancjonowaniu na żądanie.
Prostsze API: bezpośrednie wywołania metod (RenderHtmlAsPdf(), RenderUrlAsPdf()) zamiast skomplikowanego tworzenia obiektów dokumentów.
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.

