Cómo migrar de EO.Pdf a IronPDF en C#
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
Tamaño de paquete masivo de 126 MB: EO.Pdf incluye su propio motor Chromium, lo que da como resultado un espacio de implementación de 126 MB. Esto infla las imágenes de Docker, ralentiza las canalizaciones de CI/CD y aumenta los costes de infraestructura.
Equipaje de arquitectura heredada: EO.Pdf se creó originalmente en 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 promocionarse 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ático para la configuración, lo cual no es seguro para subprocesos y resulta problemático en aplicaciones web multiinquilino.- $799 por licencia: a $799 por licencia de desarrollador, EO.Pdf es caro en comparación con 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
- Huella 50 % más pequeña: empaquetado Chromium optimizado de IronPDF
- Verdaderamente multiplataforma: funciona de forma idéntica en Windows, Linux, macOS y Docker.
- Configuración segura para subprocesos: opciones de renderizador basadas en instancias
- API moderna: nombres de métodos consistentes e intuitivos
- Mejor documentación: tutoriales y ejemplos completos
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;Paso 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";Referencia 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!");
}
}Implementació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!");
}
}El 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!");
}
}Implementació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!");
}
}El 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.");
}
}Implementació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.");
}
}Ten 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!");
}
}Implementació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!");
}
}El 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 obtener más opciones, consulte la documentación de 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;Configuració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;Migració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);Patró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");Constructor 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");Lista 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 representen 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 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.






