Saltar al pie de página
GUíAS DE MIGRACIóN

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

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

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

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

  4. Opciones globales estáticas: EO.Pdf utiliza HtmlToPdf.Options estáticas para la configuración, lo que no es seguro para los hilos y resulta problemático en aplicaciones web multiusuario.

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

AspectoEO.PdfIronPDF
Tamaño del paquete126 MBOptimizado (~50MB)
Cuestiones de LegadoMigración a IECódigo limpio y moderno
Soporte de PlataformaCentrado en WindowsAuténtica multiplataforma
ConfiguraciónEstática/global (no thread-safe)Basado en instancias, a prueba de hilos
Diseño de APIMixto (HtmlToPdf + ACM)Unificado y coherente
DocumentaciónLimitadoTutoriales completos
Moderno .NET.NET Standard.NET 6/7/8/9+ nativo
Soporte AsyncLimitadoAsync/await completo

Beneficios clave de la migración

  1. 50% más pequeño: empaquetado optimizado deIronPDFen Chromium
  2. True Cross-Platform: Funciona de forma idéntica en Windows, Linux, macOS, Docker
  3. Configuración a prueba de hilos: opciones de renderizador basadas en instancias
  4. API moderna: Nombres de métodos coherentes e intuitivos
  5. 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"
SHELL

Espacios de nombres comunes de EO.Pdf que hay que buscar:

  • EO.Pdf - HTML básico a PDF
  • EO.Pdf.Acm - Modelo de contenido avanzado (ACM)
  • EO.Pdf.Contents - Manipulación de contenido de bajo nivel
  • EO.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 IronPdf
SHELL

Paso 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.com
$vbLabelText   $csharpLabel

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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Referencia completa de migración de API

Mapeo de clases principales

Clase EO.PdfEquivalente de IronPDFNotas
<código>HtmlToPdf</código<código>ChromePdfRenderer</códigoBasado en instancias
Documento PDFDocumento PDFMétodos similares pero diferentes
<código>HtmlToPdfOptions</código<código>ChromePdfRenderOptions</códigoA través de RenderingOptions
<código>AcmRender</códigoNo es necesarioUtilice HTML/CSS en su lugar
AcmTextHTML <span>, <p>
<código>AcmBlock</códigoHTML <código>
</código>

Métodos

Método EO.PdfMétodo IronPDFNotas
<código>HtmlToPdf.ConvertHtml(html, path)</códigorenderer.RenderHtmlAsPdf(html) then SaveAs(path)Dos pasos en IronPDF
<código>HtmlToPdf.ConvertUrl(url, path)</códigorenderer.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ódigoFábrica estática
doc.Append(otro)<código>PdfDocument.Merge(doc1, doc2)</códigoMétodo de fusión estática

Mapeo de opciones

Opción EO.PdfOpciones de renderizado de IronPDFNotas
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.com
$vbLabelText   $csharpLabel

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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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.");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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.");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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 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.com
$vbLabelText   $csharpLabel

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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más