IRONSOFTWAREHOME
FILMY

IronPDF 2021: Chrome Rendering Engine EAP – przełomowe rozwiązanie w tworzeniu plików PDF!

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

DinkToPdf wykorzystuje bibliotekę wkhtmltopdf, dziedzicząc wszystkie jej luki w zabezpieczeniach i ograniczenia techniczne. Zrozumienie tych kwestii ma kluczowe znaczenie dla oceny pilności migracji.

Krytyczne kwestie bezpieczeństwa

DinkToPdf dziedziczy niezałatane porady dotyczące bezpieczeństwa z wkhtmltopdf:

  1. CVE-2022-35583 (SSRF): Porada dotycząca Server-Side Request Forgery przeciw wkhtmltopdf 0.12.6 (CVSS 9.8 w NVD; zakwestionowane przez projekt źródłowy jako problem z sanitacją danych wejściowych aplikacji, a nie błąd biblioteki). Tak czy inaczej, nie zostanie to załatane.
  2. Archiwizowany projekt: Repozytorium wkhtmltopdf/wkhtmltopdf zostało zarchiwizowane 2 stycznia 2023, a cała organizacja GitHub wkhtmltopdf została zarchiwizowana 10 lipca 2024.
  3. Brak przyszłych łatek zabezpieczeń: Wszelkie znane lub przyszłe podatności nie zostaną naprawione upstream.

Problemy techniczne

ProblemWpływ
Bezpieczeństwo wątkówBasicConverter jest tylko jednowątkowy; SynchronizedConverter serializuje wywołania i nadal może powodować awarie po stronie natywnej pod obciążeniem
Pliki binarneZłożona implementacja z binariami specyficznymi dla platformy libwkhtmltox
Ograniczenia CSSStarsza gałąź QtWebKit—brak wsparcia dla nowoczesnych układów Flexbox/Grid
JavaScriptNiespójne wykonanie, przekroczenie limitów czasu
RenderowaniePrzestarzały silnik oparty na QtWebKit (wkhtmltopdf 0.12.6, ostatnie wydanie czerwiec 2020)
KonserwacjaDinkToPdf 1.0.8 ostatnio wydana 18 kwietnia 2017 na NuGet

Porównanie architektur

AspektDinkToPdfIronPDF
BezpieczeństwoCVE-2022-35583 (SSRF), niezałatane / zakwestionowane upstreamBrak znanych krytycznych CVE
Silnik renderującyStarsza gałąź QtWebKit (wkhtmltopdf 0.12.6)Nowoczesny Chromium
Bezpieczeństwo wątkówSynchronizedConverter serializuje wywołania; native-side crashes reported under loadZabezpieczone przed współbieżnością już w fazie projektowania
Zależności natywneBinaria specyficzne dla platformy libwkhtmltoxZarządzany pakiet NuGet
Obsługa CSSBrak nowoczesnegoFlexbox/GridPełnyCSS3
JavaScriptOgraniczone, niespójneObsługiwane
KonserwacjaOstatnie wydanieDinkToPdfkwiecień 2017; organizacja wkhtmltopdf zarchiwizowana lipiec 2024Aktywnie utrzymywane

Porównanie funkcji

FunkcjaDinkToPdfIronPDF
HTML do PDF✅(przestarzały silnik)✅ (Chromium)
URL do pliku PDF
Niestandardowe marginesy
Nagłówki/stopki✅(ograniczone)✅(pełny kod HTML)
CSS3❌Ograniczone✅Pełne
Flexbox/Grid
JavaScript⚠ Ograniczone✅Pełne
Manipulacja plikami PDF
Wypełnianie formularzy
Podpisy cyfrowe
Szyfrowanie
Znaki wodne
Scal/Podziel

Przygotowania przed migracją

Wymagania wstępne

Upewnij się, że Twoje środowisko spełnia następujące wymagania:

  • .NET Framework 4.6.2+, .NET Core 3.1+, or .NET 5/6/7/8/9/10
  • Visual Studio 2019+ lub VS Code z rozszerzeniem C#
  • Dostęp do menedżera pakietów NuGet
  • Klucz licencyjny IronPDF(bezpłatna wersja próbna dostępna na stronie ironpdf.com)

Audyt wykorzystania DinkToPdf

Uruchom te polecenia w katalogu rozwiązania, aby zidentyfikować wszystkie odwołania do DinkToPdf:

# Find allDinkToPdfusages in your codebase
grep -r "using DinkToPdf" --include="*.cs" .
grep -r "SynchronizedConverter\|HtmlToPdfDocument\|ObjectSettings" --include="*.cs" .

# Find NuGet package references
grep -r "DinkToPdf" --include="*.csproj" .

# Find wkhtmltopdf binaries
find . -name "libwkhtmltox*"
SHELL

Zmiany wymagające dostosowania

ZmianaDinkToPdfIronPDFWpływ
KonwerterSynchronizedConverter(new PdfTools())ChromePdfRendererProstsze tworzenie instancji
DokumentHtmlToPdfDocumentBezpośrednie wywołanie metodyBrak obiektu dokumentu
UstawieniaGlobalSettings + ObjectSettingsRenderingOptionsObiekt z pojedynczymi opcjami
Typ zwracanej wartościbyte[]PdfDocumentBardziej wydajny obiekt
Binarnylibwkhtmltox.dll/soBrak (zarządzane)Usuń pliki natywne
Bezpieczeństwo wątkówBasicConverter jednowątkowy; SynchronizedConverter serializujeDomyślnie bezpieczne dla wątkówProstszy kod
DIWymagany singletonKażdy okres użytkowaniaElastyczny

Proces migracji krok po kroku

Krok 1: Zaktualizuj pakiety NuGet

UsuńDinkToPdfi zainstaluj IronPDF:

# Remove DinkToPdf
dotnet remove package DinkToPdf

# Install IronPDF
dotnet add package IronPdf
SHELL

Krok 2: Usuń natywne pliki binarne

Usuń z projektu następujące pliki specyficzne dla platformy:

  • libwkhtmltox.dll (Windows)
  • libwkhtmltox.so (Linux)
  • libwkhtmltox.dylib (macOS)

IronPDF nie ma żadnych natywnych zależności — wszystko jest kodem zarządzanym.

Krok 3: Zaktualizuj odniesienia do przestrzeni nazw

Zastąp przestrzenie nazwDinkToPdfna IronPDF:

// Remove these
using DinkToPdf;
using DinkToPdf.Contracts;

// Add this
using IronPdf;

Krok 4: Skonfiguruj licencję

// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Kompletna dokumentacja API

Mapowanie klas podstawowych

DinkToPdfIronPDF
SynchronizedConverterChromePdfRenderer
BasicConverterChromePdfRenderer
PdfToolsNie jest potrzebne
HtmlToPdfDocumentNie jest potrzebne
GlobalSettingsRenderingOptions
ObjectSettingsRenderingOptions
MarginSettingsWłaściwości poszczególnych marginesów

Mapowanie ustawień globalnych

DinkToPdf GlobalSettingsOdpowiednik IronPDF
ColorMode = ColorMode.ColorDomyślnie (zawsze kolor)
Orientation = Orientation.PortraitPaperOrientation = PdfPaperOrientation.Portrait
Orientation = Orientation.LandscapePaperOrientation = PdfPaperOrientation.Landscape
PaperSize = PaperKind.A4PaperSize = PdfPaperSize.A4
Margins = new MarginSettings()Właściwości poszczególnych marginesów

Mapowanie ustawień marginesów

DinkToPdfMarginesyOdpowiednik IronPDF
Margins.Top = 10MarginTop = 10
Margins.Bottom = 10MarginBottom = 10
Margins.Left = 15MarginLeft = 15
Margins.Right = 15MarginRight = 15

Przykłady migracji kodu

Podstawowy HTML do PDF

Podstawowa konwersja pokazuje radykalne uproszczenie w porównaniu z rozbudowaną konfiguracjąDinkToPdfi usprawnionym API IronPDF.

Wdrożenie DinkToPdf:

// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
            },
            Objects = {
                new ObjectSettings() {
                    HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>",
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}

Wdrożenie IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
        pdf.SaveAs("output.pdf");
    }
}

IronPDF redukuje 20-wierszową konfiguracjęDinkToPdfdo 4 wierszy. Brak SynchronizedConverter, brak PdfTools, brak HtmlToPdfDocument, brak ObjectSettings — tylko renderowanie i zapis. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą konwersji HTML do PDF.

Konwersja adresów URL do formatu PDF

Wdrożenie DinkToPdf:

// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
            },
            Objects = {
                new ObjectSettings() {
                    Page = "https://www.example.com",
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}

Wdrożenie IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

Funkcja RenderUrlAsPdfIronPDF zastępuje zagnieżdżoną konfigurację ObjectSettings.Page bezpośrednim wywołaniem metody. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą konwersji URL na PDF.

Ustawienia niestandardowe z orientacją poziomą i marginesami

Wdrożenie DinkToPdf:

// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Landscape,
                PaperSize = PaperKind.A4,
                Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 }
            },
            Objects = {
                new ObjectSettings() {
                    HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>",
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("custom.pdf", pdf);
    }
}

Wdrożenie IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 15;
        renderer.RenderingOptions.MarginRight = 15;
        
        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>");
        pdf.SaveAs("custom.pdf");
    }
}

Funkcja RenderingOptionsIronPDF zastępuje zarówno GlobalSettings, jak i MarginSettings zintegrowanym, płynnym API. Aby uzyskać więcej opcji konfiguracyjnych, zapoznaj się z dokumentacją opcji renderowania.

Ważne uwagi dotyczące migracji

Usuń pliki binarne

Najważniejszym etapem porządkowania jest usunięcie natywnych plików binarnych wkhtmltopdf.IronPDF nie ma żadnych natywnych zależności:

# Delete native binaries
rm libwkhtmltox.* 2>/dev/null
SHELL

Nie jest wymagany singleton

DokumentacjaDinkToPdfsugeruje zarejestrowanie SynchronizedConverter jako singleton. Biblioteka ChromePdfRendererIronPDF jest bezpieczna dla wątków w dowolnym czasie życia DI:

//DinkToPdf- typically registered as singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));

//IronPDF- any lifetime works
services.AddScoped<ChromePdfRenderer>();
// Or just create inline:
var renderer = new ChromePdfRenderer();
C#

Bogatszy typ zwracanej wartości

DinkToPdf zwraca byte[].IronPDF zwraca PdfDocument z możliwościami manipulacji:

//DinkToPdfreturns byte[]
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
return File(pdf, "application/pdf");

//IronPDF returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
return File(pdf.BinaryData, "application/pdf");
C#

Pełna obsługa CSS3

Nowoczesne układy, które nie działają w DinkToPdf, działają idealnie w IronPDF:

//DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit)
var html = "<div style='display: flex;'>...</div>";  // Broken!

//IronPDF- full support (modern Chromium)
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>";
var pdf = renderer.RenderHtmlAsPdf(html);  // Works!

Lista kontrolna po migracji

Po zakończeniu migracji kodu sprawdź, czy:

  • Uruchom wszystkie testy jednostkowe, aby sprawdzić, czy generowanie plików PDF działa poprawnie
  • Przetestuj scenariusze wielowątkowe (ścieżka SynchronizedConverter serializuje wywołania i była podatna na awarie po stronie natywnej pod obciążeniem)
  • Porównaj jakość wyjściowego pliku PDF (renderowanie IronPDF w Chromium jest lepsze)
  • Sprawdź renderowanie CSS (Flexbox/Grid teraz działa)
  • Testowanie działania koduJavaScript(niezawodne w połączeniu z IronPDF)
  • Zaktualizuj potoki CI/CD, aby usunąć instalację wkhtmltopdf
  • Sprawdź, czy skanowanie bezpieczeństwa zakończyło się pomyślnie (brak flag CVE-2022-35583)
  • Usuń natywne wdrażanie plików binarnych ze skryptów Docker/wdrożeniowych

Dodatkowe zasoby


Migracja zDinkToPdfdo IronPDF eliminuje niezaktualizowaną powierzchnię ataku wkhtmltopdf (CVE-2022-35583), zserializowany model współbieżności SynchronizedConverter, wdrażanie binariów natywnych oraz starszą ścieżkę renderowania QtWebKit. Przejście na nowoczesny silnik Chromium dostarcza pełne wsparcie dla CSS3, niezawodne wykonywanieJavaScripti aktywnie utrzymywaną bibliotekę.

Zwróć uwagę: DinkToPdf i wkhtmltopdf są zarejestrowanymi znakami towarowymi odpowiednich właścicieli. Ta strona nie jest powiązana, wspierana ani sponsorowana przezDinkToPdflub wkhtmltopdf. 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ęczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta