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

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

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

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

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

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

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

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. Huella 50 % más pequeña: empaquetado Chromium optimizado de IronPDF
  2. Verdaderamente multiplataforma: funciona de forma idéntica en Windows, Linux, macOS y Docker.
  3. Configuración segura para subprocesos: opciones de renderizador basadas en instancias
  4. API moderna: nombres de métodos consistentes e intuitivos
  5. 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"
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;
$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";
$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!");
    }
}
$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!");
    }
}
$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!");
    }
}
$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!");
    }
}
$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.");
    }
}
$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.");
    }
}
$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!");
    }
}
$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!");
    }
}
$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 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;
$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;
$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);
$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");
$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");
$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 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.

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