Wie man Fonts in HTML-zu-PDF-Konvertierung verwaltet
EO.Pdf stellt mehrere architektonische Herausforderungen dar, die Entwicklungsteams dazu veranlassen, Alternativen zu bewerten. Das Verständnis dieser Aspekte ist für die Planung Ihrer Migrationsstrategie unerlässlich.
Die EO.Pdf-Probleme
-
Gebündelte Chromium-Fußabdruck: EO.Pdf (aktuelle NuGet-Version 26.1.34, März 2026) liefert seinen eigenen Chromium-basierten Renderer, was den Installations-Fußabdruck im Vergleich zu nicht-Chromium-Bibliotheken erhöht und Gewicht zu Docker-Images und CI/CD-Pipelines hinzufügt.
-
Altarchitektur-Gepäck: EO.Pdf's HTML-zu-PDF-Converter wurde ursprünglich auf einem eingebetteten Internet Explorer / Trident-Engine aufgebaut, bevor das Projekt auf einen Chromium-basierten Renderer wechselte. Der Übergang hat einige API-Eigenheiten und Verhaltensunterschiede zwischen den Versionen hinterlassen.
-
Nur Windows auf .NET Core: Trotz der Vermarktung als "plattformübergreifend" besagt die eigene .NET Core-Dokumentation von Essential Objects, dass EO.Pdf nur .NET Core 3.1+ und .NET 5/6 auf Windows unterstützt – Linux und macOS werden nicht offiziell unterstützt.
-
Statische globale Optionen: Der primäre HTML-zu-PDF-Einstiegspunkt von EO.Pdf ist die statische
HtmlToPdf-Klasse mit gemeinsam genutzterHtmlToPdf.Options. Die Veränderung dieses globalen Zustandes von mehreren Threads aus ist nicht sicher und ist unangenehm in multi-mandanten Webanwendungen. -
Kommerzielle Lizenzpflicht: EO.Pdf wird als Einzel-, 3-Lizenz-Bundle, Unternehmens- und Unternehmens-Plus-Stufe verkauft (keine dauerhafte kostenlose Stufe — nur ein 30-tägiger Wasserzeichen-Test). Genauere Preise finden sich auf der Bestellseite.
Architektur-Vergleich
| Aspekt | EO.Pdf | IronPDF |
|---|---|---|
| Renderer | Gebündeltes Chromium (von IE/Trident migriert) | Eingebettetes Chromium |
| Legacy-Probleme | IE/Trident-Migrations-Gepäck | Von Anfang an auf Chromium aufgebaut |
| Windows, Linux, macOS, Docker, Azure, AWS. | Nur Windows auf .NET Core | Windows, Linux, macOS, Docker, Azure |
| Konfiguration | Statisch HtmlToPdf.Options (nicht thread-sicher) | Instanzbasiert ChromePdfRenderer (thread-sicher) |
| API-Entwurf | Gemischt (HtmlToPdf statisch + ACM-Objektmodell) | Vereinheitlicht ChromePdfRenderer + HTML/CSS |
| Lizenzmodell | Einzel- / 3-Lizenz / Unternehmens- / Unternehmens-Plus (30-tägiger Test) | Pro Entwicklerkommerziell; kostenlose Entwickler-Testversion |
| Modernes .NET | .NET Framework + .NET Core 3.1+ (Windows only) | .NET Framework, .NET 6/7/8/9 plattformübergreifend |
| Async-Unterstützung | Beschränkt | Vollständig RenderHtmlAsPdfAsync / RenderUrlAsPdfAsync |
Wichtige Vorteile der Migration
- Plattformübergreifend auf .NET Core / .NET 6+: Funktioniert auf Linux, macOS und Docker — nicht nur Windows
- Thread-sichere Konfiguration: Instanzbasierte Renderer-Optionen statt statischer Globals
- Modern API: Consistent method names —
RenderHtmlAsPdf,RenderUrlAsPdf,PdfDocument.Merge - Vollständige asynchrone Unterstützung:
RenderHtmlAsPdfAsyncundRenderUrlAsPdfAsyncfür nicht blockierende Pipelines - Dokumentation: Umfangreiche Tutorials, How-to-Guides und eine aktive Objektreferenz
Vorbereitung auf die Migration
Voraussetzungen
Stellen Sie sicher, dass Ihre Umgebung diese Anforderungen erfüllt:
- .NET Framework 4.6.2+ oder .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ oder VS Code mit C#-Erweiterung
- NuGet Package Manager Zugang
- IronPDF-Lizenzschlüssel (kostenlose Testversion erhältlich unter ironpdf.com)
Audit EO.Pdf Verwendung
Führen Sie diese Befehle in Ihrem Lösungsverzeichnis aus, um alle EO.Pdf-Referenzen zu identifizieren:
# Find all EO.Pdf references
grep -r "EO.Pdf\|HtmlToPdf\|AcmRender\|PdfDocument" --include="*.cs" .
# Check NuGet packages
dotnet list package | grep -i "EO.Pdf"
Häufige EO.Pdf-Namensräume, nach denen Sie suchen sollten:
EO.Pdf- Kern-HTML zu PDFEO.Pdf.Acm- Erweitertes Inhaltsmodell (ACM)EO.Pdf.Contents- Niedrigstufige InhaltsmanipulationEO.Pdf.Drawing- Grafikoperationen
Verständnis der Core Pattern Änderung
Der wichtigste architektonische Unterschied zwischen EO.Pdf und IronPDF ist der Konfigurationsumfang. EO.Pdf verwendet statische Methoden mit globalen Optionen, die sich auf alle Konvertierungen auswirken - ein Muster, das in Webanwendungen Probleme mit der Thread-Sicherheit verursacht.IronPDF verwendet instanzbasierte Renderer mit lokalen Optionen, um sicherzustellen, dass jede Konvertierung isoliert ist.
Schritt-für-Schritt-Migrationsprozess
Schritt 1: NuGet-Pakete aktualisieren
Entfernen Sie EO.Pdf und installieren Sie IronPDF:
# Remove EO.Pdf
dotnet remove package EO.Pdf
# Install IronPDF
dotnet add package IronPdf
Schritt 2: Namensraumreferenzen aktualisieren
Ersetzen Sie die Namensräume von EO.Pdf durch IronPDF:
// Remove these
using EO.Pdf;
using EO.Pdf.Acm;
// Add this
using IronPdf;Imports IronPdfSchritt 3: Lizenz konfigurieren
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"Komplette API-Migrationsreferenz
Kernklassen-Zuordnung
| EO.Pdf-Klasse | IronPDF-Äquivalent |
|---|---|
HtmlToPdf | ChromePdfRenderer |
PdfDocument | PdfDocument |
HtmlToPdfOptions | ChromePdfRenderOptions |
AcmRender | Nicht erforderlich |
AcmText | HTML <span>, <p> |
AcmBlock | HTML <div> |
Methoden-Mapping
| EO.Pdf-Methode | IronPDF-Methode |
|---|---|
HtmlToPdf.ConvertHtml(html, path) | renderer.RenderHtmlAsPdf(html) dann SaveAs(path) |
HtmlToPdf.ConvertUrl(url, path) | renderer.RenderUrlAsPdf(url) dann SaveAs(path) |
PdfDocument.Save(path) | pdf.SaveAs(path) |
new PdfDocument(path) | PdfDocument.FromFile(path) |
PdfDocument.Merge(doc1, doc2) (statisch) | PdfDocument.Merge(doc1, doc2) (statisch) |
Optionen-Zuordnung
| EO.Pdf-Option | IronPDF RenderingOptionen |
|---|---|
Options.PageSize = PdfPageSizes.A4 | PaperSize = PdfPaperSize.A4 |
Options.OutputArea (RectangleF) | MarginTop, MarginBottom, usw. |
Beispiele für die Code-Migration
HTML-zu-PDF-Konvertierung
Die grundlegende HTML-zu-PDF-Konvertierung demonstriert den Wechsel von statischen Methoden zum instanzbasierten Rendering.
EO.Pdf Implementierung:
// 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!");
}
}' NuGet: Install-Package EO.Pdf
Imports EO.Pdf
Imports System
Module Program
Sub Main()
Dim html As String = "<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!")
End Sub
End ModuleIronPDF-Implementierung:
// 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!");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports System
Module Program
Sub Main()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF generated from HTML.</p></body></html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully!")
End Sub
End ModuleDas Zwei-Stufen-Muster von IronPDF(rendern, dann speichern) ermöglicht den Zugriff auf das PdfDocument-Objekt für zusätzliche Manipulationen vor dem Speichern. Weitere Optionen finden Sie in der HTML zu PDF Dokumentation.
URL zu PDF-Konvertierung
EO.Pdf Implementierung:
// 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!");
}
}' NuGet: Install-Package EO.Pdf
Imports EO.Pdf
Imports System
Module Program
Sub Main()
Dim url As String = "https://www.example.com"
HtmlToPdf.ConvertUrl(url, "webpage.pdf")
Console.WriteLine("PDF from URL created successfully!")
End Sub
End ModuleIronPDF-Implementierung:
// 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!");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports System
Module Program
Sub Main()
Dim url As String = "https://www.example.com"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf(url)
pdf.SaveAs("webpage.pdf")
Console.WriteLine("PDF from URL created successfully!")
End Sub
End ModuleIronPDF's RenderUrlAsPdf bietet vollständige JavaScript-Ausführung und moderne CSS-Unterstützung. Weitere Optionen finden Sie in der URL zur PDF-Dokumentation.
HTML-Datei mit benutzerdefinierten Einstellungen
Dieses Beispiel zeigt den grundlegenden Unterschied in den Konfigurationsmustern—EO.Pdf's OutputArea mit Zoll im Vergleich zu den individuellen Margeneigenschaften von IronPDF in Millimetern.
EO.Pdf Implementierung:
// 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.");
}
}' NuGet: Install-Package EO.Pdf
Imports EO.Pdf
Imports System
Module Program
Sub Main()
Dim options As 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.")
End Sub
End ModuleIronPDF-Implementierung:
// 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.");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Dim pdf = renderer.RenderHtmlFileAsPdf("C:/input.html")
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF with custom settings created.")
End Sub
End ModuleBeachten Sie die Umrechnung der Einheiten: EO.Pdf verwendet Zoll in OutputArea, während IronPDF Millimeter verwendet. Umrechnung mit: inches × 25.4 = mm. Weitere Optionen finden Sie in der Dokumentation der Rendering-Optionen.
Mehrere PDFs zusammenführen
Beide Bibliotheken bieten eine statische PdfDocument.Merge an, um Dokumente zu kombinieren — EO.Pdf hat keine Instanz Append-Methode, daher ist jeder Code, der doc.Append(other) verwendet, ungültig und muss zu Merge verschoben werden.
EO.Pdf Implementierung:
// 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!");
}
}Imports EO.Pdf
Imports System
Module Program
Sub Main()
Dim doc1 As New PdfDocument("file1.pdf")
Dim doc2 As New PdfDocument("file2.pdf")
' EO.Pdf has no Append; merge is a static method that returns a new PdfDocument.
Dim mergedDoc As PdfDocument = PdfDocument.Merge(doc1, doc2)
mergedDoc.Save("merged.pdf")
Console.WriteLine("PDFs merged successfully!")
End Sub
End ModuleIronPDF-Implementierung:
// 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!");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
Dim pdf1 = PdfDocument.FromFile("file1.pdf")
Dim pdf2 = PdfDocument.FromFile("file2.pdf")
Dim merged = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
merged.SaveAs("merged.pdf")
Console.WriteLine("PDFs merged successfully!")
End Sub
End ModuleDie statische Merge von IronPDF akzeptiert entweder eine Params-Liste von Dokumenten oder ein List<PdfDocument>. Beachten Sie den Wechsel vom Konstruktor (new PdfDocument(path)) zur statischen Fabrik (PdfDocument.FromFile(path)). Weitere Optionen finden Sie in der Dokumentation zum Zusammenführen von PDFs .
Kritische Hinweise zur Migration
Umrechnung von Maßeinheiten
EO.Pdf verwendet Zoll in OutputArea.IronPDF arbeitet mit Millimetern. Umrechnung mit: 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;' 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.7Statische zu instanzbasierter Konfiguration
Ersetzen Sie alle HtmlToPdf.Options.X durch 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;' EO.Pdf - static options (NOT thread-safe!)
HtmlToPdf.Options.PageSize = PdfPageSizes.A4
' IronPDF- instance options (thread-safe)
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4ACM zu HTML Migration
Wenn Sie das Advanced Content Model von EO.Pdf (AcmRender, AcmText, AcmBlock) verwenden, migrieren Sie zu standardmäßigem 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);
Zweistufiges Speichermuster
EO.Pdf speichert direkt in ConvertHtml().IronPDF gibt ein PdfDocument-Objekt zurück, dann rufen Sie SaveAs() auf:
// 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");' EO.Pdf - one step
HtmlToPdf.ConvertHtml(html, "output.pdf")
' IronPDF- two steps (enables manipulation before save)
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")Konstruktor zu statischer Fabrik
Ersetzen Sie new PdfDocument(path) durch PdfDocument.FromFile(path):
// EO.Pdf
var doc = new PdfDocument("file.pdf");
// IronPDF
var doc = PdfDocument.FromFile("file.pdf");' EO.Pdf
Dim doc = New PdfDocument("file.pdf")
' IronPDF
Dim doc = PdfDocument.FromFile("file.pdf")Post-Migrations-Checkliste
Überprüfen Sie nach Abschluss der Codemigration Folgendes:
- Visueller Vergleich der generierten PDFs
- Überprüfen Sie, ob Kopf- und Fußzeilen korrekt dargestellt werden.
- Sicherheits-/Verschlüsselungseinstellungen testen
- Zusammenführungsvorgänge validieren
- Leistungsvergleich
- Plattformübergreifende Tests (Windows, Linux, macOS)
- Entfernen Sie die EO.Pdf-Lizenzdateien.
- Dokumentation aktualisieren
Zusätzliche Ressourcen
Die Migration von EO.Pdf zu IronPDF behebt Altlasten aus der IE/Trident-Ära und die Thread-Sicherheitsbedenken der statischen globalen Optionen von EO.Pdf. Der Übergang zu einer instanzbasierten Konfiguration stellt sicher, dass Ihr PDF-Erstellungscode unter gleichzeitiger Last zuverlässig funktioniert, während IronPDFs plattformübergreifende Unterstützung die Bereitstellung über Windows hinaus auf Linux, macOS und Docker erweitert.

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.