IRONSOFTWAREHOME
FILMY

Jak przekonwertować plik DOCX na PDF przy użyciu języka C#

Curtis Chau
Curtis Chau
Updated: 18 maja 2026

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ę:

AspektHaukcode.DinkToPdfIronPDF
Silnik bazowywkhtmltopdf (fork QtWebKit, około 2015)Nowoczesny Chromium
Stan bezpieczeństwaporada CVE-2022-35583 (niezapatchowana/kwestionowana upstream)Brak znanych krytycznych CVE
Status projektuFork społecznościowy; upstream wkhtmltopdf zarchiwizowanyAktywnie utrzymywane
HTML5/CSS3Brak nowoczesnego Flexbox/GridPełny CSS3
JavaScriptOgraniczone, niespójnePełne wsparcie
Pliki binarnelibwkhtmltox.dll/.so/.dylib na platformeZarządzany pakiet NuGet
Bezpieczeństwo wątkówSynchronizedConverter serializuje wywolaniaZabezpieczone przed współbieżnością już w fazie projektowania
WsparcieSpołecznośćProfessional wsparcie
AktualizacjeOstatnie wydanie forka 1.5.95 (22 października 2024); wyżej wkhtmltopdf 0.12.6 (Cze 2020)Regularne wydania
LicencjaLGPL-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
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
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

Krok 4: Inicjalizacja licencji

Dodaj inicjalizację licencji podczas uruchamiania aplikacji:

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);
    }
}

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");
    }
}

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);
    }
}

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");
    }
}

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);
    }
}

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");
    }
}

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.DinkToPdfIronPDF
SynchronizedConverterChromePdfRenderer
BasicConverterChromePdfRenderer
PdfToolsNie dotyczy
IConverterNie dotyczy

Mapowanie konfiguracji dokumentu

Haukcode.DinkToPdfIronPDF
HtmlToPdfDocumentWywołanie metody
GlobalSettingsRenderingOptions
ObjectSettingsRenderingOptions
converter.Convert(doc)renderer.RenderHtmlAsPdf(html)

Mapowanie właściwości GlobalSettings

Właściwość GlobalSettingsWłaściwości IronPDF
ColorModeRenderingOptions.GrayScale
OrientationRenderingOptions.PaperOrientation
PaperSizeRenderingOptions.PaperSize
Margins.TopRenderingOptions.MarginTop
Margins.BottomRenderingOptions.MarginBottom
Margins.LeftRenderingOptions.MarginLeft
Margins.RightRenderingOptions.MarginRight

Mapowanie właściwości ObjectSettings

Właściwość ObjectSettingsOdpowiednik IronPDF
HtmlContentPierwszy parametr do RenderHtmlAsPdf()
Page (URL)renderer.RenderUrlAsPdf(url)
HeaderSettings.Right = "[page]"{page} w HtmlHeader.HtmlFragment

Migracja składni symboli zastępczych

Haukcode.DinkToPdfIronPDF
[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!

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

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

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