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

Migración de ActivePDF a IronPDF: (Guía .NET)

Migrar de ActivePDFa IronPDF: Guía completa de migración a C

ActivePDF es desde hace mucho tiempo una herramienta fiable de manipulación de PDF para desarrolladores .NET. Sin embargo, desde su adquisición por Foxit, muchos equipos de desarrollo se enfrentan a la incertidumbre sobre la futura dirección de la plataforma, los términos de licencia y la innovación continua. Esta guía proporciona una ruta de migración completa y paso a paso de ActivePDFa IronPDF, una biblioteca PDF .NET moderna y mantenida activamente con soporte completo desde .NET Framework 4.6.2 hasta .NET 9 y más allá.

¿Por qué migrar de ActivePDF?

La adquisición de ActivePDFpor parte de Foxit ha introducido varios retos que afectan a los desarrolladores que crean soluciones de generación y manipulación de PDF en aplicaciones .NET.

Futuro incierto del producto

La transición de ActivePDFbajo la propiedad de Foxit plantea preguntas legítimas sobre la trayectoria de desarrollo a largo plazo del kit de herramientas. Los desarrolladores que confían en ActivePDFse enfrentan al riesgo potencial de que la biblioteca se convierta en un producto heredado con soporte reducido e innovación estancada. Para los equipos que planifican proyectos que se extienden hasta 2025 y 2026, esta incertidumbre crea un riesgo técnico significativo.

Complicaciones de las licencias

La adquisición ha introducido incertidumbres en materia de licencias que pueden complicar las implantaciones. El modelo de licencia tradicional de ActivePDF, basado en máquinas, crea fricciones en los entornos modernos de nube y contenedores, en los que las aplicaciones se escalan dinámicamente a través de la infraestructura.

Patrones de arquitectura de Legacy

La arquitectura de ActivePDFrefleja una filosofía de diseño más antigua centrada en patrones de conjunto de herramientas con estado. El flujo de trabajo OpenOutputFile/CloseOutputFile requiere una gestión explícita del gestor de archivos que no se ajusta a las convenciones modernas de C# y puede introducir problemas de gestión de recursos si no se maneja con cuidado.

Instalación y configuración

A diferencia de la gestión de paquetes actual basada en NuGet, ActivePDFa menudo requiere referencias DLL manuales y una configuración de ruta explícita al instanciar el kit de herramientas, un patrón que aumenta la fricción de la incorporación y complica las canalizaciones de CI/CD.

ActivePDFfrente a IronPDF: Diferencias clave

Antes de sumergirse en el proceso de migración, comprender las diferencias fundamentales entre ActivePDFeIronPDFayuda a establecer las expectativas para los cambios de código necesarios.

AspectoActivePDFIronPDF
Estado de la empresaAdquirida por Foxit (futuro incierto)Hoja de ruta de desarrollo independiente y clara
InstalaciónReferencias DLL manualesPaquete simple NuGet
Patrón APIStateful (OpenOutputFile/CloseOutputFile)API fluida y funcional
Modelo de licenciaBloqueado por máquinaClave basada en el código
Soporte .NETEnfoque del legado .NET FrameworkDe .NET Framework 4.6.2 a .NET 9+
Manejo de erroresCódigos enteros de retornoModerno basado en excepciones
Soporte AsyncNo disponibleSoporte completo de async/await

Preparación de la migración

Audite su base de código

Antes de comenzar la migración, identifique todo el uso de ActivePDFen su solución. Ejecute estos comandos en su directorio de soluciones:

grep -r "using ActivePDF" --include="*.cs" .
grep -r "using APToolkitNET" --include="*.cs" .
grep -r "APToolkitNET" --include="*.csproj" .
grep -r "using ActivePDF" --include="*.cs" .
grep -r "using APToolkitNET" --include="*.cs" .
grep -r "APToolkitNET" --include="*.csproj" .
SHELL

Cambios de última hora en el documento

Comprender las diferencias fundamentales entre las API ayuda a planificar la estrategia de migración:

CategoríaComportamiento de ActivePDFComportamiento de IronPDFAcción de migración
Modelo de objetoUn único objeto ToolkitChromePdfRenderer + PdfDocumentCuestiones aparte
Operaciones con archivosOpenOutputFile()/CloseOutputFile()Directo SaveAs()Eliminar las llamadas de apertura/cierre
Creación de páginasmétodo NewPage()Automática a partir de HTMLEliminar las llamadas a la creación de páginas
Valores de retornoCódigos de error enterosExcepcionesImplementar try/catch
Unidades de tamaño de páginaPuntos (612x792 = Carta)Enumeraciones o milímetrosMedidas de actualizació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 JetBrains Rider
  • Acceso al gestor de paquetes NuGet
  • Clave de licencia deIronPDF(prueba gratuita disponible en ironpdf.com)

Proceso de migración paso a paso

Paso 1: Actualizar paquetes NuGet

Elimine el paquete ActivePDFe instale IronPDF:

# Remove ActivePDFpackage
dotnet remove package APToolkitNET

# Install IronPDF
dotnet add package IronPdf
# Remove ActivePDFpackage
dotnet remove package APToolkitNET

# Install IronPDF
dotnet add package IronPdf
SHELL

Alternativamente, a través de la consola del gestor de paquetes de Visual Studio:

Uninstall-Package APToolkitNET
Install-Package IronPdf

Para proyectos con referencias DLL manuales, elimine la referencia de su archivo .csproj:

<!-- Remove this block -->
<Reference Include="APToolkitNET">
    <HintPath>path\to\APToolkitNET.dll</HintPath>
</Reference>
<!-- Remove this block -->
<Reference Include="APToolkitNET">
    <HintPath>path\to\APToolkitNET.dll</HintPath>
</Reference>
XML

Paso 2: Configurar la clave de licencia

Añada la clave de licencia deIronPDFal iniciar la aplicación, antes de cualquier operación con PDF:

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Paso 3: Actualizar referencias de espacios de nombres

Realice una búsqueda y sustitución global en toda la solución:

VisiteSustituir por
usando ActivePDF.Toolkit;<código>usando IronPDF;</código>
usando APToolkitNET;<código>usando IronPDF;</código>
usando APToolkitNET.PDFObjects;<código>usando IronPDF;</código>
utilizando APToolkitNET.Common;<código>usando IronPDF;</código>

Referencia completa de migración de API

Métodos de creación de documentos

Método ActivePDFEquivalente de IronPDFNotas
nuevo Toolkit()<código>new ChromePdfRenderer()</códigoEl renderizador crea PDF
<código>toolkit.OpenOutputFile(ruta)</códigoNo se necesitan equivalentesSimplemente llame a SaveAs() al final
<código>toolkit.CloseOutputFile()</códigoNo se necesitan equivalentesLimpieza automática
<código>toolkit.AddHTML(html)</códigorenderer.RenderHtmlAsPdf(html)Devuelve PdfDocument
<código>toolkit.AddURL(url)</código<código>renderer.RenderUrlAsPdf(url)</códigoConversión de URL a PDF
<código>toolkit.SaveAs(ruta)</código<código>pdf.SaveAs(ruta)</códigoGuardar en archivo

Operaciones con archivos

Método ActivePDFEquivalente de IronPDFNotas
<código>toolkit.OpenInputFile(ruta)</código<código>PdfDocument.FromFile(path)</códigoCargar PDF existente
<código>toolkit.AddPDF(ruta)</códigoPdfDocument.Merge()Para operaciones de fusión
<código>toolkit.GetPageCount()</código<código>pdf.PageCount</códigoAcceso a la propiedad
toolkit.GetText()<código>pdf.ExtractAllText()</códigoExtracción de texto

Configuración de la página

Método ActivePDFEquivalente de IronPDF
<código>toolkit.SetPageSize(612, 792)</código<código>RenderingOptions.PaperSize = PdfPaperSize.Letter</código
toolkit.SetOrientation("Landscape")<código>RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape</código
toolkit.SetMargins(t, b, l, r)<código>RenderingOptions.MarginTop/Bottom/Left/Right</código

Métodos de seguridad

Método ActivePDFEquivalente de IronPDF
<código>toolkit.Encrypt(password)</código<código>pdf.SecuritySettings.OwnerPassword</código
toolkit.SetUserPassword(pwd)<código>pdf.SecuritySettings.UserPassword</código
<código>toolkit.SetPermissions(flags)</código<código>pdf.SecuritySettings.AllowUserXxx</código
<código>toolkit.AddWatermark(text)</código<código>pdf.ApplyWatermark(html)</código

Ejemplos de migración de código

Conversión de HTML a PDF

La conversión de cadenas HTML a documentos PDF representa uno de los escenarios de generación de PDF más comunes. Así es como se transforma el código durante la migración.

Implementación de ActivePDF:

// NuGet: Install-Package APToolkitNET
using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        if (toolkit.OpenOutputFile("output.pdf") == 0)
        {
            toolkit.AddHTML(htmlContent);
            toolkit.CloseOutputFile();
            Console.WriteLine("PDF created successfully");
        }
    }
}
// NuGet: Install-Package APToolkitNET
using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        if (toolkit.OpenOutputFile("output.pdf") == 0)
        {
            toolkit.AddHTML(htmlContent);
            toolkit.CloseOutputFile();
            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()
    {
        var renderer = new ChromePdfRenderer();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El enfoque deIronPDFelimina la gestión explícita del manejo de archivos y proporciona un código más limpio y legible. Para escenarios avanzados de HTML a PDF, ChromePdfRenderer deIronPDFutiliza un motor de renderizado basado en Chromium para una compatibilidad perfecta con CSS y JavaScript.

Conversión de URL a PDF

La captura de páginas web como documentos PDF sigue un patrón de modernización similar.

Implementación de ActivePDF:

using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        string url = "https://www.example.com";

        if (toolkit.OpenOutputFile("webpage.pdf") == 0)
        {
            toolkit.AddURL(url);
            toolkit.CloseOutputFile();
            Console.WriteLine("PDF from URL created successfully");
        }
    }
}
using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        string url = "https://www.example.com";

        if (toolkit.OpenOutputFile("webpage.pdf") == 0)
        {
            toolkit.AddURL(url);
            toolkit.CloseOutputFile();
            Console.WriteLine("PDF from URL created successfully");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string url = "https://www.example.com";

        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");

        Console.WriteLine("PDF from URL created successfully");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string url = "https://www.example.com";

        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

Fusión de varios PDF

La combinación de varios documentos PDF en un único archivo demuestra el enfoque funcional deIronPDFpara la manipulación de documentos.

Implementación de ActivePDF:

using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        if (toolkit.OpenOutputFile("merged.pdf") == 0)
        {
            toolkit.AddPDF("document1.pdf");
            toolkit.AddPDF("document2.pdf");
            toolkit.CloseOutputFile();
            Console.WriteLine("PDFs merged successfully");
        }
    }
}
using ActivePDF.Toolkit;
using System;

class Program
{
    static void Main()
    {
        Toolkit toolkit = new Toolkit();

        if (toolkit.OpenOutputFile("merged.pdf") == 0)
        {
            toolkit.AddPDF("document1.pdf");
            toolkit.AddPDF("document2.pdf");
            toolkit.CloseOutputFile();
            Console.WriteLine("PDFs merged successfully");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");

        Console.WriteLine("PDFs merged successfully");
    }
}
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");

        Console.WriteLine("PDFs merged successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para situaciones de fusión más avanzadas, incluida la extracción selectiva de páginas, consulte la documentación sobre fusión de PDF.

Añadir encabezados y pies de página

Implementación de ActivePDF:

using ActivePDF.Toolkit;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenOutputFile(outputPath) == 0)
    {
        toolkit.SetHeader("My Document", 12, "Arial");
        toolkit.SetFooter("Page %p of %P", 10, "Arial");
        toolkit.AddHTML(html);
        toolkit.CloseOutputFile();
    }
}
using ActivePDF.Toolkit;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenOutputFile(outputPath) == 0)
    {
        toolkit.SetHeader("My Document", 12, "Arial");
        toolkit.SetFooter("Page %p of %P", 10, "Arial");
        toolkit.AddHTML(html);
        toolkit.CloseOutputFile();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

using IronPdf;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "My Document",
        FontSize = 12,
        FontFamily = "Arial"
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        FontSize = 10,
        FontFamily = "Arial"
    };

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
using IronPdf;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "My Document",
        FontSize = 12,
        FontFamily = "Arial"
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        FontSize = 10,
        FontFamily = "Arial"
    };

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF es compatible con encabezados y pies de página HTML y basados en texto, lo que proporciona una flexibilidad de diseño total.

Protección y seguridad de contraseñas

Implementación de ActivePDF:

using ActivePDF.Toolkit;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenInputFile(inputPath) == 0)
    {
        toolkit.Encrypt(password);
        toolkit.SetUserPassword(password);
        toolkit.SetPermissions(4); // Print only
        toolkit.SaveAs(outputPath);
        toolkit.CloseInputFile();
    }
}
using ActivePDF.Toolkit;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenInputFile(inputPath) == 0)
    {
        toolkit.Encrypt(password);
        toolkit.SetUserPassword(password);
        toolkit.SetPermissions(4); // Print only
        toolkit.SaveAs(outputPath);
        toolkit.CloseInputFile();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

using IronPdf;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.SecuritySettings.OwnerPassword = password;
    pdf.SecuritySettings.UserPassword = password;
    pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

    pdf.SaveAs(outputPath);
}
using IronPdf;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.SecuritySettings.OwnerPassword = password;
    pdf.SecuritySettings.UserPassword = password;
    pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La API de configuración de seguridad deIronPDFproporciona un control granular sobre los permisos de los documentos con enums fuertemente tipados en lugar de indicadores enteros.

Extracción de texto

Implementación de ActivePDF:

using ActivePDF.Toolkit;

public string ExtractText(string pdfPath)
{
    Toolkit toolkit = new Toolkit();
    string text = "";

    if (toolkit.OpenInputFile(pdfPath) == 0)
    {
        int pageCount = toolkit.GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            text += toolkit.GetTextFromPage(i) + "\n";
        }
        toolkit.CloseInputFile();
    }

    return text;
}
using ActivePDF.Toolkit;

public string ExtractText(string pdfPath)
{
    Toolkit toolkit = new Toolkit();
    string text = "";

    if (toolkit.OpenInputFile(pdfPath) == 0)
    {
        int pageCount = toolkit.GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            text += toolkit.GetTextFromPage(i) + "\n";
        }
        toolkit.CloseInputFile();
    }

    return text;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

using IronPdf;

public string ExtractText(string pdfPath)
{
    using var pdf = PdfDocument.FromFile(pdfPath);
    return pdf.ExtractAllText();
}
using IronPdf;

public string ExtractText(string pdfPath)
{
    using var pdf = PdfDocument.FromFile(pdfPath);
    return pdf.ExtractAllText();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La implementación deIronPDFreduce la extracción de texto de varias líneas a una única llamada a un método.

Añadir marcas de agua

Implementación de ActivePDF:

using ActivePDF.Toolkit;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenInputFile(inputPath) == 0)
    {
        int pageCount = toolkit.GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            toolkit.SetPage(i);
            toolkit.AddWatermark(watermarkText, 45, 0.5f);
        }
        toolkit.SaveAs(outputPath);
        toolkit.CloseInputFile();
    }
}
using ActivePDF.Toolkit;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenInputFile(inputPath) == 0)
    {
        int pageCount = toolkit.GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            toolkit.SetPage(i);
            toolkit.AddWatermark(watermarkText, 45, 0.5f);
        }
        toolkit.SaveAs(outputPath);
        toolkit.CloseInputFile();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

using IronPdf;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.ApplyWatermark(
        $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>",
        rotation: 45,
        opacity: 50);

    pdf.SaveAs(outputPath);
}
using IronPdf;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.ApplyWatermark(
        $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>",
        rotation: 45,
        opacity: 50);

    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El marcado de agua basado en HTML deIronPDFpermite el estilo CSS para un control total del diseño sin necesidad de iterar página por página.

Integración con .NET Core

Las aplicaciones web modernas se benefician significativamente de los patrones de integración más limpios de IronPDF.

Patrón ActivePDF:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenOutputFile("temp.pdf") == 0)
    {
        toolkit.AddHTML(request.Html);
        toolkit.CloseOutputFile();

        byte[] bytes = System.IO.File.ReadAllBytes("temp.pdf");
        return File(bytes, "application/pdf", "report.pdf");
    }

    return BadRequest("PDF generation failed");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Toolkit toolkit = new Toolkit();

    if (toolkit.OpenOutputFile("temp.pdf") == 0)
    {
        toolkit.AddHTML(request.Html);
        toolkit.CloseOutputFile();

        byte[] bytes = System.IO.File.ReadAllBytes("temp.pdf");
        return File(bytes, "application/pdf", "report.pdf");
    }

    return BadRequest("PDF generation failed");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Patrón IronPDF:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF elimina la necesidad de archivos temporales, devolviendo los datos binarios PDF directamente desde la memoria.

Soporte asíncrono para aplicaciones web

ActivePDF carece de soporte nativo async.IronPDFofrece todas las funciones async/await esenciales para las aplicaciones web escalables:

using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Configuración de la inyección de dependencias

Para aplicaciones .NET 6+, registre los serviciosIronPDFen su contenedor DI:

// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    Task<byte[]> GeneratePdfFromUrlAsync(string url);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task<byte[]> GeneratePdfFromUrlAsync(string url)
    {
        using var pdf = await _renderer.RenderUrlAsPdfAsync(url);
        return pdf.BinaryData;
    }
}
// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    Task<byte[]> GeneratePdfFromUrlAsync(string url);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task<byte[]> GeneratePdfFromUrlAsync(string url)
    {
        using var pdf = await _renderer.RenderUrlAsPdfAsync(url);
        return pdf.BinaryData;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Migración de la gestión de errores

ActivePDF utiliza códigos de retorno enteros que requieren tablas de consulta.IronPDFutiliza un moderno sistema de gestión de excepciones:

Manejo de errores de ActivePDF:

Toolkit toolkit = new Toolkit();
int result = toolkit.OpenOutputFile(path);

if (result != 0)
{
    // Error - need to look up error code
    Console.WriteLine($"Error code: {result}");
}
Toolkit toolkit = new Toolkit();
int result = toolkit.OpenOutputFile(path);

if (result != 0)
{
    // Error - need to look up error code
    Console.WriteLine($"Error code: {result}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Manejo de errores de IronPDF:

try
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(path);
}
catch (IronPdf.Exceptions.IronPdfProductException ex)
{
    Console.WriteLine($"IronPDF Error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"General Error: {ex.Message}");
}
try
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(path);
}
catch (IronPdf.Exceptions.IronPdfProductException ex)
{
    Console.WriteLine($"IronPDF Error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"General Error: {ex.Message}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Consejos para optimizar el rendimiento

Reutilizar la instancia del renderizador

La creación de un nuevo ChromePdfRenderer tiene una sobrecarga de inicialización. Para operaciones por lotes, reutilice una única instancia:

var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Utilizar Async en aplicaciones web

Para las aplicaciones ASP.NET Core, la generación asíncrona de PDF mejora el rendimiento:

public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Disposición adecuada de recursos

Utilice siempre declaraciones using para garantizar una limpieza adecuada:

using var pdf = renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData;
using var pdf = renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Compresión de imágenes

Reduzca el tamaño de los archivos de salida con la compresión de imágenes:

using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.CompressImages(85); // 85% quality
pdf.SaveAs("compressed.pdf");
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.CompressImages(85); // 85% quality
pdf.SaveAs("compressed.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Solución de problemas comunes de migración

Asunto: Diferencias de tamaño de página

ActivePDF utiliza puntos (612x792 = Letter), mientras queIronPDFutiliza enums o milímetros:

// ActivePDF: Points
toolkit.SetPageSize(612, 792);

// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom in mm:
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(215.9, 279.4);
// ActivePDF: Points
toolkit.SetPageSize(612, 792);

// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom in mm:
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(215.9, 279.4);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Asunto: Falta el equivalente de CloseOutputFile

IronPDF utiliza un paradigma moderno sin gestión explícita de gestores de archivos:

// ActivePDF
toolkit.OpenOutputFile(path);
toolkit.AddHTML(html);
toolkit.CloseOutputFile(); // Required!

//IronPDF- no open/close needed
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path); // 'using' handles cleanup
// ActivePDF
toolkit.OpenOutputFile(path);
toolkit.AddHTML(html);
toolkit.CloseOutputFile(); // Required!

//IronPDF- no open/close needed
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path); // 'using' handles cleanup
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Asunto: PDF Renders Blank

Si el contenido que depende de JavaScript se muestra en blanco, configure retrasos en la renderización:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000);
// Or wait for element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000);
// Or wait for element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Asunto: CSS/Imágenes no se cargan

Configure la URL base para la resolución de rutas relativas:

renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/assets/");
renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/assets/");
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:

  • [ ] Ejecutar todas las pruebas unitarias y de integración existentes
  • [ ] Comparar visualmente resultados PDF con versiones anteriores
  • [ ] Probar todos los flujos de trabajo PDF en un entorno de prueba
  • [Compruebe que la licencia funciona correctamente (IronPdf.License.IsLicensed)
  • [ ] Comparar el rendimiento con la implementación anterior
  • [ ] Eliminar archivos de instalación antiguos de ActivePDFy referencias DLL
  • [ ] Actualizar las dependencias de la canalización CI/CD
  • [ ] Documente los patrones deIronPDFpara su equipo de desarrollo

Proteja su solución PDF para el futuro

Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características del lenguaje, elegir una biblioteca PDF .NET con desarrollo activo garantiza que sus aplicaciones sigan siendo compatibles con las capacidades de tiempo de ejecución en evolución. El compromiso deIronPDFde admitir las últimas versiones de .NET significa que su inversión en migración le reportará beneficios cuando sus proyectos se extiendan hasta 2025 y 2026.

Recursos adicionales


La migración de ActivePDFaIronPDFmoderniza su infraestructura de generación de PDF con API más limpias, mejor integración .NET y soporte activo a largo plazo. La inversión en la migración resulta rentable gracias a la mejora del mantenimiento del código, las capacidades asíncronas y la confianza en el desarrollo continuo de la biblioteca PDF.

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