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:
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.
Precios empresariales: los precios están diseñados para organizaciones grandes y pueden resultar prohibitivos para equipos más pequeños o desarrolladores individuales.
Instalación manual: Foxit PDF SDKrequiere referencias DLL manuales o feeds NuGet privados (no hay ningún paquete NuGet público simple disponible).
API detallada: la inicialización de la biblioteca con
Library.Initialize(), la verificación del código de error y las llamadas explícitasLibrary.Release()agregan un código repetitivo sustancial a cada operación.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.
Configuración compleja: las configuraciones requieren una configuración de objeto detallada (por ejemplo,
HTML2PDFSettingData) con múltiples propiedades.- 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
| Aspecto | Foxit PDF SDK | IronPDF |
|---|---|---|
| Instalación | DLLs/private feeds manuales | Paquete NuGet simple |
| Licencias | Complejo, centrado en la empresa | Transparente, apto para todos los tamaños |
| Inicialización | <código>Library.Initialize(sn, key)</código | Establezca la clave de licencia una vez |
| Tratamiento de errores | Enumeraciones ErrorCode | Excepciones de .NET Standard |
| HTML a PDF | Compra adicional por separado | Motor Chromium integrado |
| Estilo API | Herencia de C++, verborrea | Patrones modernos de .NET |
| Limpieza de recursos | Manual Close()/Release() | Desechable/automático |
| Documentación | Portal de documentación empresarial | Tutoriales 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
- Entorno .NET:IronPDFes compatible con .NET Framework 4.6.2+, .NET Core 3.1+, .NET 5/6/7/8/9+
- Acceso a NuGet: asegúrese de poder instalar paquetes desde NuGet
- 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"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"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 IronPdfSi 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>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;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() neededPaso 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");Referencia completa de la API
Mapeo de espacios de nombres
| Espacio de nombres Foxit PDF | Equivalente de IronPDF | Notas |
|---|---|---|
foxit | <código>IronPDF</código | Espacio de nombres principal |
foxit.common | <código>IronPDF</código | Tipos comunes |
foxit.common.fxcrt | N/A | Bajo nivel (no es necesario) |
foxit.pdf | <código>IronPDF</código | Operaciones del documento PDF |
foxit.pdf.annots | <código>IronPdf.Editing</código> | Anotaciones |
foxit.addon.conversion | <código>IronPdf.Rendering</código | Conversión de HTML/imágenes |
Mapeo de clases principales
| Clase PDF SDK de Foxit | Equivalente de IronPDF | Notas |
|---|---|---|
Biblioteca | N/A | IronPDFautogestiona |
| <código>PDFDoc</código | Documento PDF | Clase 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ódigo | Conversión de HTML |
Página de texto | <código>pdf.ExtractTextFromPage(i)</código | Extracción de texto |
Watermark | TextStamper / ImageStamper | Marcas de agua |
Seguridad | Configuración de seguridad | Seguridad PDF |
| <código>Formulario</código | <código>pdf.Form</código | Campos de formulario |
Metadatos | <código>pdf.MetaData</código | Metadatos del documento |
Métodos PDFDoc
| Foxit PDFDoc | IronPDFDocumentoPdf | Notas |
|---|---|---|
nuevo PDFDoc(ruta) | <código>PdfDocument.FromFile(path)</código | Cargar desde archivo |
| <código>doc.LoadW(contraseña)</código | <código>PdfDocument.FromFile(path, password)</código | Protegido por contraseña |
doc.GetPageCount() | <código>pdf.PageCount</código | Propiedad del recuento de páginas |
| <código>doc.GetPage(index)</código | pdf.Pages[index] | Obtener página por índice |
doc.SaveAs(ruta, banderas) | <código>pdf.SaveAs(ruta)</código | Guardar documento |
doc.Close() | pdf.Dispose() o sentencia using | Limpieza |
doc.InsertDocument() | PdfDocument.Merge() | Fusionar documentos |
HTML2PDF / Conversión
| Foxit HTML2PDF | Equivalente de IronPDF | Notas |
|---|---|---|
| <código>new HTML2PDFSettingData()</código | <código>new ChromePdfRenderer()</código | Crear renderizador |
| <código>settings.page_width</código | <código>RenderingOptions.PaperSize</código | Tamaños estándar |
| <código>settings.page_height</código | <código>RenderingOptions.SetCustomPaperSize()</código | Tamaño personalizado |
| <código>html2pdf.Convert(html, ruta)</código | renderer.RenderHtmlAsPdf(html) | Cadena HTML |
| <código>html2pdf.ConvertFromURL(url, path)</código | <código>renderer.RenderUrlAsPdf(url)</código | Conversión de URL |
Configuración de marcas de agua
| Marca de agua de Foxit | Equivalente de IronPDF | Notas |
|---|---|---|
| <código>new Marca de agua(doc, texto, fuente, tamaño, color)</código | nuevo TextStamper() | Marca de agua de texto |
| <código>WatermarkSettings.position</código | AlineaciónVertical + AlineaciónHorizontal | Puesto |
| <código>WatermarkSettings.rotation</código | Rotación | Ángulo de rotación |
| <código>WatermarkSettings.opacity</código | Opacidad | porcentaje 0-100 |
| <código>watermark.InsertToAllPages()</código | <código>pdf.ApplyStamp(stamper)</código | Aplicar 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();
}
}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");
}
}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();
}
}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");
}
}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();
}
}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");
}
}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();
}
}
}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");
}
}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();
}
}
}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");
}
}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;
}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.4mmpublic 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.4mmDisposició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 automaticallySolució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";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}");
}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 statementLista 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()yLibrary.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()yLibrary.Release() - Reemplazar las comprobaciones
ErrorCodecon 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)aPages[i] - Reemplace
SaveAs(path, flags)conSaveAs(path) - Reemplace
Close()conDispose()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.






