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

Cómo migrar de FastReport a IronPDF en C#

FastReport.NET es una potente solución de generación de informes creada para el ecosistema .NET, que cuenta con un diseñador de informes visual y una arquitectura basada en bandas para crear informes complejos basados en datos. Sin embargo, FastReportpresenta desafíos significativos para los flujos de trabajo de generación de PDF modernos: dependencia del diseñador de informes que limita el desarrollo basado en el código, una curva de aprendizaje pronunciada en torno a los conceptos basados en bandas (DataBand, PageHeaderBand), compatibilidad limitada con CSS mediante formato propietario, vinculación de datos compleja con la repetición de RegisterData() y paquetes NuGet fragmentados que requieren varias instalaciones. Esta completa guía proporciona una ruta de migración paso a paso de FastReporta IronPDF, una biblioteca PDF de uso general que aprovecha las tecnologías web HTML/CSS para la generación flexible y programática de documentos.

¿Por qué migrar de FastReporta 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. Comprender estas diferencias arquitectónicas es esencial para planificar la migración.

Los retos de FastReport

  1. Dependencia del diseñador de informes: la creación de diseños complejos requiere un diseñador visual o un conocimiento profundo de la estructura de archivos .frx, lo que no es adecuado para enfoques de desarrollo que priorizan el código.

  2. Curva de aprendizaje pronunciada: la arquitectura basada en bandas de FastReport(DataBand, PageHeaderBand, PageFooterBand) requiere comprender conceptos específicos del informe que no se pueden transferir a otras tecnologías.

  3. Compatibilidad limitada con CSS: el estilo estándar web no es compatible de forma nativa; la estilización se realiza mediante el formato propietario de FastReporten lugar del conocido CSS.

  4. Vinculación de datos complejos: las conexiones RegisterData() y DataSource agregan código repetitivo para escenarios de generación de PDF simples.

  5. Paquetes fragmentados: se necesitan varios paquetes NuGet para una funcionalidad completa (FastReport.OpenSource, FastReport.OpenSource.Export.PdfSimple, etc.).

  6. Complejidad de la licencia: la versión de código abierto tiene funciones limitadas; se requiere una versión comercial para el cifrado de PDF, la firma digital y la incrustación de fuentes.

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

  1. Tecnologías web: utilice HTML/CSS familiares en lugar de diseños propietarios basados en bandas
  2. Desarrollo basado en código: genere archivos PDF mediante programación sin depender del diseñador visual
  3. Paquete único: un paquete NuGet incluye todas las funciones de PDF
  4. Renderizado moderno: el último motor Chromium para una salida CSS3 con píxeles perfectos
  5. Manipulación completa de PDF: fusión, división, seguridad, formularios, no solo exportación

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

Referencia completa de migración de API

Mapeo de clases principales

Clase FastReport Equivalente de IronPDF Notas
Informe <código>ChromePdfRenderer` Clase principal de renderización
<código>PDFExport <código>ChromePdfRenderer + <código>SecuritySettings Renderización + seguridad
<código>PDFSimpleExport <código>ChromePdfRenderer Exportación simplificada
Página de informe HTML <body> o <div> Contenido de la página
Objeto de texto HTML <p>, <span>, <div> Elementos de texto
<código>HTMLObject` Representación directa en HTML Contenido HTML
Banda de cabecera de página <código>HtmlHeaderFooter` Encabezados de página
<código>BandaPieDePágina <código>HtmlHeaderFooter Pie de página

Métodos

Método FastReport Equivalente de IronPDF Notas
<código>report.Load("template.frx") Archivo o cadena de plantilla HTML Utilizar HTML/CSS para la maquetación
<código>report.RegisterData(data, "name") Interpolación de cadenas o Razor Vinculación directa de datos
<código>report.Prepare() N/A No es necesario (traducción directa)
<código>report.Export(export, stream) <código>pdf.SaveAs(ruta) Exportación simplificada

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
[Página] {page}
[TotalPages] {total de páginas}

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);
            }
        }
    }
}
$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");
    }
}
$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 Contenido HTMLfrom 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 Contenido HTMLfrom 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);
            }
        }
    }
}
$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");
    }
}
$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 RenderUrlAsPdf deIronPDFrenderiza directamente la página web en vivo con ejecución completa de JavaScript utilizando el motor Chromium. Para más opciones, consulte la documentación de URL a 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);
            }
        }
    }
}
$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");
    }
}
$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 <código>HtmlHeaderFootercon fragmentos de HTML sencillos; puede aplicar estilo a los encabezados y pies de página con CSS completo. Tenga en cuenta el cambio de sintaxis del número de página:[Página]se convierte en{página}, y[TotalPáginas]se convierte en{total-páginas}`. 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);
$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());
$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;
$vbLabelText   $csharpLabel

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

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

Proteja su infraestructura PDF

Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características del lenguaje, la elección de una biblioteca PDF que adopte las modernas tecnologías web garantiza su mantenimiento a largo plazo. El enfoque HTML/CSS deIronPDFsignifica que sus plantillas aprovechan las mismas habilidades utilizadas en el desarrollo web, sin conceptos basados en bandas propietarias que no se transfieren a otras tecnologías. A medida que los proyectos se extienden hasta 2025 y 2026, la capacidad de utilizar plantillas HTML estándar con funciones CSS3 como Flexbox y Grid proporciona una flexibilidad de diseño que el formato propietario de FastReportno puede igualar.

Recursos adicionales


La migración de FastReportaIronPDFelimina la dependencia del diseñador visual, la curva de aprendizaje basada en bandas y el modelo de paquetes fragmentados. La transición a la generación de PDF basada en HTML/CSS aprovecha las tecnologías web conocidas a la vez que proporciona funciones completas de manipulación de PDF (fusión, división, seguridad y formularios) en un único paquete.

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