IRONSOFTWAREHOME
FILMY

Jak zarządzać czcionkami podczas konwersji HTML do PDF

Curtis Chau
Curtis Chau
Updated: 18 maja 2026

EO.PDF stwarza kilka wyzwań architektonicznych, które skłaniają zespoły programistów do rozważania alternatywnych rozwiązań. Zrozumienie tych kwestii jest niezbędne do zaplanowania strategii migracji.

Problemy z plikiem EO.PDF

  1. Powiązania Chromium: EO.Pdf (aktualna wersja NuGet 26.1.34, marzec 2026) dostarcza własny renderer oparty na Chromium, co zwiększa ślad instalacji w porównaniu z bibliotekami nie opartymi na Chromium i dodaje wagę do obrazów Docker i potoków CI/CD.

  2. Dziedzictwo architektury: Konwerter HTML-to-PDF EO.Pdf został początkowo stworzony na wbudowanym silniku Internet Explorer / Trident, zanim projekt przeszedł na renderer oparty na Chromium. Przejście pozostawiło za sobą pewne dziwactwa API i różnice w zachowaniu między wersjami.

  3. Tylko Windows na .NET Core: Pomimo marketingu jako "cross-platform", dokumentacja .NET Core mówi, że EO.Pdf wspiera .NET Core 3.1+ i .NET 5/6 tylko na Windows — Linux i macOS nie są oficjalnie wspierane.

  4. Globalne opcje statyczne: Głównym punktem wyjścia HTML do PDF w EO.Pdf jest statyczna klasa HtmlToPdf z dzielonym HtmlToPdf.Options. Zmiana tego globalnego stanu z wielu wątków nie jest bezpieczna i jest kłopotliwa w wielo-wynajmowych aplikacjach internetowych.

  5. Płatna licencja komercyjna: EO.Pdf jest sprzedawane jako Single, 3-License Bundle, Corporate i Corporate Plus (brak trwałej darmowej wersji — tylko 30-dniowa wersja próbna z oznaczeniem wodnym). Dokładne ceny znajdują się na stronie zamówienia.

Porównanie architektur

AspektEO.PdfIronPDF
RendererPowszechny Chromium (przeszedł z IE/Trident)Osadzone Chromium
Kwestie związane z dziedzictwembagaż migracji z IE/TridentZbudowany na Chromium od początku
Obsługa platformTylko Windows na .NET CoreWindows, Linux, macOS, Docker, Azure
KonfiguracjaStatyczna HtmlToPdf.Options (nie jest bezpieczna dla wątków)Oparta na instancji ChromePdfRenderer (bezpieczna dla wątków)
Projektowanie APIMieszany (statyczny HtmlToPdf + model obiektowy ACM)Zunifikowany ChromePdfRenderer + HTML/CSS
Model licencjiSingle / 3-License / Corporate / Corporate Plus (30-dniowy okres próbny)Komercyjna per developer; Darmowa wersja próbna
Nowoczesny .NET.NET Framework + .NET Core 3.1+ (Windows only).NET Framework, .NET 6/7/8/9 wieloplatformowo
Obsługa asynchronicznaOgraniczonePełny RenderHtmlAsPdfAsync / RenderUrlAsPdfAsync

Kluczowe korzyści z migracji

  1. Cross-platform na .NET Core / .NET 6+: Działa na Linux, macOS i Docker — nie tylko Windows
  2. Thread-Safe Configuration: Opcje renderera oparte na instancji zamiast statycznych globalnych
  3. Nowoczesny API: Spójne nazwy metod — RenderHtmlAsPdf, RenderUrlAsPdf, PdfDocument.Merge
  4. Pełne wsparcie asynchroniczne: RenderHtmlAsPdfAsync i RenderUrlAsPdfAsync dla nieblokujących potoków
  5. Dokumentacja: Rozbudowane samouczki, poradniki i aktywna dokumentacja obiektowa

Przygotowania przed migracją

Wymagania wstępne

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

  • .NET Framework 4.6.2+ lub .NET Core 3.1 / .NET 5-9
  • 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)

Sprawdź użycie pliku EO.PDF

Uruchom te polecenia w katalogu rozwiązania, aby zidentyfikować wszystkie odwołania do plików EO.PDF:

# Find all EO.Pdf references
grep -r "EO.Pdf\|HtmlToPdf\|AcmRender\|PdfDocument" --include="*.cs" .

# Check NuGet packages
dotnet list package | grep -i "EO.Pdf"
SHELL

Typowe przestrzenie nazw EO.PDF, na które należy zwrócić uwagę:

  • EO.Pdf - Podstawowe HTML do PDF
  • EO.Pdf.Acm - Zaawansowany Model Treści (ACM)
  • EO.Pdf.Contents - Manipulacja treścią na niskim poziomie
  • EO.Pdf.Drawing - Operacje graficzne

Zrozumienie zmiany wzorca podstawowego

Najważniejszą różnicą architektoniczną między EO.PDF a IronPDF jest zakres konfiguracji. EO.PDF wykorzystuje metody statyczne z opcjami globalnymi, które mają wpływ na wszystkie konwersje — jest to wzorzec powodujący problemy z bezpieczeństwem wątków w aplikacjach internetowych.IronPDF wykorzystuje renderery oparte na instancjach z opcjami lokalnymi, co zapewnia izolację każdej konwersji.

Proces migracji krok po kroku

Krok 1: Zaktualizuj pakiety NuGet

Usuń EO.Pdf i zainstaluj IronPDF:

# Remove EO.Pdf
dotnet remove package EO.Pdf

# Install IronPDF
dotnet add package IronPdf
SHELL

Krok 2: Aktualizacja odniesień do przestrzeni nazw

Zastąp przestrzenie nazw EO.PDF przez IronPDF:

// Remove these
using EO.Pdf;
using EO.Pdf.Acm;

// Add this
using IronPdf;

Krok 3: Skonfiguruj licencję

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

Kompletna dokumentacja API

Mapowanie klas podstawowych

Klasa EO.PDFOdpowiednik IronPDF
HtmlToPdfChromePdfRenderer
PdfDocumentPdfDocument
HtmlToPdfOptionsChromePdfRenderOptions
AcmRenderNie jest potrzebne
AcmTextHTML <span>, <p>
AcmBlockHTML <div>

Mapowanie metod

Metoda EO.PDFMetoda IronPDF
HtmlToPdf.ConvertHtml(html, path)renderer.RenderHtmlAsPdf(html) potem SaveAs(path)
HtmlToPdf.ConvertUrl(url, path)renderer.RenderUrlAsPdf(url) potem SaveAs(path)
PdfDocument.Save(path)pdf.SaveAs(path)
new PdfDocument(path)PdfDocument.FromFile(path)
PdfDocument.Merge(doc1, doc2) (statyczny)PdfDocument.Merge(doc1, doc2) (statyczny)

Mapowanie opcji

Opcja EO.PDFIronPDF RenderingOptions
Options.PageSize = PdfPageSizes.A4PaperSize = PdfPaperSize.A4
Options.OutputArea (RectangleF)MarginTop, MarginBottom, itd.

Przykłady migracji kodu

Konwersja HTML do PDF

Podstawowa konwersja HTML do PDF ilustruje przejście od metod statycznych do renderowania opartego na instancjach.

Wdrożenie EO.PDF:

// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF generated from HTML.</p></body></html>";
        
        HtmlToPdf.ConvertHtml(html, "output.pdf");
        
        Console.WriteLine("PDF created successfully!");
    }
}

Wdrożenie IronPDF:

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

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF generated from HTML.</p></body></html>";
        
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created successfully!");
    }
}

Dwustopniowy wzorzec IronPDF(generowanie, a następnie zapis) zapewnia dostęp do obiektu PdfDocument do dodatkowej manipulacji przed zapisem. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą konwersji HTML do PDF.

Konwersja adresów URL do formatu PDF

Wdrożenie EO.PDF:

// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        string url = "https://www.example.com";
        
        HtmlToPdf.ConvertUrl(url, "webpage.pdf");
        
        Console.WriteLine("PDF from URL created successfully!");
    }
}

Wdrożenie IronPDF:

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

class Program
{
    static void Main()
    {
        string url = "https://www.example.com";
        
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");
        
        Console.WriteLine("PDF from URL created successfully!");
    }
}

RenderUrlAsPdfIronPDF zapewnia pełne wykonanie JavaScript i nowoczesne wsparcie CSS. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą konwersji URL na PDF.

Plik HTML z niestandardowymi ustawieniami

Ten przykład demonstruje kluczową różnicę we wzorcach konfiguracji — OutputArea EO.Pdf z calami versus indywidualne właściwości marginesów IronPDF w milimetrach.

Wdrożenie EO.PDF:

// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdfOptions options = new HtmlToPdfOptions();
        options.PageSize = PdfPageSizes.A4;
        options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);
        
        HtmlToPdf.ConvertUrl("file:///C:/input.html", "output.pdf", options);
        Console.WriteLine("PDF with custom settings created.");
    }
}

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.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;
        
        var pdf = renderer.RenderHtmlFileAsPdf("C:/input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF with custom settings created.");
    }
}

Zwróć uwagę na konwersję jednostek: EO.Pdf używa cali w OutputArea, podczas gdy IronPDF wykorzystuje milimetry. Konwertuj przy użyciu: inches × 25.4 = mm. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją opcji renderowania.

Łączenie wielu plików PDF

Obie biblioteki udostępniają statyczny PdfDocument.Merge do łączenia dokumentów — EO.Pdf nie ma metody Append w instancji, więc wszelki kod używający doc.Append(other) jest nieprawidłowy i musi zostać przeniesiony do Merge.

Wdrożenie EO.PDF:

// NuGet: Install-Package EO.Pdf
using EO.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument doc1 = new PdfDocument("file1.pdf");
        PdfDocument doc2 = new PdfDocument("file2.pdf");

        // EO.Pdf has no Append; merge is a static method that returns a new PdfDocument.
        PdfDocument mergedDoc = PdfDocument.Merge(doc1, doc2);

        mergedDoc.Save("merged.pdf");

        Console.WriteLine("PDFs merged successfully!");
    }
}

Wdrożenie IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("file1.pdf");
        var pdf2 = PdfDocument.FromFile("file2.pdf");
        
        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");
        
        Console.WriteLine("PDFs merged successfully!");
    }
}

Statyczny MergeIronPDF akceptuje listę dokumentów lub List<PdfDocument>. Zwróć uwagę na zmianę z konstruktora (new PdfDocument(path)) na statyczną fabrykę (PdfDocument.FromFile(path)). Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą scałania plików PDF.

Ważne uwagi dotyczące migracji

Konwersja jednostek marginesu

EO.Pdf używa cali w OutputArea.IronPDF używa milimetrów. Konwertuj przy użyciu: inches × 25.4 = mm

// EO.Pdf - 0.5 inch margins
options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);

//IronPDF- equivalent in millimeters (0.5" = 12.7mm)
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;

Konfiguracja statyczna a konfiguracja oparta na instancjach

Zamień wszystkie HtmlToPdf.Options.X na renderer.RenderingOptions.X:

// EO.Pdf - static options (NOT thread-safe!)
HtmlToPdf.Options.PageSize = PdfPageSizes.A4;

//IronPDF- instance options (thread-safe)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

Migracja z ACM do HTML

Jeśli używasz Zaawansowanego Modelu Treści (AcmRender, AcmText, AcmBlock) EO.Pdf, przejdź na standardowe HTML/CSS:

// EO.Pdf ACM approach
var acmContent = new AcmContent();
acmContent.Add(new AcmText("Sample Text"));

//IronPDF HTML approach
var html = "<div>Sample Text</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
C#

Wzorzec zapisywania dwuetapowego

EO.Pdf zapisuje bezpośrednio w ConvertHtml().IronPDF zwraca obiekt PdfDocument, następnie wywołujesz SaveAs():

// EO.Pdf - one step
HtmlToPdf.ConvertHtml(html, "output.pdf");

//IronPDF- two steps (enables manipulation before save)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

Konstruktor do statycznej fabryki

Zamień new PdfDocument(path) na PdfDocument.FromFile(path):

// EO.Pdf
var doc = new PdfDocument("file.pdf");

// IronPDF
var doc = PdfDocument.FromFile("file.pdf");

Lista kontrolna po migracji

Po zakończeniu migracji kodu sprawdź, czy:

  • Wizualne porównanie wygenerowanych plików PDF
  • Sprawdź, czy nagłówki/stopki wyświetlają się poprawnie
  • Sprawdź ustawienia bezpieczeństwa/szyfrowania
  • Sprawdzanie poprawności operacji scałania
  • Testy porównawcze wydajności
  • Testowanie na różnych platformach (Windows, Linux, macOS)
  • Usuń pliki licencji EO.PDF
  • Aktualizacja dokumentacji

Dodatkowe zasoby


Migracja z EO.Pdf do IronPDF rozwiązuje bagaż z ery IE/Trident i obawy związane z bezpieczeństwem wątków globalnych opcji statycznych EO.Pdf. Przejście do konfiguracji opartej na instancji zapewnia, że twój kod generujący PDF działa niezawodnie przy jednoczesnym obciążeniu, a wsparcie IronPDF dla platform krzyżowych rozszerza wdrażanie poza Windows na Linux, macOS i Docker.

Zwróć uwagę: EO.Pdf i Essential Objects to znaki towarowe ich odpowiedniego właściciela. Ta strona nie jest powiązana z, zatwierdzona przez ani sponsorowana przez Essential Objects. 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