Cómo migrar de EO.Pdf a IronPDF en C#
Migrar de EO.Pdf a IronPDF: Guía completa de migración a C
EO.Pdf es una biblioteca comercial .NET PDF que aprovecha el renderizado basado en Chromium para la conversión de HTML a PDF. Aunque EO.Pdf ofrece un renderizado conforme con el W3C, su arquitectura presenta retos significativos: un enorme paquete de 126 MB que infla las imágenes de Docker y ralentiza los despliegues, el bagaje heredado de su motor original basado en Internet Explorer, opciones globales estáticas que no son seguras para aplicaciones multiusuario y un diseño centrado en Windows a pesar de sus pretensiones multiplataforma. Esta completa guía proporciona una ruta de migración paso a paso de EO.Pdf a IronPDF, una moderna biblioteca PDF .NET con empaquetado Chromium optimizado, configuración segura de subprocesos basada en instancias y compatibilidad multiplataforma real.
¿Por qué migrar de EO.Pdf a IronPDF?
EO.Pdf presenta varios retos arquitectónicos que llevan a los equipos de desarrollo a evaluar alternativas. Comprender estas cuestiones es esencial para planificar su estrategia de migración.
Los problemas de EO.Pdf
Masivo paquete de 126 MB: EO.Pdf incluye su propio motor Chromium, que ocupa 126 MB. Esto infla las imágenes de Docker, ralentiza las canalizaciones de CI/CD y aumenta los costes de infraestructura.
Legacy Architecture Baggage: EO.Pdf se construyó originalmente sobre el motor de renderizado de Internet Explorer antes de migrar a Chromium. Este legado introduce problemas de compatibilidad de la era IE, deuda técnica en el diseño de la API y comportamiento incoherente entre versiones.
Diseño centrado en Windows: A pesar de que se promociona como "multiplataforma", la compatibilidad de EO.Pdf con Linux y macOS es limitada. Muchos desarrolladores informan de problemas con las implantaciones que no son de Windows.
Opciones globales estáticas: EO.Pdf utiliza
HtmlToPdf.Optionsestáticas para la configuración, lo que no es seguro para los hilos y resulta problemático en aplicaciones web multiusuario.- 799 dólares por licencia: A 799 dólares por licencia de desarrollador, EO.Pdf es caro en comparación con otras alternativas que ofrecen una funcionalidad similar o mejor.
Comparación de arquitecturas
| Aspecto | EO.Pdf | IronPDF |
|---|---|---|
| Tamaño del paquete | 126 MB | Optimizado (~50MB) |
| Cuestiones de Legado | Migración a IE | Código limpio y moderno |
| Soporte de Plataforma | Centrado en Windows | Auténtica multiplataforma |
| Configuración | Estática/global (no thread-safe) | Basado en instancias, a prueba de hilos |
| Diseño de API | Mixto (HtmlToPdf + ACM) | Unificado y coherente |
| Documentación | Limitado | Tutoriales completos |
| Moderno .NET | .NET Standard | .NET 6/7/8/9+ nativo |
| Soporte Async | Limitado | Async/await completo |
Beneficios clave de la migración
- 50% más pequeño: empaquetado optimizado deIronPDFen Chromium
- True Cross-Platform: Funciona de forma idéntica en Windows, Linux, macOS, Docker
- Configuración a prueba de hilos: opciones de renderizador basadas en instancias
- API moderna: Nombres de métodos coherentes e intuitivos
- Mejor documentación: tutoriales y ejemplos exhaustivos
Preparación de la migración
Prerrequisitos
Asegúrese de que su entorno cumple estos requisitos:
- .NET Framework 4.6.2+ o .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ o VS Code con extensión de C#
- Acceso al gestor de paquetes NuGet
- Clave de licencia deIronPDF(prueba gratuita disponible en ironpdf.com)
Auditar el uso de EO.Pdf
Ejecute estos comandos en su directorio de soluciones para identificar todas las referencias a 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"Espacios de nombres comunes de EO.Pdf que hay que buscar:
EO.Pdf- HTML básico a PDFEO.Pdf.Acm- Modelo de contenido avanzado (ACM)EO.Pdf.Contents- Manipulación de contenido de bajo nivelEO.Pdf.Drawing- Operaciones gráficas
Comprensión del cambio de patrón básico
La diferencia arquitectónica más significativa entre EO.Pdf eIronPDFes el ámbito de configuración. EO.Pdf utiliza métodos estáticos con opciones globales que afectan a todas las conversiones, un patrón que causa problemas de seguridad en las aplicaciones web.IronPDFutiliza renderizadores basados en instancias con opciones locales, lo que garantiza el aislamiento de cada conversión.
Proceso de migración paso a paso
Paso 1: Actualizar paquetes NuGet
Elimine EO.Pdf e instale 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 IronPdfPaso 2: Actualizar referencias de espacios de nombres
Sustituya los espacios de nombres EO.Pdf por 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;IRON VB CONVERTER ERROR developers@ironsoftware.comPaso 3: Configurar la licencia
// 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";IRON VB CONVERTER ERROR developers@ironsoftware.comReferencia completa de migración de API
Mapeo de clases principales
| Clase EO.Pdf | Equivalente de IronPDF | Notas |
|---|---|---|
| <código>HtmlToPdf</código | <código>ChromePdfRenderer</código | Basado en instancias |
Documento PDF | Documento PDF | Métodos similares pero diferentes |
| <código>HtmlToPdfOptions</código | <código>ChromePdfRenderOptions</código | A través de RenderingOptions |
| <código>AcmRender</código | No es necesario | Utilice HTML/CSS en su lugar |
AcmText | HTML <span>, <p> | |
| <código>AcmBlock</código | HTML <código> </código> |
Métodos
| Método EO.Pdf | Método IronPDF | Notas |
|---|---|---|
| <código>HtmlToPdf.ConvertHtml(html, path)</código | renderer.RenderHtmlAsPdf(html) then SaveAs(path) | Dos pasos en IronPDF |
| <código>HtmlToPdf.ConvertUrl(url, path)</código | renderer.RenderUrlAsPdf(url) then SaveAs(path) | |
| <código>PdfDocument.Save(path)</código | <código>pdf.SaveAs(ruta)</código | |
nuevo PdfDocument(ruta) | <código>PdfDocument.FromFile(path)</código | Fábrica estática |
doc.Append(otro) | <código>PdfDocument.Merge(doc1, doc2)</código | Método de fusión estática |
Mapeo de opciones
| Opción EO.Pdf | Opciones de renderizado de IronPDF | Notas |
|---|---|---|
Options.PageSize = PdfPageSizes.A4 | <código>TamañoPapel = PdfPaperSize.A4</código | |
Options.OutputArea (RectangleF) | MarginTop, MarginBottom, etc. | Propiedades individuales en mm |
Ejemplos de migración de código
Conversión de HTML a PDF
La conversión fundamental de HTML a PDF demuestra el paso de los métodos estáticos a la renderización basada en instancias.
Ejecución de 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEl patrón de dos pasos deIronPDF(renderizar y luego guardar) proporciona acceso al objeto Documento PDFpara manipulaciones adicionales antes de guardar. Para más opciones, consulte la documentación HTML a PDF.
Conversión de URL a PDF
Ejecución de 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEl RenderUrlAsPdf deIronPDFproporciona una ejecución completa de JavaScript y compatibilidad moderna con CSS. Para obtener más opciones, consulte URL a la documentación en PDF.
Archivo HTML con ajustes personalizados
Este ejemplo demuestra la diferencia crítica en los patrones de configuración: el OutputArea de EO.Pdf en pulgadas frente a las propiedades de margen individuales deIronPDFen milímetros.
Ejecución de 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.");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de 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.");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comTen en cuenta la conversión de unidades: EO.Pdf utiliza pulgadas en OutputArea, mientras queIronPDFutiliza milímetros. Convertir utilizando: pulgadas × 25,4 = mm. Para más opciones, consulte la documentación sobre opciones de renderización.
Fusión de varios PDF
La fusión de PDF demuestra la diferencia entre el patrón de bucle Append de EO.Pdf y el método estático Merge de IronPDF.
Ejecución de 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEl método estático Merge deIronPDFacepta una colección de documentos, lo que simplifica la fusión de varios documentos. Observe el cambio de constructor (new PdfDocument(path)) a fábrica estática (PdfDocument.FromFile(path)). Para más opciones, consulte la documentación sobre la fusión de PDF.
Notas de migración críticas
Conversión de unidades de margen
EO.Pdf utiliza pulgadas en OutputArea.IronPDFutiliza milímetros. Convertir utilizando: pulgadas × 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;IRON VB CONVERTER ERROR developers@ironsoftware.comConfiguración estática a configuración basada en instancias
Sustituya todo HtmlToPdf.Options.X por 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;IRON VB CONVERTER ERROR developers@ironsoftware.comMigración de ACM a HTML
Si utiliza el modelo de contenido avanzado de EO.Pdf (AcmRender, AcmText, AcmBlock), migre a HTML/CSS estándar:
// 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);IRON VB CONVERTER ERROR developers@ironsoftware.comPatrón de guardado en dos pasos
EO.Pdf guarda directamente en ConvertHtml().IronPDFdevuelve un objeto PdfDocument, luego se llama a 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");IRON VB CONVERTER ERROR developers@ironsoftware.comConstructor a fábrica estática
Sustituya nuevo PdfDocument(ruta)por 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");IRON VB CONVERTER ERROR developers@ironsoftware.comLista de comprobación posterior a la migración
Después de completar la migración del código, verifique lo siguiente:
- [ ] Comparación visual de los PDF generados
- [Verificar que los encabezados y pies de página se visualicen correctamente
- [ ] Probar la configuración de seguridad/cifrado
- [ ] Validar operaciones de fusión
- [Evaluación comparativa del rendimiento
- [ ] Pruebas multiplataforma (Windows, Linux, macOS)
- [ ] Eliminar archivos de licencia de EO.Pdf
- [ ] Actualización de la documentación
Proteja su infraestructura PDF
Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características del lenguaje, elegir una biblioteca PDF con soporte nativo .NET moderno garantiza la compatibilidad a largo plazo. La arquitectura a prueba de hilos y basada en instancias deIronPDFse alinea con los patrones de aplicación web contemporáneos, especialmente importante para aplicaciones SaaS multiusuario en las que las opciones globales estáticas de EO.Pdf crean problemas de concurrencia.
Recursos adicionales
La migración de EO.Pdf aIronPDFelimina la sobrecarga del paquete de 126 MB, el bagaje heredado de la era IE y los problemas de seguridad de los hilos de las opciones globales estáticas. La transición a la configuración basada en instancias garantiza que el código de generación de PDF funcione de forma fiable en aplicaciones web multihilo, al tiempo que proporciona una verdadera compatibilidad con la implementación multiplataforma.






