Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z FastReport do IronPDF w języku C#

FastReport.NET to potężne rozwiązanie do tworzenia raportów stworzone dla ekosystemu .NET, wyposażone w wizualny projektant raportów i architekturę opartą na pasmach do tworzenia złożonych raportów opartych na danych. JednakFastReportstwarza poważne wyzwania dla nowoczesnych procesów tworzenia plików PDF: zależność od projektanta raportów, która ogranicza programowanie oparte na kodzie, stroma krzywa uczenia się w zakresie koncepcji opartych na paskach (DataBand, PageHeaderBand), ograniczona obsługa CSS przy użyciu zastrzeżonego formatowania, złożone powiązanie danych z szablonem RegisterData() oraz fragmentaryczne pakiety NuGet wymagające wielu instalacji. Ten kompleksowy przewodnik przedstawia krok po kroku ścieżkę migracji zFastReportdo IronPDF— uniwersalnej biblioteki PDF, która wykorzystuje technologie internetowe HTML/CSS do elastycznego, programowego generowania dokumentów.

Dlaczego warto przejść zFastReportna IronPDF?

Specjalizacja FastReport.NET w tworzeniu raportów stanowi przeszkodę dla zespołów programistycznych potrzebujących wszechstronnego generowania plików PDF. Zrozumienie tych różnic architektonicznych jest niezbędne do zaplanowania migracji.

Wyzwania związane z FastReport

  1. Zależność od projektanta raportów: Tworzenie złożonych układów wymaga użycia wizualnego projektanta lub dogłębnej znajomości struktury plików .frx — nie nadaje się do podejść programistycznych opartych na kodzie.

  2. Stroma krzywa uczenia się: Architektura oparta na pasmach wFastReport(DataBand, PageHeaderBand, PageFooterBand) wymaga zrozumienia koncepcji specyficznych dla raportów, które nie mają zastosowania w innych technologiach.

  3. Ograniczona obsługa CSS: Stylizacja zgodna ze standardami internetowymi nie jest obsługiwana natywnie; Stylizacja odbywa się za pomocą własnego formatu FastReport, a nie znanego CSS.

  4. Złożone powiązania danych: Metody RegisterData() i połączenia DataSource dodają szablonowy kod w prostych scenariuszach generowania plików PDF.

  5. Pakiety fragmentaryczne: Do pełnej funkcjonalności potrzebnych jest wiele pakietów NuGet (FastReport.OpenSource, FastReport.OpenSource.Export.PdfSimple itp.). PDFSimpleExport w edycji OpenSource rastaryzuje strony, więc wynikowe pliki PDF zawierają obrazy tekstu zamiast pozwalającego na wybór tekstu.

  6. Złożoność licencjonowania: Edycja OpenSource (MIT) dostarcza alternatywę obrazkową dla PDF poprzez PDFSimpleExport. Eksport PDF z możliwością wyboru tekstu, szyfrowanie, podpisywanie cyfrowe i PDF/A wymagają komercyjnego pakietu FastReport.Net, który jest publikowany w prywatnym kanale NuGetFastReport(https://nuget.fast-report.com/api/v3/index.json), a nie na nuget.org. Tylko FastReport.Net.Demo (ograniczony do stron, z wodnym znakiem) jest dostępny na nuget.org.

Porównanie architektur

Aspekt FastReport IronPDF
Podejście projektowe Projektant wizualny + pliki .frx HTML/CSS (technologie internetowe)
Krzywa uczenia się Steep (koncepcje oparte na pasmach) Łagodny (znajomość HTML/CSS)
Powiązanie danych RegisterData(), DataBand Interpolacja ciągów znaków, Razor, szablony
Obsługa CSS Ograniczone Pełna obsługa CSS3 z Flexbox/Grid
Model pakietu Wiele pakietów Pojedynczy pakiet (wszystkie funkcje)
Silnik renderujący Niestandardowy silnik raportów; Eksport OpenSource PDF rastrowani Osadzone Chromium
Manipulacja plikami PDF Skupienie na eksporcie Pełne (scałanie, dzielenie, bezpieczeństwo, formularze)
Nowoczesny .NET .NET Framework 4.6.2+ / .NET 6+ .NET Framework 4.6.2+ / .NET 6/7/8/9+

Kluczowe korzyści z migracji

  1. Technologie internetowe: Należy stosować znane HTML/CSS zamiast zastrzeżonych układów opartych na paskach
  2. Tworzenie oprogramowania metodą "Code-First": Generowanie plików PDF programowo bez zależności od wizualnego projektanta
  3. Pojedynczy pakiet: Jeden pakiet NuGet zawiera wszystkie funkcje PDF
  4. Modern Rendering: najnowszy silnik Chromium zapewniający idealną wyświetlanie CSS3
  5. Pełna obsługa plików PDF: scałanie, dzielenie, zabezpieczenia, formularze — nie tylko eksport

Przygotowania przed migracją

Wymagania wstępne

Upewnij się, że Twoje środowisko spełnia następujące wymagania:

  • .NET Framework 4.6.2+ lub .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ lub VS Code z rozszerzeniem C#
  • Dostęp do menedżera pakietów NuGet
  • Klucz licencyjny IronPDF(bezpłatna wersja próbna dostępna na stronie ironpdf.com)

Audyt wykorzystania FastReport

Uruchom te polecenia w katalogu rozwiązania, aby zidentyfikować wszystkie odwołania do FastReport:

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

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

# Check NuGet packages
dotnet list package | grep FastReport
SHELL

Dokumentuj swoje szablony raportów

Przed migracją, zinwentaryzuj wszystkie pliki .frx i ich zastosowania:

  • Nazwa i cel raportu
  • Wykorzystane źródła danych
  • Konfiguracja nagłówków/stopek
  • Wymagania dotyczące numeracji stron
  • Specjalne formatowanie lub stylizacja

Zrozumienie zmiany paradygmatu

Najważniejszą zmianą przy migracji zFastReportdo IronPDF jest fundamentalne podejście projektowe.FastReportkorzysta z projektowania wizualnego opartego na pasmach z plikami szablonów .frx i własnymi konceptami jak DataBand, PageHeaderBand i RegisterData().IronPDF wykorzystuje HTML/CSS — technologie internetowe, które większość programistów już zna.

Oznacza to konwersję konfiguracji paskówFastReportna szablony HTML, zastąpienie funkcji RegisterData() bezpośrednim powiązaniem danych poprzez interpolację ciągów znaków lub szablony Razor oraz przekształcenie pasków PageHeaderBand/PageFooterBand w nagłówki i stopki oparte na HTML.

Proces migracji krok po kroku

Krok 1: Zaktualizuj pakiety NuGet

Usuń wszystkie pakietyFastReporti zainstaluj IronPDF:

# Remove allFastReportpackages
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 allFastReportpackages
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

Krok 2: Aktualizacja odniesień do przestrzeni nazw

Zastąp przestrzenie nazwFastReportnazwą 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

Krok 3: Skonfiguruj licencję

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

Kompletna dokumentacja API

Mapowanie klas podstawowych

KlasaFastReport Odpowiednik IronPDF
Report ChromePdfRenderer
PDFExport ChromePdfRenderer + SecuritySettings
PDFSimpleExport ChromePdfRenderer
ReportPage HTML lub
TextObject HTML

, ,

HTMLObject Bezpośrednie renderowanie HTML
PageHeaderBand HtmlHeaderFooter
PageFooterBand HtmlHeaderFooter

Mapowanie metod

MetodaFastReport Odpowiednik IronPDF
report.Load("template.frx") Plik szablonu HTML lub ciąg znaków
report.RegisterData(data, "name") Interpolacja ciągów znaków lub Razor
report.Prepare() Nie dotyczy
report.Export(export, stream) pdf.SaveAs(path)

Konwersja symboli zastępczych numerów stron

FastReport i IronPDF używają różnych składni symboli zastępczych dla numerów stron:

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

Przykłady migracji kodu

Konwersja HTML do PDF

Ten przykład ilustruje zasadniczą różnicę między podejściemFastReportopartym na HTMLObject a bezpośrednim renderowaniem w IronPDF.

Wdrożenie 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()
            ' FastReport renders 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

Wdrożenie 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 wymaga utworzenia obiektu Report, dołączenia ReportPage i ReportTitleBand, umieszczenia HtmlObject na pasmie z określonymi granicami, przygotowania raportu i eksportu przez strumień. PDFSimpleExport rastaryzuje wynik, więc wynikowy PDF zawiera obrazy tekstu zamiast tekstu możliwego do wyboru.IronPDF tak samo osiąga w trzech liniach bezpośrednim renderowaniem HTML i wybieralnym tekstem. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą konwersji HTML do PDF.

Konwersja adresów URL do formatu PDF

Ten przykład pokazuje, żeFastReportwymaga ręcznego pobierania kodu HTML, podczas gdy IronPDF obsługuje renderowanie adresów URL natywnie.

Wdrożenie 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

Wdrożenie 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 nie posiada natywnej funkcji URL-to-PDF — pobierasz samodzielnie HTML za pomocą HttpClient, osadzasz go w HtmlObject na pasmie i eksportujesz. HtmlObject obsługuje tylko ograniczony podzbiór HTML 4, bez wykonania JavaScript i bez nowoczesnych stylów CSS, a PDFSimpleExport rastaryzuje wynik. RenderUrlAsPdfIronPDF bezpośrednio renderuje aktywną stronę internetową z pełną obsługą JavaScript używając wbudowanego silnika Chromium. Więcej opcji znajduje się w dokumentacji URL to PDF.

Nagłówki i stopki z numerami stron

Ten przykład ilustruje różnicę w złożoności między systemem opartym na paskachFastReporta podejściem opartym na HTML w IronPDF.

Wdrożenie 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 withFastReportpage 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 withFastReportpage 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 FastReport page 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

Wdrożenie 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 wymaga załadowania szablonu, rzutowania Pages[0] na ReportPage, przypisania instancji pasm nagłówka i stopki do slotów PageHeader / PageFooter strony, a następnie dołączenia instancji TextObject z określonymi Bounds do każdego z pasm.IronPDF korzysta z HtmlHeaderFooter z prostymi fragmentami HTML — można stylizować nagłówki i stopki pełnym CSS. Zanotuj zmianę składni numeru strony: [Page] staje się {page}, a [TotalPages] staje się {total-pages}. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą nagłówków i stopek.

Ważne uwagi dotyczące migracji

Brak plików szablonów .frx

SzablonyFastReport(.frx) nie będą działać z IronPDF. Przekonwertuj swoje układy na szablony 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

Konwersja powiązania danych

Zastąp RegisterData() bezpośrednim generowaniem kodu 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

Ustawienia zabezpieczeń

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

Aby uzyskać informacje na temat kompleksowych opcji bezpieczeństwa, zapoznaj się z dokumentacją dotyczącą szyfrowania.

Lista kontrolna po migracji

Po zakończeniu migracji kodu sprawdź, czy:

  • Wizualne porównanie wygenerowanych plików PDF
  • Sprawdź nagłówki/stopki i numery stron
  • Testowanie przy użyciu rzeczywistych zbiorów danych
  • Sprawdź funkcje bezpieczeństwa/szyfrowania
  • Testy porównawcze wydajności
  • Usuń nieużywane pliki szablonów .frx
  • Usuń kod związany z FastReport
  • Aktualizacja dokumentacji

Dodatkowe zasoby


Przejście zFastReportna IronPDF eliminuje zależność od wizualnego projektanta, krzywą uczenia się opartą na paskach oraz fragmentaryczny model pakietów. Przejście na generowanie plików PDF w oparciu o HTML/CSS wykorzystuje znane technologie internetowe, zapewniając jednocześnie pełne możliwości manipulacji plikami PDF — scałanie, dzielenie, zabezpieczenia i formularze — w jednym pakiecie.

Zwróć uwagęFastReport to zastrzeżony znak towarowy swojego właściciela. Ta strona nie jest powiązana, zatwierdzona ani sponsorowana przez Fast Reports. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie