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

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

La migración de Foxit PDF SDKaIronPDFsimplifica su flujo de trabajo de generación de PDF .NET al reemplazar API complejas enfocadas en la empresa con patrones modernos y fáciles de usar para desarrolladores. Esta guía proporciona una ruta de migración completa, paso a paso, que elimina el código innecesario y facilita 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: múltiples productos, SKU y tipos de licencia (por desarrollador, por servidor, OEM, etc.) dificultan la elección de la opción correcta para su proyecto.

  2. Precios empresariales: los precios están diseñados para organizaciones grandes y pueden resultar prohibitivos para equipos más pequeños o desarrolladores individuales.

  3. Instalación manual: Foxit PDF SDKrequiere referencias DLL manuales o feeds NuGet privados (no hay ningún paquete NuGet público simple disponible).

  4. API detallada: la inicialización de la biblioteca con Library.Initialize() , la verificación del código de error y las llamadas explícitas Library.Release() agregan un código repetitivo sustancial a cada operación.

  5. Complemento de conversión HTML independiente: la conversión de HTML a PDF requiere la compra de un complemento adicional; no está incluido en el SDK base.

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

  7. Herencia de C++: los patrones de API reflejan los orígenes de C++ y resultan menos naturales en las aplicaciones C# modernas.

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

Pasar de Foxit PDF aIronPDFofrece beneficios de desarrollo tangibles: menor complejidad mediante API más simples, desarrollo más rápido con métodos intuitivos, compatibilidad moderna con .NET que incluye soporte para async/await y LINQ, un enfoque HTML primero que utiliza habilidades web existentes y funciones todo incluido sin compras de 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 poder instalar paquetes desde NuGet
  3. Clave de licencia: Obtenga su clave de licencia deIronPDFpara 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;
$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
$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");
$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();
    }
}
$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");
    }
}
$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();
    }
}
$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");
    }
}
$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();
    }
}
$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");
    }
}
$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();
        }
    }
}
$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");
    }
}
$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();
        }
    }
}
$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");
    }
}
$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;
}
$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
$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
$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 simple:

// 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";
$vbLabelText   $csharpLabel

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

Problema: el código verifica ErrorCode.e_ErrSuccess peroIronPDFno lo tiene.

Solución: utilice 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}");
}
$vbLabelText   $csharpLabel

Asunto 3: PDFDoc.Close() no se encuentra

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

Solución: utilice Dispose() o declaraciones 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
$vbLabelText   $csharpLabel

Lista de comprobación de la migración

Pre-Migración

  • Inventario de todas las funciones del Foxit PDF SDKutilizadas
  • Documentar la ubicación de las claves de licencia
  • Tenga en cuenta todas las llamadas Library.Initialize() y Library.Release()
  • Lista de configuraciones personalizadas (tamaños de página, márgenes, etc.)
  • Identificar patrones de manejo de errores utilizando ErrorCode
  • Realizar una copia de seguridad del proyecto en el control de versiones
  • Obtener la clave de licencia de IronPDF

Migración de paquetes

  • Eliminar las referencias DLL del SDK de Foxit PDF de .csproj
  • Eliminar cualquier configuración de fuente NuGet privada
  • 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()
  • Reemplazar las comprobaciones ErrorCode con try/catch
  • Reemplazar <código>PDFDoc</códigocon PdfDocument
  • Reemplace <código>HTML2PDF</códigocon ChromePdfRenderer
  • Actualizar el acceso a la página de GetPage(i) a Pages[i]
  • Reemplace SaveAs(path, flags) con SaveAs(path)
  • Reemplace Close() con Dispose() o usando declaraciones
  • Actualizar el código de marca de agua para usar TextStamper
  • Convertir unidades de puntos a milímetros

Pruebas

  • Verificar que la salida HTML a PDF coincida con las expectativas
  • Prueba de carga de PDF y extracción de texto
  • Verificar la funcionalidad de fusión
  • Verificar la apariencia de la marca de agua
  • Probar funciones de seguridad/cifrado
  • Validar operaciones de campos de formulario
  • Pruebas de rendimiento

Posmigración

  • Eliminar las DLL del SDK de Foxit PDF
  • Eliminar archivos de configuración relacionados con Foxit
  • Actualización de la documentación
  • Limpiar el código auxiliar no utilizado

migración.

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