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

Migración de Foxit PDF SDK a IronPDF: (Guía .NET)

Migrar de Foxit PDF SDKa IronPDF: Guía completa de migración a C

La migración de Foxit PDF SDKaIronPDFagiliza el flujo de trabajo de generación de PDF .NET sustituyendo las complejas API orientadas a la empresa por patrones modernos y fáciles de usar para los desarrolladores. Esta guía proporciona una ruta de migración completa y paso a paso que elimina el código repetitivo y simplifica las operaciones de PDF en toda su base de código.

Por qué migrar de Foxit PDF SDKa IronPDF

Los desafíos de Foxit PDF

Foxit PDF SDK es una potente biblioteca de nivel empresarial, pero conlleva una complejidad significativa que puede ralentizar el desarrollo:

  1. Sistema de licencias complejo: Los múltiples productos, SKU y tipos de licencia (por desarrollador, por servidor, OEM, etc.) dificultan la elección de la opción adecuada para su proyecto.

  2. Precios para empresas: Los precios están adaptados a grandes organizaciones y pueden resultar prohibitivos para equipos más pequeños o desarrolladores individuales.

  3. Instalación manual: Foxit PDF SDKrequiere referencias DLL manuales o fuentes NuGet privadas; no hay ningún paquete NuGet público sencillo disponible.

  4. API Verbosa: La inicialización de bibliotecas con Library.Initialize(), la comprobación de códigos de error y las llamadas explícitas a Library.Release() añaden una gran cantidad de repeticiones a cada operación.

  5. Add-on de conversión HTML independiente: la conversión de HTML a PDF requiere la compra de un add-on adicional, no está incluido en el SDK base.

  6. Configuración compleja: Las configuraciones requieren una configuración detallada de objetos (por ejemplo, HTML2PDFSettingData) con múltiples propiedades.

  7. Herencia de C#: Los patrones de API reflejan los orígenes de C++, sintiéndose menos naturales en las aplicaciones modernas de C#.

Comparación entre Foxit PDF e IronPDF

AspectoFoxit PDF SDKIronPDF
InstalaciónDLLs/private feeds manualesPaquete NuGet simple
LicenciasComplejo, centrado en la empresaTransparente, apto para todos los tamaños
Inicialización<código>Library.Initialize(sn, key)</códigoEstablezca la clave de licencia una vez
Tratamiento de erroresEnumeraciones ErrorCodeExcepciones de .NET Standard
HTML a PDFCompra adicional por separadoMotor Chromium integrado
Estilo APIHerencia de C++, verborreaPatrones modernos de .NET
Limpieza de recursosManual Close()/Release()Desechable/automático
DocumentaciónPortal de documentación empresarialTutoriales públicos

Análisis coste-beneficio

El cambio de Foxit PDF aIronPDFofrece ventajas tangibles para el desarrollo: menor complejidad gracias a API más sencillas, desarrollo más rápido con métodos intuitivos, compatibilidad moderna con .NET, incluida la compatibilidad con async/await y LINQ, un enfoque basado en HTML que aprovecha los conocimientos web existentes y funciones todo incluido sin necesidad de adquirir complementos por separado. Mientras planifica la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una base a prueba de futuro para la generación de PDF.


Antes de empezar

Prerrequisitos

  1. Entorno .NET:IronPDFes compatible con .NET Framework 4.6.2+, .NET Core 3.1+, .NET 5/6/7/8/9+
  2. Acceso a NuGet: asegúrese de que puede instalar paquetes desde NuGet
  3. Clave de licencia: Obtenga su clave de licenciaIronPDFpara uso en producción en ironpdf.com

Haga una copia de seguridad de su proyecto

# Create a backup branch
git checkout -b pre-ironpdf-migration
git add .
git commit -m "Backup before Foxit PDF SDKtoIronPDFmigration"
# Create a backup branch
git checkout -b pre-ironpdf-migration
git add .
git commit -m "Backup before Foxit PDF SDKtoIronPDFmigration"
SHELL

Identificar todos los usos de Foxit PDF

# Find all Foxit PDF SDKreferences
grep -r "foxit\|PDFDoc\|PDFPage\|Library.Initialize\|Library.Release" --include="*.cs" --include="*.csproj" .

# Find Foxit DLL references
find . -name "*.csproj" | xargs grep -l "Foxit\|fsdk"
# Find all Foxit PDF SDKreferences
grep -r "foxit\|PDFDoc\|PDFPage\|Library.Initialize\|Library.Release" --include="*.cs" --include="*.csproj" .

# Find Foxit DLL references
find . -name "*.csproj" | xargs grep -l "Foxit\|fsdk"
SHELL

Documentar la funcionalidad actual

Antes de la migración, catálogo:

  • Qué funciones de Foxit PDF utiliza (conversión HTML, anotaciones, formularios, seguridad)
  • Ubicación de las claves de licencia y código de inicialización
  • Configuraciones y ajustes personalizados
  • Patrones de gestión de errores mediante enums ErrorCode

Inicio rápido de la migración

Paso 1: Actualizar paquetes NuGet

# Foxit PDF SDKtypically requires manual removal of DLL references
# Check your .csproj for Foxit references and remove them

# Install IronPDF
dotnet add package IronPdf
# Foxit PDF SDKtypically requires manual removal of DLL references
# Check your .csproj for Foxit references and remove them

# Install IronPDF
dotnet add package IronPdf
SHELL

Si tiene referencias Foxit PDF en .csproj, elimínelas manualmente:

<!-- Remove these manually -->
<Reference Include="fsdk_dotnet">
    <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath>
</Reference>
<!-- Remove these manually -->
<Reference Include="fsdk_dotnet">
    <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath>
</Reference>
XML

Paso 2: Actualizar los espacios de nombres

// Before (Foxit PDF)
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using foxit.pdf.annots;
using foxit.addon.conversion;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;
// Before (Foxit PDF)
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using foxit.pdf.annots;
using foxit.addon.conversion;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Paso 3: Inicializar IronPDF

Una de las mejoras más significativas en esta migración de Foxit PDF es la eliminación del complejo patrón de inicialización y limpieza:

// Before (Foxit PDF)
string sn = "YOUR_SERIAL_NUMBER";
string key = "YOUR_LICENSE_KEY";
ErrorCode error_code = Library.Initialize(sn, key);
if (error_code != ErrorCode.e_ErrSuccess)
{
    throw new Exception("Failed to initialize Foxit PDF SDK");
}
// ... your code ...
Library.Release();  // Don't forget this!

// After (IronPDF)
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// That's it! No Release() needed
// Before (Foxit PDF)
string sn = "YOUR_SERIAL_NUMBER";
string key = "YOUR_LICENSE_KEY";
ErrorCode error_code = Library.Initialize(sn, key);
if (error_code != ErrorCode.e_ErrSuccess)
{
    throw new Exception("Failed to initialize Foxit PDF SDK");
}
// ... your code ...
Library.Release();  // Don't forget this!

// After (IronPDF)
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// That's it! No Release() needed
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Paso 4: Patrón básico de conversión

// Before (Foxit PDF)
Library.Initialize(sn, key);
HTML2PDFSettingData settings = new HTML2PDFSettingData();
settings.page_width = 612.0f;
settings.page_height = 792.0f;
using (HTML2PDF html2pdf = new HTML2PDF(settings))
{
    html2pdf.Convert(htmlContent, "output.pdf");
}
Library.Release();

// After (IronPDF)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
// Before (Foxit PDF)
Library.Initialize(sn, key);
HTML2PDFSettingData settings = new HTML2PDFSettingData();
settings.page_width = 612.0f;
settings.page_height = 792.0f;
using (HTML2PDF html2pdf = new HTML2PDF(settings))
{
    html2pdf.Convert(htmlContent, "output.pdf");
}
Library.Release();

// After (IronPDF)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Referencia completa de la API

Mapeo de espacios de nombres

Espacio de nombres Foxit PDFEquivalente de IronPDFNotas
foxit<código>IronPDF</códigoEspacio de nombres principal
foxit.common<código>IronPDF</códigoTipos comunes
foxit.common.fxcrtN/ABajo nivel (no es necesario)
foxit.pdf<código>IronPDF</códigoOperaciones del documento PDF
foxit.pdf.annots<código>IronPdf.Editing</código>Anotaciones
foxit.addon.conversion<código>IronPdf.Rendering</códigoConversión de HTML/imágenes

Mapeo de clases principales

Clase PDF SDK de FoxitEquivalente de IronPDFNotas
BibliotecaN/AIronPDFautogestiona
<código>PDFDoc</códigoDocumento PDFClase de documento principal
Página PDF<código>PdfDocument.Pages[i]</código>Acceso a la página
<código>HTML2PDF</código<código>ChromePdfRenderer</códigoConversión de HTML
Página de texto<código>pdf.ExtractTextFromPage(i)</códigoExtracción de texto
WatermarkTextStamper / ImageStamperMarcas de agua
SeguridadConfiguración de seguridadSeguridad PDF
<código>Formulario</código<código>pdf.Form</códigoCampos de formulario
Metadatos<código>pdf.MetaData</códigoMetadatos del documento

Métodos PDFDoc

Foxit PDFDocIronPDFDocumentoPdfNotas
nuevo PDFDoc(ruta)<código>PdfDocument.FromFile(path)</códigoCargar desde archivo
<código>doc.LoadW(contraseña)</código<código>PdfDocument.FromFile(path, password)</códigoProtegido por contraseña
doc.GetPageCount()<código>pdf.PageCount</códigoPropiedad del recuento de páginas
<código>doc.GetPage(index)</códigopdf.Pages[index]Obtener página por índice
doc.SaveAs(ruta, banderas)<código>pdf.SaveAs(ruta)</códigoGuardar documento
doc.Close()pdf.Dispose() o sentencia usingLimpieza
doc.InsertDocument()PdfDocument.Merge()Fusionar documentos

HTML2PDF / Conversión

Foxit HTML2PDFEquivalente de IronPDFNotas
<código>new HTML2PDFSettingData()</código<código>new ChromePdfRenderer()</códigoCrear renderizador
<código>settings.page_width</código<código>RenderingOptions.PaperSize</códigoTamaños estándar
<código>settings.page_height</código<código>RenderingOptions.SetCustomPaperSize()</códigoTamaño personalizado
<código>html2pdf.Convert(html, ruta)</códigorenderer.RenderHtmlAsPdf(html)Cadena HTML
<código>html2pdf.ConvertFromURL(url, path)</código<código>renderer.RenderUrlAsPdf(url)</códigoConversión de URL

Configuración de marcas de agua

Marca de agua de FoxitEquivalente de IronPDFNotas
<código>new Marca de agua(doc, texto, fuente, tamaño, color)</códigonuevo TextStamper()Marca de agua de texto
<código>WatermarkSettings.position</códigoAlineaciónVertical + AlineaciónHorizontalPuesto
<código>WatermarkSettings.rotation</códigoRotaciónÁngulo de rotación
<código>WatermarkSettings.opacity</códigoOpacidadporcentaje 0-100
<código>watermark.InsertToAllPages()</código<código>pdf.ApplyStamp(stamper)</códigoAplicar a todos

Ejemplos de código

Ejemplo 1: Conversión de HTML a PDF

Antes (Foxit PDF SDK):

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf");
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.Convert("<html><body><h1>Hello World</h1></body></html>", "output.pdf");
        }

        Library.Release();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El enfoque deIronPDFreduce más de 15 líneas de código de configuración a sólo 4 líneas. Sin inicialización de bibliotecas, sin limpieza explícita, sin objetos de configuración complejos. Para obtener más opciones de conversión de HTML, consulte la documentación HTML a PDF.

Ejemplo 2: Conversión de URL a PDF

Antes (Foxit PDF SDK):

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.ConvertFromURL("https://www.example.com", "output.pdf");
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFConversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        using (HTML2PDF html2pdf = new HTML2PDF(settingData))
        {
            html2pdf.ConvertFromURL("https://www.example.com", "output.pdf");
        }

        Library.Release();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El motor Chromium integrado enIronPDFgestiona automáticamente la ejecución de JavaScript, el renderizado de CSS y el contenido dinámico. Más información sobre Conversión de URL a PDF.

Ejemplo 3: Añadir marcas de agua

Antes (Foxit PDF SDK):

// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFDoc;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        using (PDFDoc doc = new PDFDoc("input.pdf"))
        {
            doc.Load("");

            Watermark watermark = new Watermark(doc, "Confidential", 
                new Font(Font.StandardID.e_StdIDHelvetica), 48.0f, 0xFF0000FF);

            WatermarkSettings settings = new WatermarkSettings();
            settings.flags = Watermark.e_WatermarkFlagASPageContents;
            settings.position = Watermark.Position.e_PosCenter;
            settings.rotation = -45.0f;
            settings.opacity = 0.5f;

            watermark.SetSettings(settings);
            watermark.InsertToAllPages();

            doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
        }

        Library.Release();
    }
}
// NuGet: Install-Package Foxit.SDK
using Foxit.SDK;
using Foxit.SDK.Common;
using Foxit.SDK.PDFDoc;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        using (PDFDoc doc = new PDFDoc("input.pdf"))
        {
            doc.Load("");

            Watermark watermark = new Watermark(doc, "Confidential", 
                new Font(Font.StandardID.e_StdIDHelvetica), 48.0f, 0xFF0000FF);

            WatermarkSettings settings = new WatermarkSettings();
            settings.flags = Watermark.e_WatermarkFlagASPageContents;
            settings.position = Watermark.Position.e_PosCenter;
            settings.rotation = -45.0f;
            settings.opacity = 0.5f;

            watermark.SetSettings(settings);
            watermark.InsertToAllPages();

            doc.SaveAs("output.pdf", PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
        }

        Library.Release();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        pdf.ApplyWatermark(new TextStamper()
        {
            Text = "Confidential",
            FontSize = 48,
            Opacity = 50,
            Rotation = -45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        });
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        pdf.ApplyWatermark(new TextStamper()
        {
            Text = "Confidential",
            FontSize = 48,
            Opacity = 50,
            Rotation = -45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        });
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El TextStamper deIronPDFproporciona una configuración intuitiva basada en propiedades en lugar de objetos de configuración independientes y la iteración manual de páginas. Consulte la documentación completa de marcas de agua para obtener más opciones.

Ejemplo 4: URL a PDF con encabezados y pies de página

Antes (Foxit PDF SDK):

using foxit;
using foxit.addon.conversion;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            HTML2PDFSettingData settings = new HTML2PDFSettingData();
            settings.page_width = 595.0f;  // A4
            settings.page_height = 842.0f;
            settings.page_margin_top = 100.0f;
            settings.page_margin_bottom = 100.0f;

            // Foxit PDF SDKhas limited header/footer support
            // Often requires post-processing or additional code

            using (HTML2PDF html2pdf = new HTML2PDF(settings))
            {
                html2pdf.ConvertFromURL("https://www.example.com", "webpage.pdf");
            }
        }
        finally
        {
            Library.Release();
        }
    }
}
using foxit;
using foxit.addon.conversion;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            HTML2PDFSettingData settings = new HTML2PDFSettingData();
            settings.page_width = 595.0f;  // A4
            settings.page_height = 842.0f;
            settings.page_margin_top = 100.0f;
            settings.page_margin_bottom = 100.0f;

            // Foxit PDF SDKhas limited header/footer support
            // Often requires post-processing or additional code

            using (HTML2PDF html2pdf = new HTML2PDF(settings))
            {
                html2pdf.ConvertFromURL("https://www.example.com", "webpage.pdf");
            }
        }
        finally
        {
            Library.Release();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000);  // Wait for JS

        // Built-in header/footer support
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Company Report</div>",
            DrawDividerLine = true
        };

        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>",
            DrawDividerLine = true
        };

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000);  // Wait for JS

        // Built-in header/footer support
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Company Report</div>",
            DrawDividerLine = true
        };

        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>",
            DrawDividerLine = true
        };

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF ofrece soporte nativo para encabezados y pies de página con estilo HTML y marcadores de posición dinámicos para el número de página.

Ejemplo 5: Seguridad y cifrado de PDF

Antes (Foxit PDF SDK):

using foxit;
using foxit.pdf;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            using (PDFDoc doc = new PDFDoc("input.pdf"))
            {
                doc.LoadW("");

                StdSecurityHandler securityHandler = new StdSecurityHandler();
                securityHandler.Initialize(
                    StdSecurityHandler.EncryptAlgorithm.e_CipherAES,
                    "user_password",
                    "owner_password",
                    PDFDoc.Permission.e_PermPrint | PDFDoc.Permission.e_PermModify,
                    128);

                doc.SetSecurityHandler(securityHandler);
                doc.SaveAs("encrypted.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
            }
        }
        finally
        {
            Library.Release();
        }
    }
}
using foxit;
using foxit.pdf;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            using (PDFDoc doc = new PDFDoc("input.pdf"))
            {
                doc.LoadW("");

                StdSecurityHandler securityHandler = new StdSecurityHandler();
                securityHandler.Initialize(
                    StdSecurityHandler.EncryptAlgorithm.e_CipherAES,
                    "user_password",
                    "owner_password",
                    PDFDoc.Permission.e_PermPrint | PDFDoc.Permission.e_PermModify,
                    128);

                doc.SetSecurityHandler(securityHandler);
                doc.SaveAs("encrypted.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
            }
        }
        finally
        {
            Library.Release();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

using IronPdf;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        // Set passwords
        pdf.SecuritySettings.OwnerPassword = "owner_password";
        pdf.SecuritySettings.UserPassword = "user_password";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.EditAll;
        pdf.SecuritySettings.AllowUserCopyPasteContent = true;
        pdf.SecuritySettings.AllowUserAnnotations = true;

        pdf.SaveAs("encrypted.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        // Set passwords
        pdf.SecuritySettings.OwnerPassword = "owner_password";
        pdf.SecuritySettings.UserPassword = "user_password";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.EditAll;
        pdf.SecuritySettings.AllowUserCopyPasteContent = true;
        pdf.SecuritySettings.AllowUserAnnotations = true;

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

Consideraciones sobre el rendimiento

Reutilizar ChromePdfRenderer

Para obtener un rendimiento óptimo durante la migración a Foxit PDF, reutilice la instancia ChromePdfRenderer: es segura para subprocesos:

// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
    private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}

// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
    var renderer = new ChromePdfRenderer();  // Wasteful
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}
// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
    private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}

// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
    var renderer = new ChromePdfRenderer();  // Wasteful
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ayudante de conversión de unidades

Foxit PDF SDK utiliza puntos;IronPDFutiliza milímetros. Utilice esta ayuda durante la migración:

public static class UnitConverter
{
    public static double PointsToMm(double points) => points * 0.352778;
    public static double MmToPoints(double mm) => mm / 0.352778;
    public static double InchesToMm(double inches) => inches * 25.4;
}

// Usage: Convert Foxit's 72 points (1 inch) toIronPDFmillimeters
renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm
public static class UnitConverter
{
    public static double PointsToMm(double points) => points * 0.352778;
    public static double MmToPoints(double mm) => mm / 0.352778;
    public static double InchesToMm(double inches) => inches * 25.4;
}

// Usage: Convert Foxit's 72 points (1 inch) toIronPDFmillimeters
renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Disposición adecuada de recursos

// GOOD - Using statement for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically
// GOOD - Using statement for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Solución de problemas

Asunto 1: Library.Initialize() no se encuentra

Problema: Library.Initialize() no existe en IronPDF.

Solución:IronPDFutiliza un patrón de inicialización más sencillo:

// Foxit PDF
Library.Initialize(sn, key);

//IronPDF- just set license key once at startup
IronPdf.License.LicenseKey = "YOUR-KEY";
// Foxit PDF
Library.Initialize(sn, key);

//IronPDF- just set license key once at startup
IronPdf.License.LicenseKey = "YOUR-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Número 2: Tratamiento de códigos de error

Problema: El código comprueba ErrorCode.e_ErrSuccess peroIronPDFno tiene esto.

Solución: Utilizar el manejo de excepciones estándar de .NET:

// Foxit PDF
ErrorCode err = doc.LoadW("");
if (err != ErrorCode.e_ErrSuccess) { /* handle error */ }

// IronPDF
try
{
    var pdf = PdfDocument.FromFile("input.pdf");
}
catch (IOException ex)
{
    Console.WriteLine($"Failed to load PDF: {ex.Message}");
}
// Foxit PDF
ErrorCode err = doc.LoadW("");
if (err != ErrorCode.e_ErrSuccess) { /* handle error */ }

// IronPDF
try
{
    var pdf = PdfDocument.FromFile("input.pdf");
}
catch (IOException ex)
{
    Console.WriteLine($"Failed to load PDF: {ex.Message}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Asunto 3: PDFDoc.Close() no se encuentra

Problema: el método doc.Close()no existe en IronPDF.

Solución: Utiliza las sentencias Dispose() o using:

// Foxit PDF
doc.Close();

// IronPDF
pdf.Dispose();
// or better: wrap in using statement
// Foxit PDF
doc.Close();

// IronPDF
pdf.Dispose();
// or better: wrap in using statement
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Lista de comprobación de la migración

Pre-Migración

  • [ ] Inventario de todas las funciones de Foxit PDF SDKutilizadas
  • [ ] Ubicación de las claves de licencia de los documentos
  • [ ] Tenga en cuenta todas las llamadas a Library.Initialize() y Library.Release()
  • [ ] Enumerar ajustes personalizados (tamaños de página, márgenes, etc.)
  • [ ] Identificar patrones de gestión de errores mediante ErrorCode
  • [ ] Copia de seguridad del proyecto en el control de versiones
  • [ ] Obtener la clave de licencia de IronPDF

Migración de paquetes

  • [ ] Eliminar referencias a Foxit PDF SDKDLL de .csproj
  • [ ] Eliminar cualquier configuración privada de NuGet
  • [ ] Instalar el paquete NuGet IronPdf: dotnet add package IronPdf
  • [ ] Actualizar las importaciones de espacios de nombres
  • [ ] Establecer la clave de licencia deIronPDFal inicio

Migración de código

  • [ ] Eliminar las llamadas Library.Initialize() y Library.Release()
  • [ ] Sustituir ErrorCode por try/catch
  • [ ] Sustituir <código>PDFDoc</códigopor PdfDocument
  • [Reemplace <código>HTML2PDF</códigopor ChromePdfRenderer
  • [Actualizar el acceso a páginas de GetPage(i) a Pages[i]
  • [Reemplace SaveAs(path, flags) por SaveAs(path)
  • [ ] Sustituir Close() por Dispose() o usar sentencias
  • [Actualizar el código de la marca de agua para utilizar TextStamper
  • [ ] Convertir unidades de puntos a milímetros

Pruebas

  • [ ] Comprobar que el resultado de HTML a PDF se ajusta a las expectativas
  • [ ] Prueba de carga de PDF y extracción de texto
  • [ ] Verificar la funcionalidad de la fusión
  • [ ] Comprobar el aspecto de la marca de agua
  • [ ] Probar las funciones de seguridad/cifrado
  • [Validar operaciones de campos de formulario
  • [Pruebas de rendimiento

Posmigración

  • [ ] Eliminar DLL de Foxit PDF SDK
  • [ ] Eliminar archivos de configuración relacionados con Foxit
  • [ ] Actualización de la documentación
  • [ ] Limpiar el código de ayuda no utilizado

Conclusión

La migración de Foxit PDF SDKaIronPDFelimina patrones de inicialización complejos, objetos de configuración prolijos y limpieza manual de recursos. El resultado es un código más limpio y fácil de mantener que aprovecha los modernos patrones de .NET y las funciones integradas de representación HTML/CSS.

La API simplificada deIronPDFreduce el tiempo de desarrollo al tiempo que proporciona una funcionalidad PDF completa, todo ello accesible a través de un único paquete NuGet sin necesidad de adquirir complementos por separado. Para los equipos que planifican migraciones a .NET 10 y posteriores,IronPDFofrece una base a prueba de futuro para la generación de PDF.

Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración a Foxit 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