Passer au contenu du pied de page
VIDéOS

Comment fusionner ou diviser des fichiers PDF en C#

FastReport.NET est une solution de reporting puissante conçue pour l'écosystème .NET, dotée d'un concepteur de rapport visuel et d'une architecture basée sur les bandes pour la création de rapports complexes axés sur les données. Cependant, FastReportprésente des défis importants pour les flux de travail modernes de génération de PDF : une dépendance au concepteur de rapport qui limite le développement en code first, une courbe d'apprentissage abrupte autour des concepts basés sur les bandes (DataBand, PageHeaderBand), un support CSS limité utilisant un formatage propriétaire, une liaison de données complexe avec RegisterData() boilerplate, et des packages NuGet fragmentés nécessitant des installations multiples. Ce guide complet propose un chemin de migration pas à pas de FastReportvers IronPDF, une bibliothèque PDF généraliste qui s'appuie sur les technologies web HTML/CSS pour générer des documents de manière flexible et programmatique.

Pourquoi migrer de FastReportà IronPDF?

La spécialisation de FastReport.NET dans le domaine du reporting crée des frictions pour les équipes de développement qui ont besoin d'une génération PDF polyvalente. Il est essentiel de comprendre ces différences architecturales pour planifier votre migration.

Les défis de FastReport

  1. Dépendance au concepteur de rapports : la création de mises en page complexes nécessite un concepteur visuel ou une connaissance approfondie de la structure des fichiers .frx ; elle ne convient pas aux approches de développement axées sur le code.

  2. Courbe d'apprentissage abrupte : l'architecture basée sur des bandes de FastReport(DataBand, PageHeaderBand, PageFooterBand) nécessite la compréhension de concepts spécifiques aux rapports qui ne sont pas transposables à d'autres technologies.

  3. Prise en charge CSS limitée : le style standard du Web n'est pas pris en charge nativement ; le stylisme est réalisé à l'aide du format propriétaire de FastReportplutôt qu'à l'aide des feuilles de style CSS habituelles.

  4. Liaison de données complexe : les connexions RegisterData() et DataSource ajoutent du code répétitif pour les scénarios de génération de PDF simples.

  5. Packages fragmentés : plusieurs packages NuGet sont nécessaires pour une fonctionnalité complète (FastReport.OpenSource, FastReport.OpenSource.Export.PdfSimple, etc.). PDFSimpleExport dans l'édition OpenSource rasterise les pages, ainsi les PDF générés contiennent des images de texte plutôt que du texte sélectionnable.

  6. Complexité de la licence : L'édition OpenSource (MIT) fournit un substitut de PDF basé sur l'image via PDFSimpleExport. L'export PDF avec texte sélectionnable, le chiffrement, la signature numérique et le PDF/A nécessitent le paquet commercial FastReport.Net, qui est publié sur le flux privé de NuGet de FastReport(https://nuget.fast-report.com/api/v3/index.json), et non sur nuget.org. Seul FastReport.Net.Demo (limité en pages, avec filigrane) est sur nuget.org.

Comparaison des architectures

Aspect FastReport IronPDF
Approche de conception Concepteur visuel + fichiers .frx HTML/CSS (technologies web)
Courbe d'apprentissage Steep (concepts basés sur des groupes) Douceur (connaissances en HTML/CSS)
Liaison de données RegisterData(), DataBand Interpolation de chaînes, Razor, templating
Support CSS Limité CSS3 complet avec Flexbox/Grid
Modèle de paquet Plusieurs paquets Paquet unique (toutes les fonctionnalités)
Moteur de rendu Moteur de rapport personnalisé ; L'export PDF OpenSource rastérise Chromium intégré
Manipulation de PDF Axé sur l'exportation Complet (fusion, division, sécurité, formulaires)
Moderne .NET .NET Framework 4.6.2+ / .NET 6+ .NET Framework 4.6.2+ / .NET 6/7/8/9+

Avantages principaux de la migration

  1. Technologies Web : Utilisez HTML/CSS, une technologie familière, plutôt que des mises en page propriétaires basées sur des bandes.
  2. Développement axé sur le code : générer des PDF par programmation sans dépendance à un concepteur visuel
  3. Package unique : un seul package NuGet inclut toutes les fonctionnalités PDF
  4. Rendu moderne : Moteur Chromium de dernière génération pour un rendu CSS3 impeccable.
  5. Manipulation complète des PDF : fusion, fractionnement, sécurité, formulaires – et pas seulement exportation

Préparation de la migration

Prérequis

Assurez-vous que votre environnement répond à ces exigences :

  • .NET Framework 4.6.2+ ou .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ ou VS Code avec l'extension C#
  • Accès au Package Manager NuGet
  • Clé de licence IronPDF(essai gratuit disponible sur ironpdf.com)

Audit de l'utilisation de FastReport

Exécutez ces commandes dans votre répertoire de solutions pour identifier toutes les références à 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

Documentez vos modèles de rapport

Avant la migration, cataloguez tous les fichiers .frx et leurs utilisations :

  • Nom et objectif du rapport
  • Sources de données utilisées
  • Configuration des en-têtes/pieds de page
  • Exigences en matière de numérotation des pages
  • Formatage ou style particulier

Comprendre le changement de paradigme

Le changement le plus important lors de la migration de FastReportvers IronPDF est l'approche fondamentale de la conception. FastReportutilise un design visuel basé sur des bandes avec des fichiers modèles .frx et des concepts propriétaires tels que DataBand, PageHeaderBand et RegisterData().IronPDF utilise les technologies HTML/CSS-web que la plupart des développeurs connaissent déjà.

Cela signifie qu'il faut convertir les configurations des bandes FastReporten modèles HTML, remplacer RegisterData() par une liaison directe des données via une interpolation de chaîne ou des modèles Razor, et transformer PageHeaderBand/PageFooterBand en en-têtes et pieds de page basés sur HTML.

Processus de migration étape par étape

Étape 1 : Mise à jour des paquets NuGet

Supprimez tous les paquets FastReportet installez 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

# Install IronPDF(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

# Install IronPDF(includes all features)
dotnet add package IronPdf
SHELL

Étape 2 : Mise à jour des références aux espaces de noms

Remplacer les espaces de noms FastReportpar 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

Étape 3 : configuration de la licence

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

Référence complète de migration des API

Mappage des classes de base

Classe FastReport Équivalent d'IronPDF
Report ChromePdfRenderer
PDFExport ChromePdfRenderer + SecuritySettings
PDFSimpleExport ChromePdfRenderer
ReportPage HTML <body> ou <div>
TextObject HTML <p>, <span>, <div>
HTMLObject Rendu HTML direct
PageHeaderBand HtmlHeaderFooter
PageFooterBand HtmlHeaderFooter

Mise en correspondance des méthodes

Méthode FastReport Équivalent d'IronPDF
report.Load("template.frx") Fichier ou chaîne de caractères HTML
report.RegisterData(data, "name") Interpolation de chaînes ou Razor
report.Prepare() N/A
report.Export(export, stream) pdf.SaveAs(path)

Conversion de l'espace réservé au numéro de page

FastReport et IronPDF utilisent une syntaxe différente pour les numéros de page :

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

Exemples de migration de code

Conversion HTML en PDF

Cet exemple démontre la différence fondamentale entre l'approche HTMLObject de FastReportet le rendu direct d'IronPDF.

Mise en œuvre de FastReport:

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

class Program
{
    static void Main()
    {
        using (Report report = new Report())
        {
            // FastReportrenders nothing unless objects live on a band that lives on a ReportPage.
            ReportPage page = new ReportPage();
            report.Pages.Add(page);
            page.ReportTitle = new ReportTitleBand { Height = Units.Millimeters * 100 };

            // Create HTML object (FastReport class is HtmlObject)
            HtmlObject htmlObject = new HtmlObject();
            htmlObject.Bounds = new RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 100);
            htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>";
            page.ReportTitle.Objects.Add(htmlObject);

            report.Prepare();

            // PDFSimpleExport rasterizes each page — text is not selectable
            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
// NuGet: Install-Package FastReport.OpenSource
//        Install-Package FastReport.OpenSource.Export.PdfSimple
using FastReport;
using FastReport.Export.PdfSimple;
using System.Drawing;
using System.IO;

class Program
{
    static void Main()
    {
        using (Report report = new Report())
        {
            // FastReportrenders nothing unless objects live on a band that lives on a ReportPage.
            ReportPage page = new ReportPage();
            report.Pages.Add(page);
            page.ReportTitle = new ReportTitleBand { Height = Units.Millimeters * 100 };

            // Create HTML object (FastReport class is HtmlObject)
            HtmlObject htmlObject = new HtmlObject();
            htmlObject.Bounds = new RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 100);
            htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>";
            page.ReportTitle.Objects.Add(htmlObject);

            report.Prepare();

            // PDFSimpleExport rasterizes each page — text is not selectable
            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.Drawing
Imports System.IO

Module Program
    Sub Main()
        Using report As New Report()
            ' FastReportrenders nothing unless objects live on a band that lives on a ReportPage.
            Dim page As New ReportPage()
            report.Pages.Add(page)
            page.ReportTitle = New ReportTitleBand With {.Height = Units.Millimeters * 100}

            ' Create HTML object (FastReport class is HtmlObject)
            Dim htmlObject As New HtmlObject()
            htmlObject.Bounds = New RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 100)
            htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>"
            page.ReportTitle.Objects.Add(htmlObject)

            report.Prepare()

            ' PDFSimpleExport rasterizes each page — text is not selectable
            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 Module
$vbLabelText   $csharpLabel

Mise en œuvre d'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 nécessite la création d'un objet Report, l'attachement d'un ReportPage et d'un ReportTitleBand, le placement d'un HtmlObject sur la bande avec des limites explicites, la préparation du rapport, et l'exportation via le flux. PDFSimpleExport rasterise la sortie, de sorte que le PDF résultant contient des images de texte plutôt que du texte sélectionnable.IronPDF accomplit le même résultat en trois lignes avec un rendu HTML direct et une sortie de texte sélectionnable. Pour plus d'options, consultez la documentation HTML vers PDF.

Conversion d'URL en PDF

Cet exemple met en évidence le fait que FastReportnécessite un téléchargement HTML manuel alors qu'IronPDF gère le rendu des URL de manière native.

Mise en œuvre de FastReport:

// NuGet: Install-Package FastReport.OpenSource
//        Install-Package FastReport.OpenSource.Export.PdfSimple
// FastReporthas no native URL-to-PDF. You must download the HTML yourself
// and feed it into HtmlObject — which handles only a limited HTML 4 subset,
// no JavaScript and no modern CSS.
using FastReport;
using FastReport.Export.PdfSimple;
using System.Drawing;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        // Download HTML content from URL
        string htmlContent;
        using (var client = new HttpClient())
        {
            htmlContent = await client.GetStringAsync("https://example.com");
        }

        using (Report report = new Report())
        {
            ReportPage page = new ReportPage();
            report.Pages.Add(page);
            page.ReportTitle = new ReportTitleBand { Height = Units.Millimeters * 250 };

            HtmlObject htmlObject = new HtmlObject();
            htmlObject.Bounds = new RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 250);
            htmlObject.Text = htmlContent;
            page.ReportTitle.Objects.Add(htmlObject);

            report.Prepare();

            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("webpage.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
// NuGet: Install-Package FastReport.OpenSource
//        Install-Package FastReport.OpenSource.Export.PdfSimple
// FastReporthas no native URL-to-PDF. You must download the HTML yourself
// and feed it into HtmlObject — which handles only a limited HTML 4 subset,
// no JavaScript and no modern CSS.
using FastReport;
using FastReport.Export.PdfSimple;
using System.Drawing;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        // Download HTML content from URL
        string htmlContent;
        using (var client = new HttpClient())
        {
            htmlContent = await client.GetStringAsync("https://example.com");
        }

        using (Report report = new Report())
        {
            ReportPage page = new ReportPage();
            report.Pages.Add(page);
            page.ReportTitle = new ReportTitleBand { Height = Units.Millimeters * 250 };

            HtmlObject htmlObject = new HtmlObject();
            htmlObject.Bounds = new RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 250);
            htmlObject.Text = htmlContent;
            page.ReportTitle.Objects.Add(htmlObject);

            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.Drawing
Imports System.IO
Imports System.Net.Http
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        ' Download HTML content from URL
        Dim htmlContent As String
        Using client As New HttpClient()
            htmlContent = Await client.GetStringAsync("https://example.com")
        End Using

        Using report As New Report()
            Dim page As New ReportPage()
            report.Pages.Add(page)
            page.ReportTitle = New ReportTitleBand With {.Height = Units.Millimeters * 250}

            Dim htmlObject As New HtmlObject()
            htmlObject.Bounds = New RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 250)
            htmlObject.Text = htmlContent
            page.ReportTitle.Objects.Add(htmlObject)

            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 Function
End Module
$vbLabelText   $csharpLabel

Mise en œuvre d'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 n'a pas de fonction native pour URL en PDF — vous téléchargez vous-même le HTML avec HttpClient, l'intégrez dans un HtmlObject sur une bande, et exportez. HtmlObject ne gère qu'un sous-ensemble limité de HTML 4 sans exécution de JavaScript et sans CSS moderne, et PDFSimpleExport rasterise la sortie. IronPDF's RenderUrlAsPdf rend directement la page web en direct avec une exécution complète de JavaScript en utilisant le moteur Chromium intégré. Pour plus d'options, voir la documentation URL en PDF.

En-têtes et pieds de page avec numéros de page

Cet exemple montre la différence de complexité entre le système de FastReportbasé sur les bandes et l'approche d'IronPDF basée sur le HTML.

Mise en œuvre de FastReport:

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

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

            // Cast to ReportPage (Report.Pages can hold dialog pages too)
            ReportPage page = report.Pages[0] as ReportPage;

            // Page header — assigned to the band slot on the page
            page.PageHeader = new PageHeaderBand { Height = Units.Millimeters * 15 };
            TextObject headerText = new TextObject
            {
                Bounds = new RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 10),
                Text = "Document Header",
                HorzAlign = HorzAlign.Center
            };
            page.PageHeader.Objects.Add(headerText);

            // Page footer with FastReportpage tokens [Page] and [TotalPages]
            page.PageFooter = new PageFooterBand { Height = Units.Millimeters * 15 };
            TextObject footerText = new TextObject
            {
                Bounds = new RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 10),
                Text = "Page [Page] of [TotalPages]",
                HorzAlign = HorzAlign.Right
            };
            page.PageFooter.Objects.Add(footerText);

            report.Prepare();

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

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

            // Cast to ReportPage (Report.Pages can hold dialog pages too)
            ReportPage page = report.Pages[0] as ReportPage;

            // Page header — assigned to the band slot on the page
            page.PageHeader = new PageHeaderBand { Height = Units.Millimeters * 15 };
            TextObject headerText = new TextObject
            {
                Bounds = new RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 10),
                Text = "Document Header",
                HorzAlign = HorzAlign.Center
            };
            page.PageHeader.Objects.Add(headerText);

            // Page footer with FastReportpage tokens [Page] and [TotalPages]
            page.PageFooter = new PageFooterBand { Height = Units.Millimeters * 15 };
            TextObject footerText = new TextObject
            {
                Bounds = new RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 10),
                Text = "Page [Page] of [TotalPages]",
                HorzAlign = HorzAlign.Right
            };
            page.PageFooter.Objects.Add(footerText);

            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.Drawing
Imports System.IO

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

            ' Cast to ReportPage (Report.Pages can hold dialog pages too)
            Dim page As ReportPage = TryCast(report.Pages(0), ReportPage)

            ' Page header — assigned to the band slot on the page
            page.PageHeader = New PageHeaderBand With {.Height = Units.Millimeters * 15}
            Dim headerText As New TextObject With {
                .Bounds = New RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 10),
                .Text = "Document Header",
                .HorzAlign = HorzAlign.Center
            }
            page.PageHeader.Objects.Add(headerText)

            ' Page footer with FastReportpage tokens [Page] and [TotalPages]
            page.PageFooter = New PageFooterBand With {.Height = Units.Millimeters * 15}
            Dim footerText As New TextObject With {
                .Bounds = New RectangleF(0, 0, Units.Millimeters * 190, Units.Millimeters * 10),
                .Text = "Page [Page] of [TotalPages]",
                .HorzAlign = HorzAlign.Right
            }
            page.PageFooter.Objects.Add(footerText)

            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 Module
$vbLabelText   $csharpLabel

Mise en œuvre d'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 nécessite le chargement d'un modèle, en convertissant Pages[0] en ReportPage, en assignant des instances de bande d'en-tête et de pied de page aux emplacements PageHeader / PageFooter de la page, puis en attachant des instances de TextObject avec des Bounds explicites à chaque bande.IronPDF utilise HtmlHeaderFooter avec des fragments HTML simples — vous pouvez styliser les en-têtes et les pieds de page avec du CSS complet. Notez le changement de syntaxe du numéro de page : [Page] devient {page}, et [TotalPages] devient {total-pages}. Pour plus d'options, consultez la documentation sur les en-têtes et les pieds de page.

Notes de migration essentielles

Pas de fichiers modèles .frx

Les modèles FastReport(.frx) ne fonctionneront pas avec IronPDF. Convertissez vos mises en page en modèles 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

Conversion de la liaison de données

Remplacer RegisterData() par une génération HTML directe :

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

Paramètres de sécurité

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

Pour connaître toutes les options de sécurité, consultez la documentation sur le chiffrement .

Liste de contrôle post-migration

Après avoir effectué la migration du code, vérifiez les points suivants :

  • Comparaison visuelle des PDF générés
  • Vérifier les en-têtes/pieds de page et les numéros de page
  • Tester avec des volumes de données de production
  • Valider les fonctions de sécurité/chiffrement
  • Évaluation comparative des performances
  • Supprimer les fichiers de modèle .frx inutilisés
  • Supprimer le code lié à FastReport
  • Mise à jour de la documentation

Ressources supplémentaires


La migration de FastReportvers IronPDF élimine la dépendance au concepteur visuel, la courbe d'apprentissage par bande et le modèle de package fragmenté. La transition vers la génération de PDF basée sur HTML/CSS exploite des technologies web familières tout en offrant des fonctionnalités complètes de manipulation de PDF - fusion, division, sécurité et formulaires - dans un seul et même package.

Veuillez noterFastReport est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé ou parrainé par Fast Reports. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi