IRONSOFTWAREHOME
VIDEOS

Cómo usar logging personalizado en C#

Curtis Chau
Curtis Chau
Updated: 19 de julio de 2026

Migrar de fo .NET (FO .NET) a IronPDF es una actualización importante para su proceso de generación de PDF .NET . Esta guía ofrece una ruta sencilla, paso a paso, para realizar la transición de su código base desde el obsoleto marcado XSL-FO a la generación moderna de PDF basada en HTML/CSS, utilizando las habilidades que su equipo de desarrollo ya tiene.

Para equipos en España, la migración desde fo.NET adquiere una urgencia adicional por razones regulatorias. El Real Decreto-Ley 15/2025 (VeriFactu) exige que el software de facturación genere PDF con la leyenda VERI*FACTU e incluya la cadena de huella encadenada para que las facturas sean verificables en la sede electrónica de la AEAT. fo.NET, al basarse en el marcado XSL-FO, no tiene capacidad de firma digital ni de generación de metadatos estructurados requeridos por VeriFactu. Las penalizaciones por incumplimiento pueden alcanzar los 150.000 € anuales. TicketBAI —obligatorio en Bizkaia, Gipuzkoa y Araba— requiere además firma XAdES y adjuntos PDF firmados con PAdES conforme a eIDAS. La Ley Crea y Crece impone la generación de Facturae XML incrustado en PDF/A-3 para la factura electrónica B2B a través de FACe. IronPDF cubre todos estos requisitos de forma nativa, además de garantizar el procesamiento on-premise que facilita el cumplimiento con la LOPDGDD y la supervisión de la AEPD.

Por qué migrar de fo.net a IronPDF

Los retos de fo.net

fo .NET es un renderizador de XSL-FO a PDF con varias limitaciones para el desarrollo actual:

  1. Tecnología obsoleta: XSL-FO (Extensible Stylesheet Language Formatting Objects) es una especificación del W3C de 2001, sin actualizaciones desde 2006, y se considera en gran medida obsoleta.

  2. Curva de aprendizaje compleja: XSL-FO requiere aprender un marcado complejo basado en XML con objetos de formato especializados (fo:block, fo:table, fo:page-sequence, etc.).

  3. No hay compatibilidad con HTML/CSS: fo .NET no puede representar HTML ni CSS; requiere una conversión manual de HTML a marcado XSL-FO.

  4. Sin mantenimiento: el repositorio original de CodePlex está descontinuado; Las bifurcaciones de GitHub ya no se mantienen de forma activa.

  5. Solo para Windows: fo .NET tiene dependencias internas en System.Drawing que le impiden funcionar en Linux/macOS.

  6. Funciones modernas limitadas: no hay compatibilidad con JavaScript, CSS3, flexbox/grid ni fuentes web modernas.

  7. Sin representación de URL: fo .NET no puede representar páginas web directamente; requiere conversión manual de HTML a XSL-FO.

Comparación entre fo.net e IronPDF

Aspectofo.net (FO.NET)IronPDF
Formato de entradaXSL-FO (XML obsoleto)HTML/CSS (estándares web modernos)
Curva de aprendizajeSteep (conocimientos de XSL-FO)Suave (conocimientos de HTML/CSS)
MantenimientoSin mantenimientoMantenimiento activo mensual
Soporte de plataformasSólo para WindowsVerdadera multiplataforma (.NET 6/7/8/9/10+)
Soporte CSSNingunoCSS3 completo (Flexbox, Grid)
JavaScriptNingunoCompatibilidad total con JavaScript
Representación de URLNo soportadoIncorporado en
Características modernasLimitadoEncabezados, pies de página, marcas de agua, seguridad
DocumentaciónDesactualizadoTutoriales completos

Por qué tiene sentido el cambio

fo.net se diseñó cuando se esperaba que XSL-FO se convirtiera en un estándar para el formato de documentos. Esa expectativa nunca se materializó. HTML/CSS se ha convertido en el formato de documento universal: más del 98% de los desarrolladores conocen HTML/CSS, frente a menos del 1% que conocen XSL-FO. La mayoría de los recursos XSL-FO datan de 2005-2010, lo que dificulta cada vez más su mantenimiento.

IronPDF le permite utilizar los conocimientos que ya posee para crear PDF profesionales, con compatibilidad total con las versiones modernas de .NET, incluidas .NET 10 y C# 14, a medida que estén disponibles hasta 2025 y 2026.


Antes de empezar

Prerrequisitos

  1. **Entorno .NET :**IronPDF es 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 de IronPDF para uso en producción en IronPDF

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 fo.net to IronPDF migration"
SHELL

Identificar todo el uso de fo.net

# Find all fo.net references
grep -r "FonetDriver\|Fonet\|\.fo\"\|xsl-region" --include="*.cs" --include="*.csproj" .

# Find all XSL-FO template files
find . -name "*.fo" -o -name "*.xslfo" -o -name "*xsl-fo*"
SHELL

Documente sus plantillas XSL-FO

Antes de la migración, catalogue todos los archivos XSL-FO y anótelos:

  • Dimensiones y márgenes de la página
  • Fuentes utilizadas
  • Tablas y sus estructuras
  • Encabezados y pies de página (fo:static-content)
  • Patrones de numeración de páginas
  • Carga de fuentes

Inicio rápido de la migración

Paso 1: Actualizar paquetes NuGet

# Remove fo.net package
dotnet remove package Fonet
dotnet remove package FO.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

Paso 2: Actualizar los espacios de nombres

// Before (fo.net)
using Fonet;
using Fonet.Render.Pdf;
using System.Xml;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;

Paso 3: Inicializar IronPDF

// Set license key at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

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

// Before (fo.net with XSL-FO)
FonetDriver driver = FonetDriver.Make();
using (FileStream output = new FileStream("output.pdf", FileMode.Create))
{
    driver.Render(new StringReader(xslFoContent), output);
}

// After (IronPDF with HTML)
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 fo.netEquivalente de IronPDF
FonetIronPdf
Fonet.Render.PdfIronPdf
Fonet.LayoutN/A
Fonet.FoN/A
Fonet.ImageIronPdf

FonetDriver a ChromePdfRenderer

Método FonetDriverEquivalente de IronPDF
FonetDriver.Make()new ChromePdfRenderer()
driver.Render(inputStream, outputStream)renderer.RenderHtmlAsPdf(html)
driver.Render(inputFile, outputStream)renderer.RenderHtmlFileAsPdf(path)
driver.BaseDirectoryRenderingOptions.BaseUrl
driver.OnError += handlerTry/catch alrededor de render

Opciones de renderizado (configuración de PDF)

fo.net (Atributos XSL-FO)Opciones de renderizado de IronPDF
page-heightPaperSize o SetCustomPaperSize()
page-widthPaperSize
margin-topMarginTop
margin-bottomMarginBottom
margin-leftMarginLeft
margin-rightMarginRight
reference-orientationPaperOrientation

Guía de conversión de XSL-FO a HTML

Elementos XSL-FO a HTML/CSS

El cambio fundamental en esta migración a fo.net es la conversión de elementos XSL-FO a sus equivalentes HTML:

Elemento XSL-FOEquivalente HTML/CSS
<fo:root><html>
<fo:layout-master-set>Regla CSS @page
<fo:simple-page-master>CSS @page
<fo:page-sequence><body> o <div>
<fo:flow><main> o <div>
<fo:static-content>HtmlHeaderFooter
<fo:block><p>, <div>, <h1>-<h6>
<fo:inline><span>
<fo:table><table>
<fo:table-row><tr>
<fo:table-cell><td>, <th>
<fo:list-block><ul>, <ol>
<fo:list-item><li>
<fo:external-graphic><img>
<fo:page-number>{page} marcador de posición
<fo:page-number-citation>{total-pages}
<fo:basic-link><a href>

Propiedades XSL-FO a CSS

Propiedad XSL-FOEquivalente en CSSEjemplo
font-familyfont-familyMisma sintaxis
font-sizefont-sizeMisma sintaxis
font-weightfont-weightbold, normal, 700
text-aligntext-alignleft, center, right, justify
colorcolorHex, RGB, nombres
background-colorbackground-colorMisma sintaxis
space-beforemargin-topAntes del elemento
space-aftermargin-bottomDespués del elemento
start-indentmargin-leftSangría izquierda
keep-togetherpage-break-inside: avoidEvitar interrupciones
break-before="page"page-break-before: alwaysForzar salto de página

Ejemplos de código

Ejemplo 0: Factura VeriFactu con datos españoles (NIF/CIF, AEAT)

Este ejemplo práctico muestra la diferencia fundamental entre fo.NET e IronPDF para generar una factura conforme con VeriFactu en España, con datos del NIF/CIF del emisor y receptor, importes en formato español (1.234,56 €) y la leyenda VERI*FACTU exigida por el Real Decreto 1007/2023:

Antes (fo.NET — no viable para VeriFactu):

// fo.NET requiere XSL-FO markup; no puede añadir leyenda VERI*FACTU
// ni gestionar la cadena de huellas encadenadas exigida por la AEAT
// XSL-FO tampoco soporta firma PAdES para TicketBAI

Después (IronPDF — conforme a VeriFactu y TicketBAI):

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

class FacturaVeriFactu
{
    public static void GenerarFactura()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
        
        var culture = new CultureInfo("es-ES");
        var baseImponible = 2500.00m;
        var iva = baseImponible * 0.21m;
        var total = baseImponible + iva;
        
        var html = $@"
            <!DOCTYPE html><html lang='es'><body style='font-family:Arial; font-size:11pt;'>
                <h2>FACTURA — NIF Emisor: A12345678 | CIF Receptor: B98765432</h2>
                <p>Fecha: 28/05/2026 | Número: 2026-F-00456 | Período: 2T 2026</p>
                <table border='1' cellpadding='5' style='width:100%;border-collapse:collapse;'>
                    <tr><th>Concepto</th><th>Base (€)</th><th>IVA 21%</th><th>Total (€)</th></tr>
                    <tr><td>Desarrollo software AEAT</td>
                        <td>{baseImponible.ToString("N2", culture)} €</td>
                        <td>{iva.ToString("N2", culture)} €</td>
                        <td>{total.ToString("N2", culture)} €</td></tr>
                </table>
                <p style='font-size:9pt; border-top:1px solid #000; margin-top:20px;'>
                    *** VERI*FACTU *** | Verificable en https://www2.agenciatributaria.gob.es
                    | SII: Remitido | FNMT-RCM: Firmado digitalmente
                </p>
            </body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("factura_verifactu_2026.pdf");
    }
}
C#

IronPDF genera el PDF con la leyenda VERI*FACTU, los datos del NIF/CIF del emisor, los importes en formato español con separador decimal de coma y la referencia a la sede de la AEAT. fo.NET no puede producir este resultado debido a sus limitaciones técnicas con el marcado XSL-FO.


Ejemplo 1: HTML básico a PDF

Antes (fo.net con XSL-FO):

// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;
using System.Xml;

class Program
{
    static void Main()
    {
        // fo.net requires XSL-FO format, not HTML
        // First convert HTML to XSL-FO (manual process)
        string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
            <fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
                <fo:layout-master-set>
                    <fo:simple-page-master master-name='page'>
                        <fo:region-body/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference='page'>
                    <fo:flow flow-name='xsl-region-body'>
                        <fo:block>Hello World</fo:block>
                    </fo:flow>
                </fo:page-sequence>
            </fo:root>";
        
        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("output.pdf", FileMode.Create));
    }
}

Después (IronPDF con HTML):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}

El método IronPDF reduce más de 25 líneas de marcado XSL-FO a sólo 4 líneas de código C# limpio. Para obtener más opciones de HTML a PDF, consulte la documentación de HTML a PDF de IronPDF.

Ejemplo 2: PDF con ajustes personalizados

Antes (fo.net con XSL-FO):

// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        // fo.net settings are configured in XSL-FO markup
        string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
            <fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
                <fo:layout-master-set>
                    <fo:simple-page-master master-name='A4' 
                        page-height='297mm' page-width='210mm'
                        margin-top='20mm' margin-bottom='20mm'
                        margin-left='25mm' margin-right='25mm'>
                        <fo:region-body/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference='A4'>
                    <fo:flow flow-name='xsl-region-body'>
                        <fo:block font-size='14pt'>Custom PDF</fo:block>
                    </fo:flow>
                </fo:page-sequence>
            </fo:root>";
        
        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("custom.pdf", FileMode.Create));
    }
}

Después (IronPDF con HTML):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 25;
        renderer.RenderingOptions.MarginRight = 25;
        
        string html = "<h1 style='font-size:14pt'>Custom PDF</h1>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}

IronPDF ofrece opciones programáticas de presentación en lugar de incrustar la configuración en el marcado XML.

Ejemplo 3: URL a PDF

Antes (fo.net - no compatible):

// NuGet: Install-Package Fonet
using Fonet;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        // fo.net does not support URL rendering directly
        // Must manually download, convert HTML to XSL-FO, then render
        string url = "https://example.com";
        string html = new WebClient().DownloadString(url);
        
        // Manual conversion from HTML to XSL-FO required (complex)
        string xslFo = ConvertHtmlToXslFo(html); // Not built-in
        
        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("webpage.pdf", FileMode.Create));
    }
    
    static string ConvertHtmlToXslFo(string html)
    {
        // Custom implementation required - extremely complex
        throw new System.NotImplementedException();
    }
}

Después (IronPDF - soporte integrado):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

La conversión de URL a PDF es una de las ventajas más significativas de esta migración a .net.IronPDF se encarga de ello de forma nativa con ejecución completa de JavaScript. Más información sobre Conversión de URL a PDF.

Ejemplo 4: Encabezados y pies de página

Antes (fo.net con XSL-FO):

<fo:static-content flow-name="xsl-region-before">
    <fo:block text-align="center" font-size="10pt">
        Company Name - Confidential
    </fo:block>
</fo:static-content>

<fo:static-content flow-name="xsl-region-after">
    <fo:block text-align="right" font-size="10pt">
        Page <fo:page-number/> of <fo:page-number-citation ref-id="last-page"/>
    </fo:block>
</fo:static-content>
XML

Después (IronPDF):

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center; font-size:10pt;'>Company Name - Confidential</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
};

IronPDF sustituye las complejas definiciones de regiones XSL-FO por sencillos encabezados y pies de página HTML.

Ejemplo 5: Seguridad de PDF

Antes (fo.net):

// fo.net has very limited PDF security options
// Must use post-processing with another library

Después (IronPDF):

using IronPdf;

public byte[] GenerateSecurePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(html);

    // Set metadata
    pdf.MetaData.Title = "Confidential Report";
    pdf.MetaData.Author = "Company Name";

    // Password protection
    pdf.SecuritySettings.OwnerPassword = "owner123";
    pdf.SecuritySettings.UserPassword = "user456";

    // Restrict permissions
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
    pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;

    return pdf.BinaryData;
}

Consideraciones sobre el rendimiento

Reutilizar ChromePdfRenderer

Para obtener un rendimiento óptimo durante la migración de fo .NET , reutilice la instancia ChromePdfRenderer:

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

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

// BAD - Creating 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

fo.net XSL-FO utiliza varias unidades.IronPDF utiliza milímetros para los márgenes. Aquí tienes una clase de ayuda:

public static class UnitConverter
{
    public static double InchesToMm(double inches) => inches * 25.4;
    public static double PointsToMm(double points) => points * 0.352778;
    public static double PicasToMm(double picas) => picas * 4.233;
    public static double CmToMm(double cm) => cm * 10;
}

// Usage
renderer.RenderingOptions.MarginTop = UnitConverter.InchesToMm(1);  // 1 inch

Solución de problemas

Cuestión 1: Diferencias de tamaño de página

Problema: el tamaño de la página PDF se ve diferente después de la migración a .NET .

Solución: Asigne correctamente las dimensiones de la página XSL-FO:

// XSL-FO: page-height='11in' page-width='8.5in' (Letter)
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;

// XSL-FO: page-height='297mm' page-width='210mm' (A4)
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

// Custom size (in mm)
renderer.RenderingOptions.SetCustomPaperSize(210, 297);

Edición 2: Mapeo de fo:block a HTML

Problema: No estoy seguro de en qué debería convertirse <fo:block>.

Solución: utilice HTML semántico apropiado:

  • Encabezados: <h1> hasta <h6>
  • Párrafos: <p>
  • Contenedores genéricos: <div>
  • Texto en línea: <span>

Cuestión 3: Fuentes no coincidentes

Problema: Las fuentes se ven diferentes a la salida de fo .NET .

Solución: utilice fuentes web o especifique fuentes del sistema en CSS:

<style>
    @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
    body { font-family: 'Roboto', Arial, sans-serif; }
</style>
HTML

Cuestión 4: Los números de página no funcionan

Problema: <fo:page-number/> no funciona.

Solución: utilice marcadores de posición IronPDF en encabezados y pies de página:

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 15  // mm
};

Cumplimiento normativo en España: fo.NET no puede satisfacer los requisitos legales

La obsolescencia técnica de fo.NET se combina en España con una barrera regulatoria insalvable. Los desarrolladores de software de facturación deben ser conscientes de que XSL-FO no dispone de las primitivas necesarias para cumplir con la normativa española vigente.

VeriFactu (Real Decreto-Ley 15/2025)

VeriFactu obliga a que cada PDF de factura incluya la leyenda VERI*FACTU y una huella encadenada que vincula cada factura con la anterior, asegurando la trazabilidad ante la AEAT. Estos requisitos implican manipular el contenido del PDF de forma programática —añadir texto, metadatos y hashes—, algo que el motor XSL-FO de fo.NET no soporta. Los proveedores que incumplan el RDL 15/2025 se exponen a sanciones de hasta 150.000 € anuales.

TicketBAI (Bizkaia, Gipuzkoa y Araba)

El régimen TicketBAI en el País Vasco exige firmar digitalmente cada factura usando XAdES y adjuntarla como PDF firmado con PAdES conforme a eIDAS, con certificados reconocidos por la FNMT u otras autoridades de certificación. fo.NET no implementa firma digital de ningún tipo.

Crea y Crece y Facturae XML

La Ley Crea y Crece exige la emisión de facturas electrónicas B2B en formato Facturae XML, bajo el estándar EN 16931 y el perfil CIUS-ES, con posibilidad de envío a través de FACe o el SII de la AEAT. IronPDF permite incrustar Facturae XML en documentos PDF/A-3, cubriendo este requisito con una única biblioteca.

LOPDGDD y procesamiento on-premise

La LOPDGDD y la supervisión de la AEPD exigen que los datos personales de las facturas se procesen con garantías adecuadas. IronPDF opera completamente on-premise, sin transferir contenido a servicios externos, lo que simplifica la evaluación de impacto de protección de datos.

Lista de comprobación de la migración

Pre-Migración

  • Catalogar todos los archivos de plantilla XSL-FO (.fo, .xslfo)
  • Dimensiones de la página del documento y márgenes utilizados
  • Configuraciones de encabezado/pie de página de notas (fo:static-content)
  • Identificar estructuras y estilos de tablas
  • Realizar una copia de seguridad del proyecto en el control de versiones
  • Obtener la clave de licencia de IronPDF

Migración de paquetes

  • Eliminar el paquete Fonet o FO.NET: dotnet remove package Fonet
  • Instalar el paquete IronPdf: dotnet add package IronPdf
  • Actualizar las importaciones de espacios de nombres de Fonet a IronPdf
  • Establecer la clave de licencia de IronPDF al inicio

Migración de código

  • Reemplace FonetDriver.Make() con new ChromePdfRenderer()
  • Reemplace driver.Render() con renderer.RenderHtmlAsPdf()
  • Actualizar la salida de archivos de los streams a pdf.SaveAs()
  • Reemplazar los controladores de eventos de error con try/catch
  • Convertir fo:static-content a HtmlHeaderFooter
  • Reemplace <fo:page-number/> con el marcador de posición {page}

Pruebas

  • Comparar la apariencia de salida con los PDF .NET originales
  • Verificar las dimensiones y márgenes de la página
  • Verificar encabezados y pies de página
  • Validar números de página
  • Representación de la tabla de pruebas
  • Verificar la carga de la imagen

Posmigración

  • Eliminar los archivos de plantilla .fo y .xslfo
  • Eliminar código y utilidades relacionadas con fo.net
  • Actualización de la documentación

Para profundizar en la superficie de IronPDF utilizada anteriormente, consulte la referencia de la API de IronPDF.

Por favor nota: FO.NET, Fonet y Apache FOP son marcas comerciales de sus respectivos propietarios. Este sitio no está afiliado con, respaldado por, ni patrocinado por el proyecto FO.NET ni por la Apache Software Foundation. Todos los nombres de productos, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones tienen fines meramente informativos y reflejan información disponible públicamente en el momento de su redacció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 estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta