Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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.254 moga 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
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ż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
$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 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
$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 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!
$vbLabelText   $csharpLabel

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

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

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

  1. Usuń pakiety NuGet DinkToPdf
  2. Zainstaluj pakiet NuGet IronPDF
  3. Zaktualizuj importy przestrzeni nazw z DinkToPdf do IronPdf
  4. Zamien SynchronizedConverter na ChromePdfRenderer
  5. Konwertuj wzorce HtmlToPdfDocument do bezposrednich wywolan metod
  6. Konwertuj GlobalSettings na RenderingOptions
  7. Konwertuj ObjectSettings na RenderingOptions
  8. Zaktualizuj skladnie zastepcza ([page]{page}, [toPage]{total-pages})
  9. Dodaj inicjalizację licencji IronPDF podczas 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 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.

Zwróć uwagęDinkToPdf, Haukcode.DinkToPdf, Haukcode.WkHtmlToPdfDotNet i wkhtmltopdf są znakami towarowymi lub nazwami produktów ich odpowiednich właścicieli. Ta strona nie jest powiązana, wspierana ani sponsorowana przez żaden z tych projektów. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

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

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie