Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de EO.Pdf vers IronPDF en C#

EO.Pdf présente plusieurs défis architecturaux qui poussent les équipes de développement à évaluer des alternatives. Il est essentiel de comprendre ces questions pour planifier votre stratégie de migration.

Les problèmes d'EO.Pdf

  1. Taille du package massive de 126 Mo : EO.Pdf intègre son propre moteur Chromium, ce qui entraîne une empreinte de déploiement de 126 Mo. Cela gonfle les images Docker, ralentit les pipelines CI/CD et augmente les coûts d'infrastructure.

  2. Héritage de l'architecture existante : EO.Pdf a été initialement construit sur le moteur de rendu d'Internet Explorer avant de migrer vers Chromium. Cet héritage introduit des problèmes de compatibilité avec l'ère IE, une dette technique dans la conception de l'API et un comportement incohérent entre les versions.

  3. Conception centrée sur Windows : Malgré sa commercialisation en tant que " multiplateforme ", la prise en charge de Linux et macOS par EO.Pdf est limitée. De nombreux développeurs signalent des problèmes liés aux déploiements hors Windows.

  4. Options globales statiques : EO.Pdf utilise des options statiques HtmlToPdf.Options pour la configuration, ce qui n'est pas sûr pour les threads et pose problème dans les applications Web multi-locataires.

  5. 799 $ par licence : À 799 $ par licence développeur, EO.Pdf est cher par rapport aux alternatives offrant des fonctionnalités similaires ou meilleures.

Comparaison des architectures

Aspect EO.Pdf IronPDF
Taille du paquet 126MB Optimisé (~50MB)
Questions de légalité Bagage de migration IE Base de code propre et moderne
Support de la plateforme Axé sur Windows Véritablement multiplateforme
Configuration Statique/global (non thread-safe) Basé sur l'instance, sûr pour les threads
Conception d'API Mixte (HtmlToPdf + ACM) Unification et cohérence
Documentation Limité Tutoriels complets
Moderne .NET .NET Standard .NET 6/7/8/9+ natif
Support asynchrone Limité Async/await complet

Avantages principaux de la migration

  1. Empreinte réduite de 50 % : le packaging Chromium optimisé d'IronPDF
  2. Véritable compatibilité multiplateforme : fonctionne de manière identique sous Windows, Linux, macOS et Docker.
  3. Configuration sécurisée pour les threads : options de rendu basées sur les instances
  4. API moderne : noms de méthodes cohérents et intuitifs
  5. Meilleure documentation : tutoriels et exemples détaillés

Préparation de la migration

Prérequis

Assurez-vous que votre environnement répond à ces exigences :

  • .NET Framework 4.6.2+ ou .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ ou VS Code avec l'extension C#
  • Accès au gestionnaire de paquets NuGet
  • Clé de licenceIronPDF(essai gratuit disponible sur ironpdf.com)

Vérifier l'utilisation d'EO.Pdf

Exécutez ces commandes dans le répertoire de votre solution pour identifier toutes les références 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"
# 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

Espaces de noms EO.Pdf courants à rechercher :

  • EO.Pdf - Conversion de code HTML de base en PDF
  • EO.Pdf.Acm - Modèle de contenu avancé (ACM)
  • EO.Pdf.Contents - Manipulation de contenu de bas niveau
  • EO.Pdf.Drawing - Opérations graphiques

Comprendre le changement de modèle de base

La différence architecturale la plus importante entre EO.Pdf etIronPDFest l'étendue de la configuration. EO.Pdf utilise des méthodes statiques avec des options globales qui affectent toutes les conversions, un modèle qui pose des problèmes de sécurité des threads dans les applications web.IronPDFutilise des moteurs de rendu basés sur des instances avec des options locales, ce qui garantit que chaque conversion est isolée.

Processus de migration étape par étape

Étape 1 : Mise à jour des paquets NuGet

Supprimez EO.Pdf et installezIronPDF:

# 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

Étape 2 : Mise à jour des références aux espaces de noms

Remplacer les espaces de noms EO.Pdf parIronPDF:

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

Étape 3 : configuration de la licence

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

Référence complète de migration des API

Mappage des classes de base

Classe EO.Pdf Équivalent d'IronPDF Notes
HtmlToPdf ChromePdfRenderer Basé sur l'instance
Document PDF Document PDF Des méthodes similaires mais différentes
HtmlToPdfOptions ChromePdfRenderOptions Via RenderingOptions
AcmRender Pas nécessaire Utiliser HTML/CSS à la place
AcmText HTML <span>, <p>
AcmBlock HTML <div>

Mise en correspondance des méthodes

Méthode EO.Pdf Méthode IronPDF Notes
HtmlToPdf.ConvertHtml(html, path) renderer.RenderHtmlAsPdf(html) then SaveAs(path) Deux étapes dans IronPDF
HtmlToPdf.ConvertUrl(url, path) renderer.RenderUrlAsPdf(url) then SaveAs(path)
PdfDocument.Save(path) pdf.SaveAs(path)
new PdfDocument(path) PdfDocument.FromFile(path) Usine statique
doc.Append(other) PdfDocument.Merge(doc1, doc2) Méthode de fusion statique

Cartographie des options

Option EO.Pdf Options de rendu IronPDF Notes
Options.PageSize = PdfPageSizes.A4 PaperSize = PdfPaperSize.A4
Options.OutputArea (RectangleF) MarginTop, MarginBottom, etc. Propriétés individuelles en mm

Exemples de migration de code

Conversion HTML en PDF

La conversion fondamentale de HTML en PDF démontre le passage de méthodes statiques à un rendu basé sur des instances.

Mise en œuvre d'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!");
    }
}
// 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

Mise en œuvre d'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!");
    }
}
// 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

Le modèle en deux étapes d'IronPDF (rendre, puis enregistrer) permet d'accéder à l'objet Document PDFpour des manipulations supplémentaires avant l'enregistrement. Pour plus d'options, consultez la documentation HTML vers PDF.

Conversion d'URL en PDF

Mise en œuvre d'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!");
    }
}
// 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

Mise en œuvre d'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!");
    }
}
// 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

Le RenderUrlAsPdf d'IronPDF offre une exécution JavaScript complète et une prise en charge CSS moderne. Pour plus d'options, consultez l'URL vers la documentation PDF.

Fichier HTML avec paramètres personnalisés

Cet exemple démontre la différence critique dans les modèles de configuration : le OutputArea d'EO.Pdf avec des pouces contre les propriétés de marge individuelles d'IronPDF en millimètres.

Mise en œuvre d'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.");
    }
}
// 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

Mise en œuvre d'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.");
    }
}
// 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

Notez la conversion des unités : EO.Pdf utilise les pouces dans OutputArea, tandis qu'IronPDF utilise les millimètres. Convertir en utilisant : pouces × 25,4 = mm. Pour plus d'options, consultez la documentation sur les options de rendu.

Fusionner plusieurs fichiers PDF

La fusion de PDF démontre la différence entre le modèle de boucle Append d'EO.Pdf et la méthode statique Merge d'IronPDF.

Mise en œuvre d'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");

        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

Mise en œuvre d'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!");
    }
}
// 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

La méthode statique Merge d'IronPDF accepte une collection de documents, ce qui simplifie la fusion de plusieurs documents. Notez le changement de constructeur (new PdfDocument(path)) en fabrique statique (PdfDocument.FromFile(path)). Pour plus d'options, consultez la documentation sur la fusion de fichiers PDF .

Notesde migration essentielles

Conversion de l'unité de marge

EO.Pdf utilise les pouces dans OutputArea.IronPDFutilise des millimètres. Convertir en utilisant : pouces × 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

Configuration statique à la configuration basée sur les instances

Remplacez toutes les HtmlToPdf.Options.X par 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

Migration d'ACM vers HTML

Si vous utilisez le modèle de contenu avancé d'EO.Pdf (AcmRender, AcmText, AcmBlock), migrez vers le HTML/CSS standard :

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

Modèle de sauvegarde en deux étapes

EO.Pdf s'enregistre directement dans ConvertHtml().IronPDFrenvoie un objet PdfDocument, puis vous appelez 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");
// 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

Constructeur à usine statique

Remplacez new PdfDocument(path)par 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

Liste de contrôle post-migration

Après avoir effectué la migration du code, vérifiez les points suivants :

  • Comparaison visuelle des PDF générés
  • Vérifiez que les en-têtes et les pieds de page s'affichent correctement.
  • Tester les paramètres de sécurité/chiffrement
  • Valider les opérations de fusion
  • Évaluation comparative des performances
  • Tests multiplateformes (Windows, Linux, macOS)
  • Supprimer les fichiers de licence EO.Pdf
  • Mise à jour de la documentation

Protéger l'avenir de votre infrastructure PDF

Avec .NET 10 à l'horizon et C# 14 introduisant de nouvelles fonctionnalités de langage, le choix d'une bibliothèque PDF avec une prise en charge native moderne de .NET garantit une compatibilité à long terme. L'architecture d'IronPDF, basée sur des instances et à l'abri des threads, s'aligne sur les modèles d'applications web contemporains - ce qui est particulièrement important pour les applications SaaS multi-tenant où les options globales statiques d'EO.Pdf créent des problèmes de concurrence.

Ressources supplémentaires


La migration d'EO.Pdf versIronPDFélimine le gonflement des paquets de 126 Mo, le bagage hérité de l'ère IE et les problèmes de sécurité des threads liés aux options globales statiques. Le passage à une configuration basée sur les instances garantit que votre code de génération de PDF fonctionne de manière fiable dans les applications web multithreads tout en offrant un véritable support de déploiement multiplateforme.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite