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

Migrar de FastReport a IronPDF: VeriFactu, TicketBAI y LOPDGDD para ISVs españoles

FastReport.NET es una solución de generación de informes visual para .NET con arquitectura basada en bandas. Para los ISVs y desarrolladores españoles que generan facturas electrónicas bajo VeriFactu (RDL 15/2025), TicketBAI (Bizkaia, Gipuzkoa, Araba) o documentos Facturae para FACe, FastReport presenta limitaciones regulatorias críticas: la arquitectura basada en bandas (DataBand, PageHeaderBand) no puede generar la leyenda obligatoria VERI*FACTU con CSS moderno (Flexbox/Grid), la versión open-source carece de firma digital para XAdES/PAdES requerida por TicketBAI y eIDAS, y el modelo de licencias fragmentado (FastReport.OpenSource + Export.PdfSimple + paquetes adicionales) introduce el mismo riesgo de interrupción de servicio que afecta a los ISVs de facturación bajo el régimen de penalizaciones VeriFactu de hasta 150.000 €/año. IronPDF resuelve estos requisitos en un único paquete: genera PDFs con leyenda VERI*FACTU y QR de la AEAT usando CSS3 completo, firma XAdES/PAdES con certificados FNMT-RCM, y opera on-premise sin restricciones AGPL para la distribución de software de facturación propietario.

¿Por qué migrar de FastReport a IronPDF?

La especialización de FastReport.NET en la generación de informes crea fricciones para los equipos de desarrollo que necesitan una generación de PDF versátil — y para los ISVs españoles de facturación electrónica, las limitaciones son de carácter regulatorio, no solo técnico. Comprender estas diferencias es esencial para planificar la migración.

Los retos de FastReport para ISVs españoles de facturación electrónica

  1. Sin soporte nativo VeriFactu (RDL 15/2025): FastReport no puede generar la leyenda obligatoria VERI*FACTU ni Factura verificable en la sede electrónica de la AEAT con composición CSS precisa (Flexbox/Grid) en su versión open-source. Los proveedores de software de facturación se exponen a sanciones de hasta 150.000 €/año.

  2. Sin firma XAdES/PAdES para TicketBAI: Las tres Haciendas Forales del País Vasco (Bizkaia, Gipuzkoa, Araba) exigen firma XAdES y PAdES conforme a eIDAS. FastReport open-source no incluye firma digital; la versión comercial tiene costes adicionales no transparentes.

  3. Arquitectura basada en bandas incompatible con CSS moderno: DataBand, PageHeaderBand y el formato propietario .frx no soportan Flexbox ni Grid CSS — impidiendo la maquetación de representaciones gráficas conformes con la especificación técnica de la AEAT para VeriFactu.

  4. Paquetes fragmentados → riesgo de interrupción en cumplimiento: FastReport.OpenSource + Export.PdfSimple + paquetes adicionales replican el problema de licencias fragmentadas de DynamicPDF. Una renovación fallida en plena generación de facturas TicketBAI puede interrumpir el flujo de cumplimiento.

  5. Sin LOPDGDD on-premise por defecto: La vinculación de datos mediante RegisterData() y el modelo de informes no garantiza por sí mismo el procesamiento on-premise de datos fiscales (NIF/CIF) bajo la supervisión de la AEPD.

  6. Licencia AGPL de FastReport.OpenSource: La versión open-source usa licencia MIT/LGPL, pero el ecosistema de plugins incluye componentes con restricciones. En contraste, iText7 (alternativa frecuente al migrar) usa AGPL — en el contexto VeriFactu donde los ISVs distribuyen software de facturación propietario, esto plantea las mismas restricciones de copyleft que complican la distribución. IronPDF ofrece licenciamiento comercial predecible sin restricciones AGPL.

Comparación de arquitecturas

Aspecto FastReport IronPDF
Enfoque de diseño Diseñador visual + archivos .frx HTML/CSS (tecnologías web)
Curva de aprendizaje Steep (conceptos basados en bandas) Suave (conocimientos de HTML/CSS)
Vinculación de datos RegisterData(), DataBand Interpolación de cadenas, Razor, plantillas
Soporte CSS Limitado CSS3 completo con Flexbox/Grid
Modelo de paquete Múltiples paquetes Paquete único (todas las funciones)
Motor de renderizado A medida Último Chromium
Manipulación de PDF Orientado a la exportación Completo (fusión, división, seguridad, formularios)
Moderno .NET .NET Standard 2.0 .NET 6/7/8/9+ nativo

Beneficios clave de la migración para el mercado español

  1. Cumplimiento VeriFactu (RDL 15/2025): IronPDF genera la leyenda VERI*FACTU con Flexbox/CSS3 completo; FastReport open-source no puede
  2. Firma XAdES/PAdES para TicketBAI (Bizkaia, Gipuzkoa, Araba): soporte nativo con certificados FNMT-RCM, conforme a eIDAS
  3. Paquete único: un NuGet reemplaza FastReport.OpenSource + Export.PdfSimple + extras — elimina el riesgo de interrupción por renovación parcial
  4. HTML/CSS familiar: conversión directa de plantillas .frx a HTML/CSS sin curva de aprendizaje de bandas propietarias
  5. LOPDGDD on-premise: procesamiento headless sin enviar datos fiscales (NIF/CIF) a servicios externos — simplifica análisis AEPD
  6. Sin restricciones AGPL: licenciamiento comercial predecible para distribución de software de facturación propietario

Contexto regulatorio español: VeriFactu, TicketBAI y las limitaciones de FastReport

Para los ISVs españoles de software de facturación electrónica, migrar a IronPDF no es solo mejorar la arquitectura técnica: es cerrar brechas de cumplimiento regulatorio concretas.

VeriFactu (Real Decreto-Ley 15/2025): Las representaciones gráficas de facturas conforme a VeriFactu deben incluir la leyenda VERI*FACTU o Factura verificable en la sede electrónica de la AEAT y el QR de verificación de la AEAT. FastReport open-source, con su motor de renderizado propio sin soporte Flexbox, dificulta la maquetación precisa de estos elementos. IronPDF, con motor Chromium moderno, soporta toda la especificación CSS3.

TicketBAI en el País Vasco (Bizkaia, Gipuzkoa, Araba): Las Haciendas Forales exigen facturas firmadas con XAdES y PAdES conforme a eIDAS, usando certificados de la FNMT-RCM u otras CAs reconocidas. FastReport open-source no incluye firma digital nativa. IronPDF incluye XAdES, PAdES y CAdES en el mismo paquete.

Facturae XML y FACe (sector público): Los PDFs de acompañamiento de facturas Facturae para el sector público requieren representaciones gráficas fieles. La generación de estos PDFs con IronPDF permite incrustar el XML Facturae en PDF/A-3 para el SII (Suministro Inmediato de Información) de la AEAT.

LOPDGDD y AEPD: Las facturas contienen datos personales (NIF, CIF, domicilio fiscal) sujetos a la LOPDGDD. IronPDF procesa on-premise, sin transferencias de datos a servicios externos. La AEPD supervisa el tratamiento de datos fiscales — el procesamiento headless on-premise de IronPDF simplifica el análisis de cumplimiento.

Generación de factura VeriFactu con IronPDF (sustituyendo FastReport)

El siguiente ejemplo muestra cómo IronPDF genera una factura conforme con VeriFactu — con leyenda obligatoria, QR AEAT, NIF/CIF del emisor/receptor y formato EUR en notación española — usando HTML/CSS que FastReport no puede renderizar correctamente con su motor propio:

using IronPdf;

// Sustitución de FastReport.OpenSource + Export.PdfSimple por IronPDF (paquete único)
var renderer = new ChromePdfRenderer();
var html = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .header { display: flex; justify-content: space-between; align-items: flex-start; }
        .verifactu-legend {
            border: 2px solid #003366; padding: 8px 12px;
            font-size: 10px; text-align: center; margin-top: 20px;
        }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
        th { background-color: #003366; color: white; }
    </style>
</head>
<body>
    <div class='header'>
        <div>
            <strong>FACTURA</strong> Nº 2026-0055<br>
            Fecha: 28/05/2026<br>
            NIF Emisor: B-55667788
        </div>
        <div>CIF Receptor: A-88776655</div>
    </div>
    <table>
        <tr><th>Concepto</th><th>Base imponible</th><th>IVA (21%)</th><th>Total</th></tr>
        <tr><td>Módulo de reporting</td><td>2.400,00 €</td><td>504,00 €</td><td>2.904,00 €</td></tr>
    </table>

    <div class='verifactu-legend'>
        <strong>VERI*FACTU</strong><br>
        Factura verificable en la sede electrónica de la AEAT<br>
        [QR AEAT — sede.agenciatributaria.gob.es]
    </div>
</body>
</html>";

// Flexbox + CSS3: imposible con el motor propio de FastReport
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("factura-verifactu-2026-0055.pdf");
using IronPdf;

// Sustitución de FastReport.OpenSource + Export.PdfSimple por IronPDF (paquete único)
var renderer = new ChromePdfRenderer();
var html = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .header { display: flex; justify-content: space-between; align-items: flex-start; }
        .verifactu-legend {
            border: 2px solid #003366; padding: 8px 12px;
            font-size: 10px; text-align: center; margin-top: 20px;
        }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
        th { background-color: #003366; color: white; }
    </style>
</head>
<body>
    <div class='header'>
        <div>
            <strong>FACTURA</strong> Nº 2026-0055<br>
            Fecha: 28/05/2026<br>
            NIF Emisor: B-55667788
        </div>
        <div>CIF Receptor: A-88776655</div>
    </div>
    <table>
        <tr><th>Concepto</th><th>Base imponible</th><th>IVA (21%)</th><th>Total</th></tr>
        <tr><td>Módulo de reporting</td><td>2.400,00 €</td><td>504,00 €</td><td>2.904,00 €</td></tr>
    </table>

    <div class='verifactu-legend'>
        <strong>VERI*FACTU</strong><br>
        Factura verificable en la sede electrónica de la AEAT<br>
        [QR AEAT — sede.agenciatributaria.gob.es]
    </div>
</body>
</html>";

// Flexbox + CSS3: imposible con el motor propio de FastReport
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("factura-verifactu-2026-0055.pdf");
Imports IronPdf

' Sustitución de FastReport.OpenSource + Export.PdfSimple por IronPDF (paquete único)
Dim renderer As New ChromePdfRenderer()
Dim html As String = "
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .header { display: flex; justify-content: space-between; align-items: flex-start; }
        .verifactu-legend {
            border: 2px solid #003366; padding: 8px 12px;
            font-size: 10px; text-align: center; margin-top: 20px;
        }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
        th { background-color: #003366; color: white; }
    </style>
</head>
<body>
    <div class='header'>
        <div>
            <strong>FACTURA</strong> Nº 2026-0055<br>
            Fecha: 28/05/2026<br>
            NIF Emisor: B-55667788
        </div>
        <div>CIF Receptor: A-88776655</div>
    </div>
    <table>
        <tr><th>Concepto</th><th>Base imponible</th><th>IVA (21%)</th><th>Total</th></tr>
        <tr><td>Módulo de reporting</td><td>2.400,00 €</td><td>504,00 €</td><td>2.904,00 €</td></tr>
    </table>

    <div class='verifactu-legend'>
        <strong>VERI*FACTU</strong><br>
        Factura verificable en la sede electrónica de la AEAT<br>
        [QR AEAT — sede.agenciatributaria.gob.es]
    </div>
</body>
</html>"

' Flexbox + CSS3: imposible con el motor propio de FastReport
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("factura-verifactu-2026-0055.pdf")
$vbLabelText   $csharpLabel

FastReport requeriría Report + HTMLObject con dimensiones fijas + PDFSimpleExport + stream — y aún así no renderizaría el display: flex de la cabecera correctamente. IronPDF genera el mismo PDF en 3 líneas de código.

Preparación de la migración

Prerrequisitos

Asegúrese de que su entorno cumple estos requisitos:

  • .NET Framework 4.6.2+ o .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ o VS Code con extensión de C#
  • Acceso al gestor de paquetes NuGet
  • Clave de licencia deIronPDF(prueba gratuita disponible en ironpdf.com)

Uso de Auditoría FastReport

Ejecute estos comandos en su directorio de soluciones para identificar todas las referencias a FastReport:

# Find all FastReportreferences
grep -r "FastReport\|\.frx\|PDFExport\|PDFSimpleExport\|DataBand\|RegisterData" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep FastReport
# Find all FastReportreferences
grep -r "FastReport\|\.frx\|PDFExport\|PDFSimpleExport\|DataBand\|RegisterData" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep FastReport
SHELL

Documente sus plantillas de informes

Antes de la migración, catalogue todos los archivos .frx y sus propósitos:

  • Nombre y objetivo del informe
  • Fuentes de datos utilizadas
  • Configuración de encabezados/pies de página
  • Requisitos de numeración de páginas
  • Formato o estilo especial

Entendiendo el cambio de paradigma

El cambio más significativo al migrar de FastReportaIronPDFes el enfoque de diseño fundamental. FastReportutiliza un diseño visual basado en bandas con archivos de plantilla .frx y conceptos propietarios como DataBand, PageHeaderBand y RegisterData().IronPDFutiliza tecnologías web HTML/CSS que la mayoría de los desarrolladores ya conocen.

Esto significa convertir las configuraciones de banda de FastReporten plantillas HTML, sustituir RegisterData() por la vinculación directa de datos mediante interpolación de cadenas o plantillas Razor, y transformar PageHeaderBand/PageFooterBand en encabezados y pies de página basados en HTML.

Proceso de migración paso a paso

Paso 1: Actualizar paquetes NuGet

Elimine todos los paquetes de FastReporte instale IronPDF:

# Remove all FastReportpackages
dotnet remove package FastReport.OpenSource
dotnet remove package FastReport.OpenSource.Export.PdfSimple
dotnet remove package FastReport.OpenSource.Web
dotnet remove package FastReport.OpenSource.Data.MsSql

# InstallIronPDF(includes all features)
dotnet add package IronPdf
# Remove all FastReportpackages
dotnet remove package FastReport.OpenSource
dotnet remove package FastReport.OpenSource.Export.PdfSimple
dotnet remove package FastReport.OpenSource.Web
dotnet remove package FastReport.OpenSource.Data.MsSql

# InstallIronPDF(includes all features)
dotnet add package IronPdf
SHELL

Paso 2: Actualizar referencias de espacios de nombres

Sustituya los espacios de nombres de FastReportpor IronPDF:

// Remove these
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;

// Add this
using IronPdf;
// Remove these
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;

// Add this
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

Paso 3: Configurar la licencia

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Referencia completa de migración de API

Mapeo de clases principales

Clase FastReport Equivalente de IronPDF
Report ChromePdfRenderer
PDFExport ChromePdfRenderer + SecuritySettings
PDFSimpleExport ChromePdfRenderer
ReportPage HTML <body> o <div>
TextObject HTML <p>, <span>, <div>
HTMLObject Representación directa en HTML
PageHeaderBand HtmlHeaderFooter
PageFooterBand HtmlHeaderFooter

Métodos

Método FastReport Equivalente de IronPDF
report.Load("template.frx") Archivo o cadena de plantilla HTML
report.RegisterData(data, "name") Interpolación de cadenas o Razor
report.Prepare() N/A
report.Export(export, stream) pdf.SaveAs(path)

Conversión de marcadores de posición de números de página

FastReport eIronPDFutilizan una sintaxis diferente para los números de página:

FastReport IronPDF
[Page] {page}
[TotalPages] {total-pages}

Ejemplos de migración de código

Conversión de HTML a PDF

Este ejemplo demuestra la diferencia fundamental entre el enfoque HTMLObject de FastReporty la renderización directa de IronPDF.

Implementación de FastReport:

// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;

class Program
{
    static void Main()
    {
        using (Report report = new Report())
        {
            // Create HTML object
            FastReport.HTMLObject htmlObject = new FastReport.HTMLObject();
            htmlObject.Width = 500;
            htmlObject.Height = 300;
            htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>";

            // Prepare report
            report.Prepare();

            // Export to PDF
            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;

class Program
{
    static void Main()
    {
        using (Report report = new Report())
        {
            // Create HTML object
            FastReport.HTMLObject htmlObject = new FastReport.HTMLObject();
            htmlObject.Width = 500;
            htmlObject.Height = 300;
            htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>";

            // Prepare report
            report.Prepare();

            // Export to PDF
            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
Imports FastReport
Imports FastReport.Export.PdfSimple
Imports System.IO

Class Program
    Shared Sub Main()
        Using report As New Report()
            ' Create HTML object
            Dim htmlObject As New FastReport.HTMLObject()
            htmlObject.Width = 500
            htmlObject.Height = 300
            htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>"

            ' Prepare report
            report.Prepare()

            ' Export to PDF
            Dim pdfExport As New PDFSimpleExport()
            Using fs As New FileStream("output.pdf", FileMode.Create)
                report.Export(pdfExport, fs)
            End Using
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

FastReport requiere la creación de un objeto Report, un HTMLObject con dimensiones fijas, la preparación del informe y la exportación mediante stream: siete líneas de código con sentencias using.IronPDFconsigue el mismo resultado en tres líneas con una representación directa en HTML. Para más opciones, consulte la documentación HTML a PDF.

Conversión de URL a PDF

Este ejemplo muestra cómo FastReportrequiere la descarga manual de HTML, mientras queIronPDFgestiona la renderización de URL de forma nativa.

Implementación de FastReport:

// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        // Download HTML content from URL
        string htmlContent;
        using (WebClient client = new WebClient())
        {
            htmlContent = client.DownloadString("https://example.com");
        }

        using (Report report = new Report())
        {
            FastReport.HTMLObject htmlObject = new FastReport.HTMLObject();
            htmlObject.Width = 800;
            htmlObject.Height = 600;
            htmlObject.Text = htmlContent;

            report.Prepare();

            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("webpage.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        // Download HTML content from URL
        string htmlContent;
        using (WebClient client = new WebClient())
        {
            htmlContent = client.DownloadString("https://example.com");
        }

        using (Report report = new Report())
        {
            FastReport.HTMLObject htmlObject = new FastReport.HTMLObject();
            htmlObject.Width = 800;
            htmlObject.Height = 600;
            htmlObject.Text = htmlContent;

            report.Prepare();

            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("webpage.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
Imports FastReport
Imports FastReport.Export.PdfSimple
Imports System.IO
Imports System.Net

Class Program
    Shared Sub Main()
        ' Download HTML content from URL
        Dim htmlContent As String
        Using client As New WebClient()
            htmlContent = client.DownloadString("https://example.com")
        End Using

        Using report As New Report()
            Dim htmlObject As New FastReport.HTMLObject()
            htmlObject.Width = 800
            htmlObject.Height = 600
            htmlObject.Text = htmlContent

            report.Prepare()

            Dim pdfExport As New PDFSimpleExport()
            Using fs As New FileStream("webpage.pdf", FileMode.Create)
                report.Export(pdfExport, fs)
            End Using
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Implementación de IronPDF:

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

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

FastReport requiere descargar manualmente el contenido HTML con WebClient y, a continuación, incrustarlo en un HTMLObject con dimensiones fijas, una solución que no gestiona correctamente la ejecución de JavaScript ni las URL de recursos relativos. El código RenderUrlAsPdf deIronPDFrenderiza directamente la página web en vivo con ejecución completa de JavaScript mediante el motor Chromium. Para más opciones, consulte la URL de la documentación en PDF .

Cabeceras y pies de página con números de página

Este ejemplo demuestra la diferencia de complejidad entre el sistema basado en bandas de FastReporty el enfoque basado en HTML de IronPDF.

Implementación de FastReport:

// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;

class Program
{
    static void Main()
    {
        using (Report report = new Report())
        {
            report.Load("template.frx");

            // Set report page properties
            FastReport.ReportPage page = report.Pages[0] as FastReport.ReportPage;

            // Add page header
            FastReport.PageHeaderBand header = new FastReport.PageHeaderBand();
            header.Height = 50;
            FastReport.TextObject headerText = new FastReport.TextObject();
            headerText.Text = "Document Header";
            header.Objects.Add(headerText);
            page.Bands.Add(header);

            // Add page footer
            FastReport.PageFooterBand footer = new FastReport.PageFooterBand();
            footer.Height = 50;
            FastReport.TextObject footerText = new FastReport.TextObject();
            footerText.Text = "Page [Page]";
            footer.Objects.Add(footerText);
            page.Bands.Add(footer);

            report.Prepare();

            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("report.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;

class Program
{
    static void Main()
    {
        using (Report report = new Report())
        {
            report.Load("template.frx");

            // Set report page properties
            FastReport.ReportPage page = report.Pages[0] as FastReport.ReportPage;

            // Add page header
            FastReport.PageHeaderBand header = new FastReport.PageHeaderBand();
            header.Height = 50;
            FastReport.TextObject headerText = new FastReport.TextObject();
            headerText.Text = "Document Header";
            header.Objects.Add(headerText);
            page.Bands.Add(header);

            // Add page footer
            FastReport.PageFooterBand footer = new FastReport.PageFooterBand();
            footer.Height = 50;
            FastReport.TextObject footerText = new FastReport.TextObject();
            footerText.Text = "Page [Page]";
            footer.Objects.Add(footerText);
            page.Bands.Add(footer);

            report.Prepare();

            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("report.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
Imports FastReport
Imports FastReport.Export.PdfSimple
Imports System.IO

Class Program
    Shared Sub Main()
        Using report As New Report()
            report.Load("template.frx")

            ' Set report page properties
            Dim page As FastReport.ReportPage = TryCast(report.Pages(0), FastReport.ReportPage)

            ' Add page header
            Dim header As New FastReport.PageHeaderBand()
            header.Height = 50
            Dim headerText As New FastReport.TextObject()
            headerText.Text = "Document Header"
            header.Objects.Add(headerText)
            page.Bands.Add(header)

            ' Add page footer
            Dim footer As New FastReport.PageFooterBand()
            footer.Height = 50
            Dim footerText As New FastReport.TextObject()
            footerText.Text = "Page [Page]"
            footer.Objects.Add(footerText)
            page.Bands.Add(footer)

            report.Prepare()

            Dim pdfExport As New PDFSimpleExport()
            Using fs As New FileStream("report.pdf", FileMode.Create)
                report.Export(pdfExport, fs)
            End Using
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        // Configure header and footer
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center'>Document Header</div>"
        };

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

        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Report Content</h1><p>This is the main content.</p></body></html>");
        pdf.SaveAs("report.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        // Configure header and footer
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center'>Document Header</div>"
        };

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

        var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Report Content</h1><p>This is the main content.</p></body></html>");
        pdf.SaveAs("report.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        ' Configure header and footer
        renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
            .HtmlFragment = "<div style='text-align:center'>Document Header</div>"
        }

        renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
            .HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>"
        }

        Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Report Content</h1><p>This is the main content.</p></body></html>")
        pdf.SaveAs("report.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

FastReport requiere cargar un archivo de plantilla, crear objetos de página, crear objetos de banda, establecer alturas, crear objetos de texto, añadir a colecciones de bandas y añadir bandas a páginas.IronPDFutiliza HtmlHeaderFooter con fragmentos HTML simples: puede diseñar encabezados y pies de página con CSS completo. Tenga en cuenta el cambio de sintaxis del número de página: [Page] se convierte en {page}, y [TotalPages] se convierte en {total-pages}. Para más opciones, consulte la documentación sobre encabezados y pies de página.

Notas de migración críticas

Sin archivos de plantilla .frx

Las plantillas FastReport(.frx) no funcionarán con IronPDF. Convierta sus diseños en plantillas HTML/CSS:

// FastReport- loads .frx template
report.Load("report.frx");

//IronPDF- use HTML template
var html = File.ReadAllText("template.html");
var pdf = renderer.RenderHtmlAsPdf(html);
// FastReport- loads .frx template
report.Load("report.frx");

//IronPDF- use HTML template
var html = File.ReadAllText("template.html");
var pdf = renderer.RenderHtmlAsPdf(html);
' FastReport- loads .frx template
report.Load("report.frx")

' IronPDF- use HTML template
Dim html As String = File.ReadAllText("template.html")
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Conversión de enlace de datos

Sustituir RegisterData() por la generación directa de HTML:

// FastReport
report.RegisterData(dataSet, "Data");
report.GetDataSource("Data").Enabled = true;

//IronPDF- use string interpolation or StringBuilder
var html = new StringBuilder();
foreach (var item in data)
{
    html.Append($"<tr><td>{item.Name}</td><td>{item.Value}</td></tr>");
}
var pdf = renderer.RenderHtmlAsPdf(html.ToString());
// FastReport
report.RegisterData(dataSet, "Data");
report.GetDataSource("Data").Enabled = true;

//IronPDF- use string interpolation or StringBuilder
var html = new StringBuilder();
foreach (var item in data)
{
    html.Append($"<tr><td>{item.Name}</td><td>{item.Value}</td></tr>");
}
var pdf = renderer.RenderHtmlAsPdf(html.ToString());
Imports System.Text

' FastReport
report.RegisterData(dataSet, "Data")
report.GetDataSource("Data").Enabled = True

' IronPDF - use string interpolation or StringBuilder
Dim html As New StringBuilder()
For Each item In data
    html.Append($"<tr><td>{item.Name}</td><td>{item.Value}</td></tr>")
Next
Dim pdf = renderer.RenderHtmlAsPdf(html.ToString())
$vbLabelText   $csharpLabel

Configuración de seguridad

//IronPDFsecurity
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "password";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
//IronPDFsecurity
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "password";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
'IronPDFsecurity
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.UserPassword = "password"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
$vbLabelText   $csharpLabel

Para conocer opciones de seguridad integrales, consulte la documentación de cifrado .

Cumplimiento LOPDGDD, FNMT-RCM y Crea y Crece al migrar desde FastReport

LOPDGDD y datos fiscales: Al migrar el sistema de generación de informes, asegúrese de que el nuevo motor procesa datos personales (NIF/CIF de clientes, datos de facturación) on-premise. IronPDF opera localmente sin transmitir contenido de facturas a servicios externos — simplificando el análisis de cumplimiento LOPDGDD supervisado por la AEPD para datos fiscales de contribuyentes españoles.

eIDAS y FNMT-RCM: Para firma digital de facturas electrónicas conforme a eIDAS (TicketBAI, FACe), IronPDF soporta certificados PKCS#12 emitidos por la FNMT-RCM. FastReport open-source no implementa firma digital — requería una biblioteca externa adicional.

Crea y Crece (EN 16931/CIUS-ES): La Ley Crea y Crece establece facturas electrónicas B2B obligatorias en España (2027-2028). Las representaciones visuales PDF deben adjuntarse a los XML Facturae en formato PDF/A para FACe o el SII de la AEAT. IronPDF soporta PDF/A y procesamiento en un único paquete — sin los paquetes adicionales fragmentados que requería FastReport para este flujo.

iText AGPL vs IronPDF para ISVs de informes/facturación: Al migrar desde FastReport, algunos equipos evalúan iText/iText7 como alternativa por su potencia técnica. En el contexto VeriFactu, la licencia AGPL de iText obliga a los ISVs de software propietario a publicar su código fuente o adquirir licencia comercial de iText — complejidad adicional bajo el régimen de penalizaciones de 150.000 €/año. IronPDF ofrece licenciamiento comercial único sin restricciones AGPL, con mejor encaje para la distribución de software de facturación certificado ante la AEAT.

Lista de comprobación posterior a la migración

Después de completar la migración del código, verifique lo siguiente:

  • Comparación visual de los PDF generados
  • Verificar encabezados/pies de página y números de página
  • Prueba con volúmenes de datos de producción
  • Validar las características de seguridad/cifrado
  • Evaluación comparativa del rendimiento
  • Eliminar archivos de plantilla .frx no utilizados
  • Eliminar el código relacionado con FastReport
  • Actualización de la documentación
  • Verificar generación de leyenda VERI*FACTU y QR AEAT (RDL 15/2025)
  • Validar firma XAdES/PAdES con certificados FNMT-RCM para TicketBAI (Bizkaia, Gipuzkoa, Araba)
  • Confirmar procesamiento on-premise headless para cumplimiento LOPDGDD/AEPD
  • Probar generación PDF/A para Facturae/FACe si opera en sector público o SII

Proteja su infraestructura PDF frente a los plazos regulatorios españoles

Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características, la elección de una biblioteca PDF que adopte tecnologías web modernas garantiza su mantenimiento a largo plazo. Para los ISVs españoles bajo el régimen de cumplimiento de facturación electrónica (VeriFactu desde 2025, Crea y Crece B2B desde 2027-2028), migrar ahora desde FastReport a IronPDF cierra brechas regulatorias concretas: soporte nativo de VERI*FACTU, firma XAdES/PAdES con certificados FNMT-RCM para TicketBAI (Bizkaia, Gipuzkoa, Araba), generación Facturae XML en PDF/A para FACe y SII, procesamiento on-premise LOPDGDD/AEPD, y licenciamiento comercial sin restricciones AGPL — todo en un único paquete NuGet que reemplaza el stack fragmentado de FastReport.OpenSource + paquetes de exportación.

Recursos adicionales

FastReport vs IronPDF: resumen para el mercado español de facturación electrónica

Criterio FastReport.OpenSource IronPDF
*Leyenda VERIFACTU (RDL 15/2025)** Sin CSS3/Flexbox completo CSS3 Chromium completo ✅
Firma XAdES/PAdES TicketBAI Sin firma digital nativa XAdES, PAdES, CAdES nativo ✅
Facturae XML en PDF/A-3 Requiere plugins adicionales Soportado en paquete único ✅
LOPDGDD on-premise headless Procesamiento local Headless sin sesión interactiva ✅
FNMT-RCM / eIDAS Sin soporte de certificados Certificados PKCS#12 FNMT ✅
Licencia MIT/LGPL (open-source) Comercial (sin AGPL) ✅
Crea y Crece EN 16931 Soporte limitado PDF/A + Facturae XML ✅
SII integración AEAT No específico Headless on-premise ✅
Penalización VeriFactu Riesgo por limitaciones técnicas Arquitectura conforme ✅

La migración de FastReport a IronPDF elimina la dependencia del diseñador visual basado en bandas, la curva de aprendizaje de conceptos .frx/DataBand/RegisterData, y las limitaciones técnicas que bloquean el cumplimiento regulatorio español. Para los ISVs de software de facturación electrónica en España, la transición cierra brechas concretas: leyenda VERI*FACTU con CSS3 Chromium, firma XAdES/PAdES para TicketBAI (Bizkaia, Gipuzkoa, Araba), Facturae XML en PDF/A-3 para FACe y SII, procesamiento on-premise LOPDGDD/AEPD con certificados FNMT-RCM, y licenciamiento comercial predecible sin restricciones AGPL — todo en un único paquete NuGet que prepara el sistema para los plazos de Crea y Crece (EN 16931/CIUS-ES) de 2027-2028.

Preguntas Frecuentes

¿Por qué FastReport.OpenSource es insuficiente para el cumplimiento VeriFactu (RDL 15/2025)?

FastReport.OpenSource no puede generar la leyenda obligatoria VERI*FACTU con composición CSS precisa (Flexbox/Grid) requerida por las especificaciones técnicas de la AEAT. Tampoco incluye firma digital nativa para XAdES/PAdES exigida por TicketBAI en Bizkaia, Gipuzkoa y Araba. Los proveedores de software de facturación no conformes se exponen a sanciones de hasta 150.000 €/año bajo el RDL 15/2025. IronPDF resuelve ambas limitaciones en un único paquete.

¿IronPDF puede reemplazar las plantillas .frx de FastReport para facturas VeriFactu?

Sí. Las plantillas .frx de FastReport (basadas en bandas: DataBand, PageHeaderBand, RegisterData) se convierten a plantillas HTML/CSS en IronPDF. El enfoque HTML/CSS de IronPDF soporta Flexbox y Grid — permitiendo la composición precisa de la leyenda VERI*FACTU, el QR de la AEAT y los datos de la factura según las especificaciones técnicas de la AEAT, algo que FastReport no puede hacer con su motor propio.

¿IronPDF soporta firma XAdES y PAdES con certificados FNMT-RCM para TicketBAI?

Sí. IronPDF incluye soporte nativo XAdES, PAdES y CAdES, compatible con certificados PKCS#12 (.pfx) emitidos por la FNMT-RCM (Fábrica Nacional de Moneda y Timbre). Las tres Haciendas Forales del País Vasco (Bizkaia, Gipuzkoa, Araba) exigen ambas firmas para TicketBAI — IronPDF proporciona esto en el mismo paquete sin bibliotecas externas adicionales.

¿Cuál es la diferencia entre FastReport LGPL, iText AGPL e IronPDF para software de facturación en España?

FastReport.OpenSource usa licencia MIT/LGPL pero carece de capacidades críticas para cumplimiento regulatorio español (sin firma digital, sin CSS3 completo para VERI*FACTU). iText/iText7 técnicamente puede generar PDFs conformes pero su licencia AGPL obliga a ISVs de software propietario a publicar código fuente — complejidad amplificada bajo el régimen de penalizaciones VeriFactu. IronPDF ofrece capacidades técnicas completas con licenciamiento comercial predecible sin restricciones AGPL.

¿IronPDF facilita el cumplimiento LOPDGDD al migrar desde FastReport?

Sí. IronPDF procesa PDFs completamente on-premise, sin transmitir datos de facturas (NIF, CIF, datos fiscales) a servicios externos. FastReport también procesa localmente, pero al migrar es importante verificar que el nuevo flujo mantiene el procesamiento on-premise de los datos personales supervisados por la AEPD bajo la LOPDGDD. IronPDF soporta Docker/Kubernetes on-premise, manteniendo los datos de contribuyentes dentro del perímetro de la organizació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

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame