Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Wie man von EO.Pdf zu IronPDF in C# migriert

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

  1. Enorme Paketgröße von 126 MB: EO.Pdf bündelt seine eigene Chromium-Engine, was zu einer Installationsgröße von 126 MB führt. Dies bläht Docker-Images auf, verlangsamt CI/CD-Pipelines und erhöht die Infrastrukturkosten.

  2. Altlasten der Architektur: EO.Pdf wurde ursprünglich auf der Rendering-Engine des Internet Explorers erstellt, bevor es auf Chromium migriert wurde. Dieses Erbe bringt Kompatibilitätsprobleme aus der IE-Ära, technische Schulden im API-Design und inkonsistentes Verhalten zwischen den Versionen mit sich.

  3. Windows-zentriertes Design: Trotz der Vermarktung als "plattformübergreifend" ist die Unterstützung für Linux und macOS bei EO.Pdf eingeschränkt. Viele Entwickler berichten über Probleme mit Nicht-Windows-Implementierungen.

  4. Statische globale Optionen: EO.Pdf verwendet statische HtmlToPdf.Options zur Konfiguration, was nicht threadsicher und in mandantenfähigen Webanwendungen problematisch ist.

  5. 799 US-Dollar pro Lizenz: Mit 799 US-Dollar pro Entwicklerlizenz ist EO.Pdf im Vergleich zu Alternativen mit ähnlicher oder besserer Funktionalität teuer.

Architektur-Vergleich

Aspekt EO.Pdf IronPDF
Paketgröße 126MB Optimiert (~50MB)
Legacy-Probleme IE-Migrationsgepäck Saubere, moderne Codebasis
Windows, Linux, macOS, Docker, Azure, AWS. Windows-orientiert Echt plattformübergreifend
Konfiguration Statisch/global (nicht thread-sicher) Instanzbasiert, thread-sicher
API-Entwurf Gemischt (HtmlToPdf + ACM) Einheitlich, konsistent
Dokumentation Beschränkt Umfassende Tutorials
Modernes .NET .NET Standard .NET 6/7/8/9+ nativ
Async-Unterstützung Beschränkt Vollständig async/await

Wichtige Vorteile der Migration

  1. 50 % kleinerer Platzbedarf: Die optimierte Chromium-Verpackung von IronPDF.
  2. Echte Plattformunabhängigkeit: Funktioniert identisch unter Windows, Linux, macOS und Docker.
  3. Thread-sichere Konfiguration: Instanzbasierte Renderer-Optionen
  4. Moderne API: Einheitliche, intuitive Methodennamen
  5. Bessere Dokumentation: Umfangreiche Tutorials und Beispiele

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"
# 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

Häufige EO.Pdf-Namensräume, nach denen Sie suchen sollten:

  • EO.Pdf - Kern HTML zu PDF
  • EO.Pdf.Acm - Erweitertes Inhaltsmodell (ACM)
  • EO.Pdf.Contents - Inhaltsmanipulation auf niedriger Ebene
  • EO.Pdf.Drawing - Grafikoperationen

Verständnis der Core Pattern Änderung

Der wichtigste architektonische Unterschied zwischen EO.Pdf undIronPDFist 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.IronPDFverwendet 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
# Remove EO.Pdf
dotnet remove package EO.Pdf

# Install IronPDF
dotnet add package IronPdf
SHELL

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;
// Remove these
using EO.Pdf;
using EO.Pdf.Acm;

// Add this
using IronPdf;
$vbLabelText   $csharpLabel

Schritt 3: Lizenz konfigurieren

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

Komplette API-Migrationsreferenz

Kernklassen-Zuordnung

EO.Pdf-Klasse IronPDF-Äquivalent Notizen
HtmlToPdf ChromePdfRenderer Instanzbasiert
PdfDocument PdfDocument Ähnliche, aber unterschiedliche Methoden
HtmlToPdfOptions ChromePdfRenderOptions Über RenderingOptions
AcmRender Nicht erforderlich Verwenden Sie stattdessen HTML/CSS
AcmText HTML <span>, <p>
AcmBlock HTML <div>

Methoden-Mapping

EO.Pdf-Methode IronPDF-Methode Notizen
HtmlToPdf.ConvertHtml(html, path) renderer.RenderHtmlAsPdf(html) then SaveAs(path) Zwei Schritte in IronPDF
HtmlToPdf.ConvertUrl(url, path) renderer.RenderUrlAsPdf(url) then SaveAs(path)
PdfDocument.Save(Pfad) pdf.SaveAs(Pfad)
new PdfDocument(Pfad) PdfDocument.FromFile(path) Statische Fabrik
doc.Append(other) PdfDocument.Merge(doc1, doc2) Statische Merge-Methode

Optionen-Zuordnung

EO.Pdf-Option IronPDFRenderingOptionen Notizen
Options.PageSize = PdfPageSizes.A4 PaperSize = PdfPaperSize.A4
Options.OutputArea (RectangleF) MarginTop, MarginBottom, etc. Einzelne Eigenschaften in mm

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
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!");
    }
}
$vbLabelText   $csharpLabel

IronPDF-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
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!");
    }
}
$vbLabelText   $csharpLabel

Das zweistufige Muster vonIronPDF(erst 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
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!");
    }
}
$vbLabelText   $csharpLabel

IronPDF-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
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!");
    }
}
$vbLabelText   $csharpLabel

IronPDFs 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 entscheidenden Unterschied in den Konfigurationsmustern - EO.Pdfs OutputArea mit Zoll im Vergleich zu IronPDFs individuellen Randeigenschaften 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
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.");
    }
}
$vbLabelText   $csharpLabel

IronPDF-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
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.");
    }
}
$vbLabelText   $csharpLabel

Beachten Sie die Einheitenumrechnung: EO.Pdf verwendet Zoll in OutputArea, währendIronPDFMillimeter verwendet. Konvertieren Sie mit: Zoll × 25,4 = mm. Weitere Optionen finden Sie in der Dokumentation der Rendering-Optionen.

Mehrere PDFs zusammenführen

Das Zusammenführen von PDF-Dateien zeigt den Unterschied zwischen dem Schleifenmuster Append von EO.Pdf und der statischen Methode Merge von IronPDF.

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

        PdfDocument mergedDoc = new PdfDocument();
        mergedDoc.Append(doc1);
        mergedDoc.Append(doc2);

        mergedDoc.Save("merged.pdf");

        Console.WriteLine("PDFs merged successfully!");
    }
}
// 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");

        PdfDocument mergedDoc = new PdfDocument();
        mergedDoc.Append(doc1);
        mergedDoc.Append(doc2);

        mergedDoc.Save("merged.pdf");

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

IronPDF-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
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!");
    }
}
$vbLabelText   $csharpLabel

Die statische Methode Merge vonIronPDFakzeptiert eine Sammlung von Dokumenten und vereinfacht so das Zusammenführen mehrerer Dokumente. 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.IronPDFarbeitet mit Millimetern. Konvertieren Sie mit: Zoll × 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.7;
$vbLabelText   $csharpLabel

Statische zu instanzbasierter Konfiguration

Ersetzen Sie alle HtmlToPdf.Options.X mit 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)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
$vbLabelText   $csharpLabel

ACM zu HTML Migration

Wenn Sie das erweiterte Inhaltsmodell von EO.Pdf verwenden (AcmRender, AcmText, AcmBlock), migrieren Sie zu Standard-HTML/CSS:

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

//IronPDFHTML approach
var html = "<div>Sample Text</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// EO.Pdf ACM approach
var acmContent = new AcmContent();
acmContent.Add(new AcmText("Sample Text"));

//IronPDFHTML approach
var html = "<div>Sample Text</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

Zweistufiges Speichermuster

EO.Pdf speichert direkt in ConvertHtml().IronPDFgibt ein PdfDocument-Objekt zurück, dann ruft man 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)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

Konstruktor zu statischer Fabrik

Ersetzen Sie new PdfDocument(Pfad)durch PdfDocument.FromFile(path):

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

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

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

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

Zukunftssicherheit für Ihre PDF-Infrastruktur

Mit .NET 10 am Horizont und C# 14, das neue Sprachfunktionen einführt, stellt die Wahl einer PDF-Bibliothek mit moderner nativer .NET-Unterstützung die langfristige Kompatibilität sicher. Die instanzbasierte, thread-sichere Architektur vonIronPDFentspricht modernen Webanwendungsmustern - besonders wichtig für mandantenfähige SaaS-Anwendungen, bei denen die statischen globalen Optionen von EO.Pdf zu Gleichzeitigkeitsproblemen führen.

Zusätzliche Ressourcen


Durch die Migration von EO.Pdf zuIronPDFwerden die 126 MB großen Pakete, die Altlasten aus der IE-Ära und die Bedenken hinsichtlich der Thread-Sicherheit durch statische globale Optionen beseitigt. Der Übergang zur instanzbasierten Konfiguration stellt sicher, dass Ihr PDF-Generierungscode in Webanwendungen mit mehreren Threads zuverlässig funktioniert und gleichzeitig eine echte plattformübergreifende Bereitstellung unterstützt.

Curtis Chau
Technischer Autor

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

Weiterlesen