EO.Pdf vs IronPDF : Guide de comparaison technique
Lorsque les développeurs .NET examinent les bibliothèques de génération de PDF, EO.Pdf se distingue comme une option commerciale dotée de capacités de rendu basées sur Chromium. Cependant, la taille importante de son package (126 Mo), les problèmes de migration liés à l'ancien Internet Explorer et son approche de configuration globale statique incitent de nombreuses équipes à envisager des alternatives.IronPDFoffre une implémentation Chromium améliorée avec une configuration basée sur les instances, sécurisée pour les threads et une véritable prise en charge multiplateforme.
Cette comparaison examine les deux bibliothèques sous différents angles techniques pertinents afin d'aider les développeurs et architectes professionnels à prendre des décisions éclairées concernant leurs besoins en matière de PDF .NET.
Comprendre EO.Pdf
EO.Pdf est une bibliothèque PDF commerciale au prix de 799 $ par licence développeur, offrant un rendu basé sur Chromium pour une génération de PDF de haute qualité. La bibliothèque est construite sur un moteur personnalisé, ayant migré de son système de rendu original basé sur Internet Explorer vers un système basé sur Chromium.
Malgré cette mise à jour, le passage d'EO.Pdf à Chromium a introduit des problèmes de compatibilité en raison de son héritage de l'ère Internet Explorer. La bibliothèque inclut son propre moteur Chromium, ce qui entraîne une empreinte mémoire importante de 126 Mo lors du déploiement, augmentant ainsi la taille des images Docker, ralentissant les pipelines CI/CD et faisant grimper les coûts d'infrastructure.
De plus, bien qu'EO.Pdf se présente comme un outil multiplateforme, ses performances et sa facilité d'utilisation sont principalement axées sur Windows, la prise en charge de Linux étant souvent décrite comme secondaire. La bibliothèque utilise des HtmlToPdf.Options statiques pour la configuration, ce qui pose des problèmes de sécurité des threads dans les applications web multi-tenant.
Comprendre IronPDF
IronPDF est une bibliothèque PDF .NET conçue pour les environnements .NET modernes avec une approche d'empaquetage Chromium optimisée, ce qui permet d'obtenir une empreinte plus petite (environ 50 Mo). La bibliothèque prend en charge toutes les plateformes de la même manière et ne privilégie pas Windows, ce qui la rend adaptée aux applications déployées dans divers environnements.
IronPDF utilise une configuration basée sur les instances par le biais d'objets ChromePdfRenderer, ce qui garantit un fonctionnement à l'abri des threads dans les scénarios concurrents. Chaque instance de moteur de rendu conserve ses propres RenderingOptions, ce qui permet d'isoler la configuration des autres opérations.
Comparaison de l'architecture et de la configuration
La différence architecturale fondamentale entre ces bibliothèques PDF .NET réside dans leur approche de configuration et leurs caractéristiques de déploiement.
| Aspect | EO.Pdf | IronPDF |
|---|---|---|
| Taille du paquet | 126MB | ~50MB (optimisé) |
| 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 | Basé sur l'instance, sûr pour les threads |
| Prix | 799 $/développeur | Prix compétitifs |
| 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 |
Le modèle de configuration représente une distinction clé. Le HtmlToPdf.Options statique d'EO.Pdf affecte toutes les conversions globalement, créant des conditions de course dans les applications multithread. L'approche basée sur les instances d'IronPDF garantit une configuration isolée par moteur de rendu.
Code Comparaison : Opérations PDF courantes
Conversion HTML en PDF
La conversion du contenu HTML en PDF montre les différences fondamentales entre les API.
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!");
}
}
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!");
}
}
EO.Pdf utilise une méthode statique HtmlToPdf.ConvertHtml() qui enregistre directement dans un chemin de fichier.IronPDFutilise une approche en deux étapes : RenderHtmlAsPdf() renvoie un objet Document PDFqui peut être manipulé avant d'appeler SaveAs(). Ce modèle en deux étapes offre plus de souplesse pour les opérations de post-traitement telles que la fusion, l'ajout de filigranes ou l'application de paramètres de sécurité.
Pour des options de rendu HTML avancées, explorez le guide de conversion du HTML en PDF.
Conversion d'URL en PDF
La capture de pages web en tant que documents PDF présente des schémas d'API similaires.
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!");
}
}
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!");
}
}
Les deux bibliothèques offrent une capacité de conversion d'URL en PDF, EO.Pdf utilisant un ConvertUrl() statique etIronPDFutilisant un RenderUrlAsPdf() basé sur l'instance. La même distinction s'applique en matière de sécurité des threads.
Pour en savoir plus sur le rendu des URL, consultez la documentation sur les URL au format PDF.
Opérations de fusion de fichiers PDF
La combinaison de plusieurs documents PDF démontre différentes approches de modèles d'objets.
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!");
}
}
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!");
}
}
EO.Pdf charge les documents via des constructeurs (new PdfDocument(path)) et utilise Append() pour ajouter des documents à un conteneur vide.IronPDFutilise des méthodes d'usine statiques (PdfDocument.FromFile()) et une méthode statique PdfDocument.Merge() qui accepte une collection et renvoie le résultat fusionné.
Explorez d'autres opérations de fusion dans la documentation sur la fusion de fichiers PDF.
Paramètres de page personnalisés
La configuration de la taille des pages et des marges illustre les différences entre les modèles de configuration.
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.");
}
}
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.");
}
}
EO.Pdf utilise HtmlToPdfOptionsavec OutputArea spécifié comme un RectangleF en pouces.IronPDFutilise des propriétés de marge individuelles (MarginTop, MarginBottom, MarginLeft, MarginRight) en millimètres sur l'objet RenderingOptions. La différence d'unité nécessite une conversion : pouces × 25,4 = millimètres.
Référence pour le mappage de méthodes
Pour les développeurs qui évaluent la migration EO.Pdf ou qui comparent les capacités, cette correspondance montre les opérations équivalentes :
Opérations de base
| EO.Pdf | IronPDF |
|---|---|
HtmlToPdf.ConvertHtml(html, path) |
renderer.RenderHtmlAsPdf(html) then SaveAs() |
HtmlToPdf.ConvertUrl(url, path) |
renderer.RenderUrlAsPdf(url) then SaveAs() |
HtmlToPdf.Options.PageSize |
renderer.RenderingOptions.PaperSize |
HtmlToPdf.Options.OutputArea |
MarginTop/Bottom/Left/Right |
new PdfDocument(path) |
PdfDocument.FromFile(path) |
doc.Append(other) |
PdfDocument.Merge(doc1, doc2) |
doc.Save(path) |
pdf.SaveAs(path) |
Cartographie de configuration
| Option EO.Pdf | Options de rendu IronPDF |
|---|---|
Options.PageSize = PdfPageSizes.A4 |
PaperSize = PdfPaperSize.A4 |
Options.PageSize = PdfPageSizes.Letter |
PaperSize = PdfPaperSize.Letter |
Options.OutputArea (RectangleF) |
MarginTop, MarginBottom, etc. |
Options.BaseUrl |
BaseUrl |
Mise en correspondance des classes
| Classe EO.Pdf | Équivalent d'IronPDF |
|---|---|
HtmlToPdf |
ChromePdfRenderer |
Document PDF |
Document PDF |
HtmlToPdfOptions |
ChromePdfRenderOptions |
AcmRender |
Pas nécessaire |
AcmText |
HTML <span>, <p> |
AcmBlock |
HTML <div> |
Résumé de la comparaison des fonctionnalités
| Fonction | EO.Pdf | IronPDF |
|---|---|---|
| HTML vers PDF | ✅ | ✅ |
| URL vers PDF | ✅ | ✅ |
| Fusion de PDF | ✅ | ✅ |
| Manipulation des pages | ✅ | ✅ |
| En-têtes/pieds de page | ✅ | ✅(basé sur HTML) |
| Sécurité/cryptage | ✅ | ✅ |
| Champs de formulaire | ✅ | ✅ |
| Filigranes | ✅ | ✅ |
| Rendu ACM | ✅ | HTML/CSS (pas d'ACM) |
| Configuration à sécurité intrinsèque | ❌ (statique) | ✅(instance) |
| Multiplateforme | Limité | Prise en charge |
Le problème de la sécurité des threads
La configuration statique d'EO.Pdf crée un problème fondamental dans les applications multithread :
// EO.Pdf - DANGER: Static options affect ALL threads!
HtmlToPdf.Options.PageSize = PdfPageSizes.A4;
HtmlToPdf.Options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);
HtmlToPdf.ConvertHtml(html, "output.pdf");
// EO.Pdf - DANGER: Static options affect ALL threads!
HtmlToPdf.Options.PageSize = PdfPageSizes.A4;
HtmlToPdf.Options.OutputArea = new RectangleF(0.5f, 0.5f, 7.5f, 10.5f);
HtmlToPdf.ConvertHtml(html, "output.pdf");
Dans une application web traitant plusieurs requêtes simultanées, la configuration d'une requête affecte toutes les autres requêtes. Cela crée des conditions de course où les PDF peuvent être générés avec des paramètres inattendus.
L'approche basée sur les instances d'IronPDF élimine ce problème :
//IronPDF- Thread-safe, isolated options per renderer instance
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 12.7;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
//IronPDF- Thread-safe, isolated options per renderer instance
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 12.7;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Chaque instance de ChromePdfRendererconserve sa propre configuration, ce qui garantit l'isolement dans les scénarios concurrents.
Quand les équipes envisagent de passer d'EO.Pdf à IronPDF
Les équipes de développement évaluent le passage d'EO.Pdf àIronPDFpour plusieurs raisons :
Optimisation de la taille du package : la taille de 126 Mo du package EO.Pdf augmente la taille des images Docker, ralentit les pipelines CI/CD et accroît les coûts d'infrastructure. Le conditionnement optimisé d'IronPDF (~50MB) permet d'améliorer considérablement l'efficacité du déploiement.
Exigences de sécurité des threads : les applications web mutualisées nécessitent une configuration isolée pour chaque requête. L'utilisation statique de HtmlToPdf.Options dans EO.Pdf crée des conditions de concurrence que l'approche par instance d'IronPDF élimine.
Déploiement multiplateforme : les applications ciblant les environnements Linux ou macOS rencontrent des limitations dues à la conception d'EO.Pdf centrée sur Windows.IronPDFoffre une véritable prise en charge multiplateforme avec un comportement cohérent.
Éviter les problèmes liés aux technologies héritées : la migration d'EO.Pdf d'Internet Explorer vers Chromium a introduit des problèmes de compatibilité. La base de code propre et moderne d'IronPDF permet d'éviter cette dette technique.
Prise en charge des versions modernes de .NET : les applications ciblant .NET 6/7/8/9+ bénéficient de la prise en charge native d'IronPDF par rapport à la version .NET Standardd'EO.Pdf.
Migration ACM : les équipes utilisant le modèle de contenu avancé d'EO.Pdf ( AcmRender, AcmText, AcmBlock) trouvent l'approche HTML/CSS d'IronPDF plus simple et plus facile à maintenir.
Forces et considérations
EO.Pdf Points forts
- Rendu Chromium : Sortie de haute qualité conforme aux normes W3C
- Bibliothèque établie : éprouvée en environnement de production
- Conversion en une seule étape : sortie directe du fichier via
ConvertHtml()
Considérations EO.Pdf
- Taille importante du package : 126 Mo d'espace de déploiement
- Problèmes de compatibilité liés à la migration d' Internet Explorer
- Configuration statique : Problèmes de sécurité des threads dans les applications multi-locataires
- Conçu principalement pour Windows : prise en charge limitée de Linux/macOS
- Prix : 799 $ par licence de développeur
- Documentation limitée : moins de tutoriels et d'exemples
Les points forts d'IronPDF
- Taille optimisée : paquet d'environ 50 Mo (50 % plus petit)
- Véritable compatibilité multiplateforme : Windows, Linux, macOS, Docker
- Configuration sécurisée pour les threads : options de rendu basées sur les instances
- API moderne : noms de méthodes cohérents et intuitifs
- Développement actif : Mises à jour régulières et correctifs de sécurité
- Ressources complètes : tutoriels et documentation détaillés
Considérations relatives à IronPDF
- Enregistrement en deux étapes : la fonction Render renvoie
Document PDF, puis appelleSaveAs() - Différences d'unités : Utilise des millimètres pour les marges (contre des pouces pour EO.Pdf)
Conclusion
EO.Pdf etIronPDFfournissent tous deux une génération de PDF basée sur Chromium pour les développeurs .NET, mais ils représentent des approches architecturales différentes. EO.Pdf offre des fonctionnalités reconnues, mais il a une taille de 126 Mo, une migration vers l'ancien Internet Explorer et une configuration statique non sécurisée.
IronPDF offre une alternative moderne avec un packaging optimisé, une véritable prise en charge multiplateforme et une configuration à sécurité thread basée sur les instances. Pour les équipes qui ont besoin d'efficacité en matière de déploiement, de sécurité des opérations simultanées ou de ciblage multiplateforme,IronPDFrépond à ces exigences spécifiques.
Alors que les organisations planifient .NET 10, C# 14 et le développement d'applications jusqu'en 2026, le choix dépend de priorités spécifiques. Les équipes qui ont déjà mis en œuvre EO.Pdf dans des environnements Windows à un seul fil peuvent continuer à y trouver de la valeur. Pour les applications multi-tenant modernes, les déploiements conteneurisés ou les exigences multiplateformes,IronPDFconstitue une approche plus adaptée.
Commencez à évaluerIronPDFavec un essai gratuit et explorez la documentation complète pour évaluer l'adéquation à vos besoins spécifiques.