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

Cómo migrar de ExpertPdf a IronPDF en C#

ExpertPdf es un conversor comercial de HTML a PDF para .NET que lleva muchos años al servicio de los desarrolladores. Sin embargo, ExpertPdfse enfrenta a desafíos significativos en el panorama actual de desarrollo en rápida evolución: documentación congelada desde 2018, dependencia de una versión heredada de Chrome que echa de menos las características modernas de CSS3, precios premium que oscilan entre $ 550 y $ 1200 para una tecnología obsoleta, y una suite de productos fragmentada que requiere licencias separadas para la fusión, la seguridad y la división. Esta completa guía proporciona una ruta de migración paso a paso de ExpertPdfa IronPDF, una moderna biblioteca PDF .NET con la última renderización de Chromium, actualizaciones mensuales y una arquitectura de paquetes todo en uno.

¿Por qué migrar de ExpertPdfa IronPDF?

ExpertPdf presenta varios retos que llevan a los equipos de desarrollo a evaluar alternativas modernas. Comprender estas cuestiones es esencial para planificar su estrategia de migración.

Los problemas de ExpertPdf

  1. Documentación congelada desde 2018: La documentación de ExpertPdfno se ha actualizado en más de 6 años. Encontrar información actualizada, ejemplos y buenas prácticas es cada vez más difícil a medida que evoluciona el ecosistema .NET.

  2. Versión obsoleta de Chrome: ExpertPdfdepende de una versión heredada de Chrome para su renderización. Es posible que las funciones modernas de CSS3 (Flexbox, Grid, Variables CSS) no se muestren correctamente y que no se apliquen los parches de seguridad.

  3. Precios premium para tecnología heredada: entre $550 y $1200 por licencia, ExpertPdfcobra precios premium y al mismo tiempo ofrece tecnología de renderizado obsoleta.

  4. Paquete de productos fragmentado: ExpertPdfvende paquetes separados para diferentes funciones (HtmlToPdf Converter, PDF Merger, PDF Security, PDF Splitter y PDF to Image), cada uno de los cuales requiere una licencia independiente.

  5. Compatibilidad limitada con .NET moderno: si bien ExpertPdftiene paquetes .NET Core, estos están por detrás de las versiones y prácticas modernas de .NET.

Comparación de arquitecturas

Aspecto ExpertPdf IronPDF
Documentación Congelado desde 2018 Actualización continua
Motor de renderizado Chrome heredado Último Chromium
Soporte CSS CSS3 limitado CSS3 completo (Flexbox, Grid)
Precio $550-$1,200 Precios competitivos
Frecuencia de actualización Poco frecuente Publicaciones mensuales
Modelo de producto Fragmentado (5+ DLLs) Biblioteca todo en uno
Moderno .NET Limitado .NET 6/7/8/9+ nativo
Soporte Async Limitado Async/await completo

Beneficios clave de la migración

  1. Renderizado moderno: el último motor Chromium para una salida con píxeles perfectos
  2. Paquete todo en uno: generación, fusión, seguridad y extracción de PDF en un solo NuGet
  3. Desarrollo activo: actualizaciones mensuales con nuevas funciones y parches de seguridad
  4. Mejor documentación: tutoriales y ejemplos completos
  5. Verdadera multiplataforma: compatibilidad con Windows, Linux, macOS y Docker

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)

Uso de Auditoría ExpertaPdf

Ejecuta estos comandos en tu directorio de soluciones para identificar todas las referencias a ExpertPdf:

# Find all ExpertPdfreferences
grep -r "ExpertPdf\|PdfConverter\|PDFMerge\|PdfSecurityManager" --include="*.cs" .

# Check NuGet packages
dotnet list package | grep -i "ExpertPdf"
# Find all ExpertPdfreferences
grep -r "ExpertPdf\|PdfConverter\|PDFMerge\|PdfSecurityManager" --include="*.cs" .

# Check NuGet packages
dotnet list package | grep -i "ExpertPdf"
SHELL

Paquetes de ExpertPdfmás comunes:

  • ExpertPdf.HtmlToPdf - Conversión de HTML a PDF
  • ExpertPdf.PDFMerge - Fusión de archivos PDF
  • ExpertPdf.PDFSecurity - Cifrado y contraseñas
  • ExpertPdf.PDFSplit - División de PDF
  • ExpertPdf.PdfToImage - Conversión de PDF a imagen

Comprensión del cambio de patrón básico

ExpertPdf utiliza Convertidor de PDFcon métodos de devolución directa de matrices de bytes.IronPDFutiliza <código>ChromePdfRendererque devuelve objetosPdfDocument` que proporcionan capacidades de manipulación adicionales antes de guardar.

Proceso de migración paso a paso

Paso 1: Actualizar paquetes NuGet

Elimine todos los paquetes de ExpertPdfe instale IronPDF:

# Remove all ExpertPdfpackages
dotnet remove package ExpertPdf.HtmlToPdf
dotnet remove package ExpertPdf.PDFMerge
dotnet remove package ExpertPdf.PDFSecurity
dotnet remove package ExpertPdf.PDFSplit
dotnet remove package ExpertPdf.PdfToImage

# InstallIronPDF(includes all features)
dotnet add package IronPdf
# Remove all ExpertPdfpackages
dotnet remove package ExpertPdf.HtmlToPdf
dotnet remove package ExpertPdf.PDFMerge
dotnet remove package ExpertPdf.PDFSecurity
dotnet remove package ExpertPdf.PDFSplit
dotnet remove package ExpertPdf.PdfToImage

# InstallIronPDF(includes all features)
dotnet add package IronPdf
SHELL

Paso 2: Actualizar referencias de espacios de nombres

Sustituya los espacios de nombres ExpertPdfpor IronPDF:

// Remove these
using ExpertPdf.HtmlToPdf;

// Add this
using IronPdf;
// Remove these
using ExpertPdf.HtmlToPdf;

// Add this
using IronPdf;
$vbLabelText   $csharpLabel

Paso 3: Configurar la licencia

ExpertPdf utiliza licencias por conversor.IronPDFutiliza una única licencia global:

// 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 ExpertPdf Equivalente de IronPDF Notas
Convertidor de PDF <código>ChromePdfRenderer` Clase principal de conversión
<código>PdfDocumentOptions <código>ChromePdfRenderOptions A través de RenderingOptions
<código>PdfHeaderOptions` <código>TextHeaderFooter o <código>HtmlHeaderFooter Configurable
<código>PdfFooterOptions <código>TextHeaderFooter o <código>HtmlHeaderFooter Configurable
<código>PDFMerge PdfDocument.Merge() Método estático

Métodos

Método ExpertPdf Método IronPDF Notas
<código>pdfConverter.GetPdfBytesFromHtmlString(html)|renderer.RenderHtmlAsPdf(html).BinaryData`
<código>pdfConverter.GetPdfBytesFromUrl(url)` <código>renderer.RenderUrlAsPdf(url).BinaryData
<código>pdfConverter.GetPdfBytesFromHtmlFile(path) renderer.RenderHtmlFileAsPdf(path).BinaryData
<código>pdfConverter.SavePdfFromUrlToFile(url, path)` <código>renderer.RenderUrlAsPdf(url).SaveAs(path) Dos pasos

Mapeo de opciones

Opción ExpertPdf Opciones de renderizado de IronPDF Notas
<código>PdfDocumentOptions.PdfPageSize = PdfPageSize.A4 <código>TamañoPapel = PdfPaperSize.A4
PdfDocumentOptions.PdfPageOrientation = Portrait Orientación del papel = PdfPaperOrientation.Portrait
<código>PdfDocumentOptions.MarginTop` <código>MarginTop Mismo nombre de propiedad
<código>PdfHeaderOptions.HeaderText <código>TextHeader.CenterText
<código>PdfFooterOptions.FooterText <código>TextFooter.RightText

Conversión de tokens de numeración de páginas

ExpertPdf eIronPDFutilizan una sintaxis diferente para los números de página:

ExpertPdf IronPDF
<código>&p; {page}
&P; {total de páginas}

Ejemplos de migración de código

Conversión de HTML a PDF

La conversión fundamental de HTML a PDF demuestra el cambio del patrón de matriz de bytes de ExpertPdfal enfoque de documento-objeto de IronPDF.

Implementación de ExpertPdf:

// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();

        // Convert HTML string to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>");

        // Save to file
        System.IO.File.WriteAllBytes("output.pdf", pdfBytes);

        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();

        // Convert HTML string to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>");

        // Save to file
        System.IO.File.WriteAllBytes("output.pdf", pdfBytes);

        Console.WriteLine("PDF created successfully!");
    }
}
$vbLabelText   $csharpLabel

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF from HTML string
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");

        // Save to file
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF from HTML string
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");

        // Save to file
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
$vbLabelText   $csharpLabel

El enfoque deIronPDFdevuelve un objeto PdfDocument, lo que permite una manipulación adicional (fusión, marca de agua, seguridad) antes de guardarlo. Para más opciones, consulte la documentación HTML a PDF.

URL a PDF con configuración de página

Implementación de ExpertPdf:

// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();

        // Set page size and orientation
        pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
        pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;

        // Convert URL to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com");

        // Save to file
        System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);

        Console.WriteLine("PDF from URL created successfully!");
    }
}
// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();

        // Set page size and orientation
        pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
        pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;

        // Convert URL to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com");

        // Save to file
        System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);

        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()
    {
        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();

        // Set page size and orientation
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

        // Convert URL to PDF
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");

        // Save to file
        pdf.SaveAs("webpage.pdf");

        Console.WriteLine("PDF from URL created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();

        // Set page size and orientation
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

        // Convert URL to PDF
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");

        // Save to file
        pdf.SaveAs("webpage.pdf");

        Console.WriteLine("PDF from URL created successfully!");
    }
}
$vbLabelText   $csharpLabel

IronPDF's RenderingOptions proporciona acceso directo a propiedades para la configuración de páginas. Para obtener más opciones, consulte URL a la documentación en PDF.

Cabeceras y pies de página con números de página

Este ejemplo demuestra la diferencia crítica en la configuración del encabezado/pie de página: ExpertPdfutiliza clases <código>PdfHeaderOptionsy <código>PdfFooterOptions</code>separadas con tokens&p;/&P;, mientras queIronPDFutilizaTextHeaderFootercon marcadores de posición{page}/{total-pages}`.

Implementación de ExpertPdf:

// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();

        // Enable header
        pdfConverter.PdfHeaderOptions.ShowHeader = true;
        pdfConverter.PdfHeaderOptions.HeaderText = "Document Header";
        pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center;

        // Enable footer with page numbers
        pdfConverter.PdfFooterOptions.ShowFooter = true;
        pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;";
        pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right;

        // Convert HTML file to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html");

        // Save to file
        System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes);

        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}
// NuGet: Install-Package ExpertPdf.HtmlToPdf
using ExpertPdf.HtmlToPdf;
using System;

class Program
{
    static void Main()
    {
        // Create the PDF converter
        PdfConverter pdfConverter = new PdfConverter();

        // Enable header
        pdfConverter.PdfHeaderOptions.ShowHeader = true;
        pdfConverter.PdfHeaderOptions.HeaderText = "Document Header";
        pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center;

        // Enable footer with page numbers
        pdfConverter.PdfFooterOptions.ShowFooter = true;
        pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;";
        pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right;

        // Convert HTML file to PDF
        byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html");

        // Save to file
        System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes);

        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}
$vbLabelText   $csharpLabel

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();

        // Configure header
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Document Header",
            DrawDividerLine = true
        };

        // Configure footer with page numbers
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true
        };

        // Convert HTML file to PDF
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");

        // Save to file
        pdf.SaveAs("output-with-header-footer.pdf");

        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF renderer
        var renderer = new ChromePdfRenderer();

        // Configure header
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Document Header",
            DrawDividerLine = true
        };

        // Configure footer with page numbers
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            RightText = "Page {page} of {total-pages}",
            DrawDividerLine = true
        };

        // Convert HTML file to PDF
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");

        // Save to file
        pdf.SaveAs("output-with-header-footer.pdf");

        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}
$vbLabelText   $csharpLabel

El TextHeaderFooter deIronPDFproporciona las propiedades LeftText, CenterText y RightText con líneas divisorias opcionales. Para los encabezados basados en HTML, utilice HtmlHeaderFooter. Para más opciones, consulte la documentación sobre encabezados y pies de página.

Notas de migración críticas

Localización de la clave de licencia

ExpertPdf utiliza licencias por conversor.IronPDFutiliza una única licencia global establecida una vez al inicio:

// ExpertPdf- per converter
pdfConverter.LicenseKey = "EXPERTPDF-LICENSE";

//IronPDF- global, set once
IronPdf.License.LicenseKey = "IRONPDF-LICENSE";
// ExpertPdf- per converter
pdfConverter.LicenseKey = "EXPERTPDF-LICENSE";

//IronPDF- global, set once
IronPdf.License.LicenseKey = "IRONPDF-LICENSE";
$vbLabelText   $csharpLabel

Conversión de tokens de numeración de páginas

Sustituye los tokens de ExpertPdfpor marcadores de posición de IronPDF:

// ExpertPdf
"Page &p; of &P;"

// IronPDF
"Page {page} of {total-pages}"
// ExpertPdf
"Page &p; of &P;"

// IronPDF
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Paquetes fragmentados consolidados

Los paquetes independientes de ExpertPdf(PDFMerge, PDFSecurity, PDFSplit, PdfToImage) están todos incluidos en el paquete único de IronPDF:

// ExpertPdf- requires separate PDFMerge package
var merger = new PdfMerge();
merger.AppendPDFFile("file1.pdf");
merger.AppendPDFFile("file2.pdf");
merger.SaveMergedPDFToFile("merged.pdf");

//IronPDF- included in main package
var pdf1 = PdfDocument.FromFile("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
// ExpertPdf- requires separate PDFMerge package
var merger = new PdfMerge();
merger.AppendPDFFile("file1.pdf");
merger.AppendPDFFile("file2.pdf");
merger.SaveMergedPDFToFile("merged.pdf");

//IronPDF- included in main package
var pdf1 = PdfDocument.FromFile("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
$vbLabelText   $csharpLabel

Para obtener más opciones de fusión, consulte la Documentación sobre la fusión de PDF.

Tamaños de página personalizados

ExpertPdf utiliza puntos.IronPDFutiliza milímetros. Convertir: puntos / 72 * 25,4 = mm

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 encabezados/pies de página y números de página
  • Probar la configuración de seguridad/cifrado
  • Validar operaciones de fusión
  • Verificar tamaños de página personalizados
  • Evaluación comparativa del rendimiento
  • Pruebas multiplataforma
  • Eliminar archivos de licencia de ExpertPdf
  • 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 un desarrollo activo y un renderizado moderno garantiza la compatibilidad a largo plazo. Las actualizaciones mensuales deIronPDFy el último motor Chromium proporcionan la base para la generación de PDF que seguirá funcionando correctamente con los modernos diseños CSS3 (Flexbox, Grid) a medida que los proyectos se extiendan hasta 2025 y 2026, a diferencia de la versión Chrome heredada de ExpertPdfcongelada en el tiempo.

Recursos adicionales


La migración de ExpertPdfaIronPDFelimina los desafíos de la documentación congelada, la renderización heredada de Chrome, las licencias de productos fragmentadas y la compatibilidad moderna limitada con .NET. La transición a una biblioteca mantenida de forma activa con el último motor Chromium garantiza que la generación de PDF sigue el ritmo de la evolución de los estándares web y los marcos .NET.

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