Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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.254 w 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
SHELL

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
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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!
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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}"
}
$vbLabelText   $csharpLabel

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" .
SHELL

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

  1. Usuń pakiety NuGet DinkToPdf
  2. Zainstaluj pakiet IronPdf NuGet
  3. Zaktualizuj importy przestrzeni nazw z DinkToPdf na IronPdf
  4. Zastąp SynchronizedConverter przez ChromePdfRenderer
  5. Zamień wzorce HtmlToPdfDocument na bezpośrednie wywołania metod
  6. Zamień GlobalSettings na RenderingOptions
  7. Zamień ObjectSettings na RenderingOptions
  8. Zaktualizuj składnię symboli zastępczych ([page]{page}, [toPage]{total-pages})
  9. Dodaj inicjalizację licencjiIronPDFpodczas uruchamiania

Zadania związane z porządkowaniem infrastruktury

  1. Usuń natywne pliki binarne (libwkhtmltox.*)
  2. Usuń kod ładujący bibliotekę natywną
  3. Usuń CustomAssemblyLoadContext, jeśli występuje
  4. Aktualizacja wstrzykiwania zależności (singleton nie jest już wymagany)
  5. 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.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie