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
-
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.
-
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.
-
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.
-
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.
-
Packages fragmentés : plusieurs packages NuGet sont nécessaires pour une fonctionnalité complète (FastReport.OpenSource, FastReport.OpenSource.Export.PdfSimple, etc.).
PDFSimpleExportdans 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. - 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 commercialFastReport.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. SeulFastReport.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
- Technologies Web : Utilisez HTML/CSS, une technologie familière, plutôt que des mises en page propriétaires basées sur des bandes.
- Développement axé sur le code : générer des PDF par programmation sans dépendance à un concepteur visuel
- Package unique : un seul package NuGet inclut toutes les fonctionnalités PDF
- Rendu moderne : Moteur Chromium de dernière génération pour un rendu CSS3 impeccable.
- 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
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
É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
É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"
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
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
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
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
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
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
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)
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())
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
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.

