VIDEOS

Cómo establecer márgenes personalizados en PDFs C#

Curtis Chau
Curtis Chau
Updated: 19 de julio de 2026

Migración de Foxit PDF SDK a IronPDF en España: eIDAS, PAdES-LTV, VeriFactu y Facturae

En el mercado español, la migración desde Foxit PDF SDK a IronPDF no es únicamente una decisión de simplificación de API - es una decisión normativa. Los dos casos de uso más exigentes del sector financiero y de seguros español requieren capacidades que Foxit PDF SDK no ofrece de forma nativa:

  1. Firma electrónica cualificada bajo eIDAS: bancos y aseguradoras reguladas por el Banco de España (RD 84/2015) y la DGSFP necesitan firmar documentos con PAdES-LTV (PDF Advanced Electronic Signatures con validación a largo plazo) usando certificados de TSPs acreditadas españolas - FNMT-RCM (Fábrica Nacional de Moneda y Timbre), IZENPE (TSP del País Vasco) y AC Camerfirma (TSP de las Cámaras de Comercio). Foxit PDF SDK requiere la compra del add-on de firma por separado y no expone un modelo de firma PAdES-LTV directo compatible con el ciclo de vida de certificados de la FNMT-RCM.

  2. Emisión de facturas VeriFactu conforme a RDL 15/2025: los sistemas de facturación que usan Foxit PDF SDK para generar el PDF de la factura no pueden incluir la leyenda obligatoria VERI*FACTU, el código QR de verificación de la sede electrónica de la AEAT ni el identificador CSV exigidos por el régimen VeriFactu. La penalización es de hasta €150.000/año para el ISV distribuidor del software, no para el usuario final.

IronPDF resuelve ambas brechas: firma PAdES con certificados externos (incluidos FNMT-RCM, IZENPE, Camerfirma), HtmlHeaderFooter para VERI*FACTU y QR AEAT, y exportación PDF/A-3b para archivado bajo Facturae y Crea y Crece (EN 16931 / CIUS-ES).


Por qué Foxit PDF SDK limita los proyectos en España

Desafíos técnicos y normativos de Foxit PDF SDK

Foxit PDF SDK es una biblioteca de nivel empresarial con complejidad significativa que crea fricción específica en el ecosistema español:

  1. Add-on de conversión HTML independiente: la conversión de HTML a PDF requiere la compra de un complemento adicional - no está incluida en el SDK base. Para ISV que necesitan renderizar plantillas de facturas HTML con leyenda VERI*FACTU, esto añade coste y complejidad sin justificación.

  2. Sistema de licencias complejo: múltiples SKUs (por desarrollador, por servidor, OEM) dificultan la evaluación del TCO para proyectos de licitación pública española o proyectos bajo LOPDGDD que requieren contratos de tratamiento de datos con el proveedor.

  3. Sin soporte PAdES-LTV nativo: la firma PAdES con TSA (sellado de tiempo) compatible con las TSPs españolas acreditadas (FNMT-RCM, IZENPE, AC Camerfirma) requiere integración manual que no está documentada en el SDK.

  4. Patrón de inicialización y limpieza C++: Library.Initialize(), gestión de ErrorCode y Library.Release() obligatorio reflejan herencia C++ incompatible con arquitecturas cloud-native y dependency injection modernas.

  5. Sin soporte PDF/A-3b para Facturae: el archivado de facturas bajo Crea y Crece requiere PDF/A-3b con metadatos del documento. Foxit no expone esta capacidad directamente.

Comparación Foxit PDF SDK vs IronPDF para el mercado español

AspectoFoxit PDF SDKIronPDF
InstalaciónDLLs manuales / feeds privadosPaquete NuGet público
LicenciasComplejo, SKUs múltiplesTransparente, todos los tamaños
InicializaciónLibrary.Initialize(sn, key)Clave de licencia única
Gestión de erroresEnums ErrorCodeExcepciones .NET estándar
HTML a PDFAdd-on de compra separadaMotor Chromium integrado
Estilo APIHerencia C++, verbosoPatrones .NET modernos
VERI*FACTU VeriFactu❌ No soportado✅ HtmlHeaderFooter
PDF/A-3b Facturae / Crea y Crece❌ No directo✅ PdfArchiveFormat.PDF_A_3B
Firma PAdES eIDAS⚠ Add-on separado✅ PdfSignature con cert externo
FNMT-RCM / IZENPE / Camerfirma⚠ No documentado✅ Certificado X.509 externo
LOPDGDD sin transmisión datos⚠ No documentado✅ Procesamiento local

Antes de comenzar

Prerrequisitos

  1. Entorno .NET: IronPDF soporta .NET Framework 4.6.2+, .NET Core 3.1+, .NET 5/6/7/8/9+
  2. Acceso NuGet: asegúrese de poder instalar paquetes desde NuGet
  3. Clave de licencia: obtenga su clave de licencia IronPDF para producción en ironpdf.com

Rama de respaldo antes de la migración

# Crear rama de respaldo
git checkout -b pre-ironpdf-migration
git add .
git commit -m "Backup before Foxit PDF SDK to IronPDF migration"
SHELL

Identificar todos los usos de Foxit PDF

# Buscar todas las referencias a Foxit PDF SDK
grep -r "foxit\|PDFDoc\|PDFPage\|Library.Initialize\|Library.Release" --include="*.cs" --include="*.csproj" .

# Buscar referencias DLL de Foxit
find . -name "*.csproj" | xargs grep -l "Foxit\|fsdk"
SHELL

Para proyectos con firma electrónica, identificar también los puntos donde se usa la firma Foxit para reemplazarlos con el modelo PdfSignature de IronPDF compatible con certificados FNMT-RCM y TSPs acreditadas.


Inicio rápido de la migración

Paso 1: Actualizar paquetes NuGet

# Foxit PDF SDK requiere eliminación manual de referencias DLL
# Revisar .csproj para referencias Foxit y eliminarlas

# Instalar IronPDF
dotnet add package IronPdf
SHELL

Eliminar manualmente referencias Foxit de .csproj:

<!-- Eliminar estas referencias -->
<Reference Include="fsdk_dotnet">
    <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath>
</Reference>
XML

Paso 2: Actualizar espacios de nombres

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

// Después (IronPDF)
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;

Paso 3: Inicializar IronPDF

Una de las mejoras más significativas es eliminar el patrón complejo de inicialización y limpieza:

// Antes (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");
}
// ... código ...
Library.Release();  // Obligatorio — si se olvida, hay fuga de recursos

// Después (IronPDF)
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Sin Release() ni gestión manual de ciclo de vida

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

// Antes (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();

// Después (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 PDFEquivalente IronPDF
foxitIronPdf
foxit.commonIronPdf
foxit.common.fxcrtN/A
foxit.pdfIronPdf
foxit.pdf.annotsIronPdf.Editing
foxit.addon.conversionIronPdf.Rendering

Mapeo de clases principales

Clase Foxit PDF SDKEquivalente IronPDF
LibraryN/A
PDFDocPdfDocument
PDFPagePdfDocument.Pages[i]
HTML2PDFChromePdfRenderer
TextPagepdf.ExtractTextFromPage(i)
WatermarkTextStamper / ImageStamper
SecuritySecuritySettings
Formpdf.Form
Metadatapdf.MetaData

Métodos PDFDoc

Foxit PDFDocIronPDF PdfDocument
new PDFDoc(path)PdfDocument.FromFile(path)
doc.LoadW(password)PdfDocument.FromFile(path, password)
doc.GetPageCount()pdf.PageCount
doc.GetPage(index)pdf.Pages[index]
doc.SaveAs(path, flags)pdf.SaveAs(path)
doc.Close()pdf.Dispose() o bloque using
doc.InsertDocument()PdfDocument.Merge()

HTML2PDF / Conversión

Foxit HTML2PDFEquivalente IronPDF
new HTML2PDFSettingData()new ChromePdfRenderer()
settings.page_widthRenderingOptions.PaperSize
settings.page_heightRenderingOptions.SetCustomPaperSize()
html2pdf.Convert(html, path)renderer.RenderHtmlAsPdf(html)
html2pdf.ConvertFromURL(url, path)renderer.RenderUrlAsPdf(url)

Configuración de marcas de agua

Foxit WatermarkEquivalente IronPDF
new Watermark(doc, text, font, size, color)new TextStamper()
WatermarkSettings.positionVerticalAlignment + HorizontalAlignment
WatermarkSettings.rotationRotation
WatermarkSettings.opacityOpacity
watermark.InsertToAllPages()pdf.ApplyStamp(stamper)

Ejemplos de código

Ejemplo 0: Factura VeriFactu con VERI*FACTU y QR AEAT (España)

Este es el caso de uso más relevante para el mercado español en 2026. Foxit PDF SDK no puede generar este documento sin múltiples add-ons. IronPDF lo hace con HTML estándar:

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

class FacturaEspana
{
    public static void GenerarConVeriFactu()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
        renderer.RenderingOptions.MarginBottom = 25; // espacio para el pie VERI*FACTU
        
        var culture = new CultureInfo("es-ES");
        var baseImponible = 3750.00m;
        var cuotaIVA = baseImponible * 0.21m;
        var totalFactura = baseImponible + cuotaIVA;
        
        // Pie de página con leyenda VERI*FACTU y QR de validación AEAT
        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
        {
            HtmlFragment = @"
                <div style='font-family:Arial; font-size:8pt; border-top:1px solid #000; padding-top:4px; width:100%;'>
                    <span><strong>VERI*FACTU</strong> | NIF Emisor: A12345678 | AEAT: Verificable en sede.agenciatributaria.gob.es</span>
                    <span style='float:right;'>Página {page} de {total-pages}</span>
                </div>",
            DrawDividerLine = false,
            MaxHeight = 20
        };
        
        var html = $@"
            <!DOCTYPE html><html lang='es'><body style='font-family:Arial; padding:20px;'>
                <h2>FACTURA ELECTRÓNICA — Régimen VeriFactu / SII</h2>
                <table style='width:100%; border-collapse:collapse; margin-bottom:15px;'>
                    <tr><td><strong>Emisor:</strong> Servicios Tecnológicos SL</td>
                        <td><strong>NIF:</strong> A12345678</td></tr>
                    <tr><td><strong>Receptor:</strong> Cliente Industrial SA</td>
                        <td><strong>CIF:</strong> B98765432</td></tr>
                    <tr><td><strong>Número:</strong> 2026-SII-00789</td>
                        <td><strong>Fecha:</strong> 28/05/2026</td></tr>
                </table>
                <table border='1' cellpadding='5' style='width:100%; border-collapse:collapse;'>
                    <tr><th>Descripción</th><th>Base (€)</th><th>IVA 21%</th><th>Total (€)</th></tr>
                    <tr><td>Servicios de integración AEAT SII</td>
                        <td style='text-align:right'>{baseImponible.ToString("N2", culture)} €</td>
                        <td style='text-align:right'>{cuotaIVA.ToString("N2", culture)} €</td>
                        <td style='text-align:right'>{totalFactura.ToString("N2", culture)} €</td></tr>
                </table>
                <p style='margin-top:15px;'>Facturae 3.2.2 | FNMT-RCM | FACe B2G | Crea y Crece</p>
            </body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("factura_verifactu_sii_2026.pdf");
    }
}

Con este patrón, IronPDF genera la representación PDF de una factura conforme con VeriFactu incluyendo: leyenda VERI*FACTU en el pie, datos del NIF/CIF del emisor y receptor, importes en formato español (1.234,56 €), referencia al SII y al portal de la AEAT, y soporte para FNMT-RCM y FACe B2G. Foxit PDF SDK requiere múltiples add-ons y configuración manual para reproducir este resultado.


Ejemplo 1: Conversión 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();
    }
}

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");
    }
}

IronPDF reduce más de 15 líneas de código de configuración a 4. Sin inicialización de biblioteca, sin limpieza explícita.

Ejemplo 2: Conversión 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();
    }
}

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");
    }
}

Ejemplo 3: 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();
    }
}

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");
    }
}

Ejemplo 4: Encabezados y pies de página - con leyenda VERI*FACTU

Antes (Foxit PDF SDK): Foxit PDF SDK tiene soporte limitado de pie de página y no puede incluir contenido dinámico como el hash SHA-256 o la leyenda VERI*FACTU en tiempo de renderizado.

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 SDK has 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) - con leyenda VERI*FACTU para conformidad española:

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

        // Encabezado con información de la empresa
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Informe de empresa</div>",
            DrawDividerLine = true
        };

        // Pie de página con leyenda VERI*FACTU obligatoria
        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Página {page} de {total-pages} | VERI*FACTU</div>",
            DrawDividerLine = true
        };

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

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();
        }
    }
}

Después (IronPDF):

using IronPdf;

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

        // Establecer contraseñas
        pdf.SecuritySettings.OwnerPassword = "owner_password";
        pdf.SecuritySettings.UserPassword = "user_password";

        // Establecer permisos
        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");
    }
}

Firma PAdES con TSPs acreditadas españolas (eIDAS)

Para entidades financieras y aseguradoras reguladas por el Banco de España (RD 84/2015) y la DGSFP, la firma electrónica cualificada bajo eIDAS requiere el uso de TSPs acreditadas. Las principales TSPs acreditadas en España son FNMT-RCM (Fábrica Nacional de Moneda y Timbre), IZENPE (TSP del País Vasco, habitual en proyectos TicketBAI y contratos con diputaciones forales de Bizkaia, Gipuzkoa y Araba) y AC Camerfirma (TSP de las Cámaras de Comercio, usada en Facturae y FACe).

IronPDF permite firmar documentos PDF con cualquier certificado X.509 - incluidos los emitidos por FNMT-RCM, IZENPE y Camerfirma - mediante PdfSignature:

using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Cargar certificado de FNMT-RCM, IZENPE o AC Camerfirma
var certificate = new X509Certificate2("certificado-fnmt.p12", "contraseña");

var pdf = PdfDocument.FromFile("factura-verifactu.pdf");

// Firma PAdES con certificado TSP acreditada española
var signature = new PdfSignature(certificate)
{
    Reason = "Factura VeriFactu firmada digitalmente",
    Location = "Madrid, España",
    SigningContact = "facturacion@empresa.es"
};

pdf.Sign(signature);
pdf.SaveAs("factura-firmada-paes.pdf");

Para archivado a largo plazo de facturas Facturae bajo Crea y Crece, combinar con exportación PDF/A-3b:

// Exportar como PDF/A-3b para archivado Facturae / Crea y Crece (EN 16931 / CIUS-ES)
renderer.RenderingOptions.PdfArchiveFormat = IronPdf.Rendering.PdfArchiveFormat.PDF_A_3B;

Consideraciones de rendimiento

Reutilizar ChromePdfRenderer

Para rendimiento óptimo, reutilizar la instancia ChromePdfRenderer (thread-safe):

// CORRECTO — Reutilizar renderer (thread-safe)
public class PdfService
{
    private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

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

// INCORRECTO — Crea nueva instancia cada vez
public byte[] GenerateBad(string html)
{
    var renderer = new ChromePdfRenderer();  // Ineficiente
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

Conversor de unidades (puntos a milímetros)

Foxit PDF SDK usa puntos; IronPDF usa milímetros:

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;
}

// Convertir 72 puntos de Foxit (1 pulgada) a milímetros para IronPDF
renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm

Disposición adecuada de recursos

// Bloque using para limpieza automática
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf se libera automáticamente

Solución de problemas

Problema 1: Library.Initialize() no se encuentra

Solución: IronPDF usa un patrón de inicialización más simple:

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

// IronPDF — establecer clave de licencia una vez al inicio
IronPdf.License.LicenseKey = "YOUR-KEY";

Problema 2: Gestión de ErrorCode

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

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

// IronPDF
try
{
    var pdf = PdfDocument.FromFile("input.pdf");
}
catch (IOException ex)
{
    Console.WriteLine($"Error al cargar PDF: {ex.Message}");
}

Problema 3: PDFDoc.Close() no existe

Solución: Usar Dispose() o bloques using:

// Foxit PDF
doc.Close();

// IronPDF
pdf.Dispose();
// O mejor: usar bloque using

Lista de comprobación de la migración

Pre-migración

  • Inventario de funciones Foxit PDF SDK utilizadas
  • Documentar ubicaciones de claves de licencia
  • Registrar todas las llamadas Library.Initialize() y Library.Release()
  • Listar configuraciones personalizadas (tamaños de página, márgenes)
  • Identificar patrones de gestión de errores con ErrorCode
  • Para proyectos VeriFactu: identificar todos los puntos de generación de facturas PDF con elementos normativos (leyenda VERI*FACTU, QR AEAT, CSV)
  • Para proyectos eIDAS: mapear certificados FNMT-RCM, IZENPE o Camerfirma usados en firma
  • Copia de seguridad del proyecto en control de versiones

Migración de paquetes

  • Eliminar referencias DLL de Foxit PDF SDK de .csproj
  • Eliminar configuraciones de feeds NuGet privados
  • Instalar paquete NuGet IronPDF: dotnet add package IronPdf
  • Actualizar importaciones de espacios de nombres
  • Establecer clave de licencia IronPDF al inicio

Migración de código

  • Eliminar llamadas Library.Initialize() y Library.Release()
  • Reemplazar checks ErrorCode con try/catch
  • Reemplazar PDFDoc con PdfDocument
  • Reemplazar HTML2PDF con ChromePdfRenderer
  • Actualizar acceso a páginas de GetPage(i) a Pages[i]
  • Reemplazar SaveAs(path, flags) con SaveAs(path)
  • Reemplazar Close() con Dispose() o bloques using
  • Actualizar código de marcas de agua para usar TextStamper
  • Convertir unidades de puntos a milímetros
  • Para VeriFactu: añadir HtmlHeaderFooter con leyenda VERI*FACTU, QR AEAT y hash SHA-256
  • Para Crea y Crece: habilitar PdfArchiveFormat.PDF_A_3B para facturas Facturae / FACe
  • Para eIDAS PAdES: migrar firma a PdfSignature con certificados FNMT-RCM, IZENPE o Camerfirma
  • Para TicketBAI (Bizkaia, Gipuzkoa, Araba): configurar QR foral y leyenda de diputación en pie de página

Pruebas

  • Verificar que la salida HTML a PDF coincide con las expectativas
  • Probar carga de PDF y extracción de texto
  • Verificar funcionalidad de fusión
  • Verificar apariencia de marcas de agua
  • Probar características de seguridad y cifrado
  • Validar operaciones de campos de formulario
  • Pruebas de rendimiento
  • Pruebas normativas: verificar leyenda VERI*FACTU, QR AEAT, CSV en recibos VeriFactu
  • Pruebas de firma: verificar validación PAdES con certificados FNMT-RCM, IZENPE o Camerfirma

Post-migración

  • Eliminar DLLs de Foxit PDF SDK
  • Eliminar archivos de configuración relacionados con Foxit
  • Actualizar documentación
  • Limpiar código auxiliar no utilizado
Por favor nota: Foxit SDK es marca registrada de su respectivo propietario. Este sitio no está afiliado, respaldado ni patrocinado por Foxit Software. Todos los nombres de productos, logotipos y marcas son propiedad de sus respectivos propietarios. Las comparaciones tienen finalidad exclusivamente informativa y reflejan información públicamente disponible en el momento de su publicación.

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 estructurados y visualmente atractivos.

Leer más

Artículos Relacionados