跳至頁尾內容
移民指南

如何在 C# 中將 FastReport 遷移到 IronPDF

FastReport.NET 是一個功能強大的報表解決方案,專為 .NET 生態系統而構建,具有可視化報表設計器和基於帶狀結構的架構,用於創建複雜的資料驅動型報表。 然而,FastReport 為現代 PDF 生成工作流程帶來了重大挑戰:報表設計器依賴性限制了程式碼優先開發,基於帶區的概念(DataBand、PageHeaderBand)學習曲線陡峭,使用專有格式的 CSS 支援有限,使用 RegisterData() 樣板程式碼進行複雜的資料綁定,以及需要多次安裝的碎片化 NuGet 套件。 本綜合指南提供了從 快速報告 到 IronPDF 的逐步遷移路徑——IronPDF 是一個通用 PDF 庫,它利用 HTML/CSS 網路技術實現靈活的程序化文件生成。

為什麼要從 快速報告 遷移到 IronPDF?

FastReport.NET 專注於報表功能,這給需要產生功能全面的 PDF 檔案的開發團隊帶來了不便。 了解這些架構差異對於規劃遷移至關重要。

FastReport面臨的挑戰

1.報表設計器依賴性:建立複雜的佈局需要視覺化設計器或對 .frx 檔案結構有深入的了解-不適合程式碼優先的開發方法。

2.學習曲線陡峭: 快速報告 基於帶狀結構的架構(DataBand、PageHeaderBand、PageFooterBand)需要理解報表特有的概念,這些概念無法轉移到其他技術。

  1. CSS 支援有限:不支援 Web 標準樣式; 樣式是透過 快速報告 的專有格式而不是我們熟悉的 CSS 來實現的。

4.複雜的資料綁定: RegisterData() 和 DataSource 連接為簡單的 PDF 生成場景增加了樣板程式碼。

5.分散的套件:需要多個 NuGet 套件才能實現完整功能(FastReport.OpenSource、FastReport.OpenSource.Export.PdfSimple 等)。

6.授權複雜性:開源版本功能有限; PDF加密、數位簽章和字型嵌入需要商業版本。

架構比較

方面快速報告IronPDF
設計方法視覺設計師 + .frx 文件HTML/CSS(網頁技術)
學習曲線陡峭(基於帶狀的概念)溫柔(具備HTML/CSS知識)
資料綁定RegisterData(),資料帶字串插值、Razor、模板
CSS 支援有限的完全基於 CSS3 的 Flexbox/Grid 佈局
包裝模型多個包裹單包(所有功能)
渲染引擎風俗最新鉻
PDF 處理出口導向型完整(合併、分割、安全、表單)
近代 .NET.NET Standard 2.0.NET 6/7/8/9+ 原生

遷移的主要優勢

  1. Web技術:使用熟悉的HTML/CSS,而不是專有的基於頻段的佈局 2.程式碼優先開發:無需依賴視覺化設計器即可透過程式設計產生 PDF。 3.單一套件:一個 NuGet 套件包含所有 PDF 功能 4.現代渲染:採用最新的 Chromium 引擎,實現像素級精確的 CSS3 輸出 5.完整的 PDF 操作:合併、分割、安全設定、表單-不只是匯出

遷移前準備

先決條件

請確保您的環境符合以下要求:

  • .NET Framework 4.6.2+ 或 .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ 或帶有 C# 擴充功能的 VS Code
  • NuGet 套件管理器訪問
  • IronPDF 許可證金鑰(可在ironpdf.com提供免費試用)

審核 快速報告 使用情況

在解決方案目錄中執行以下命令,以識別所有 快速報告 參考:

# Find all 快速報告 references
grep -r "FastReport\|\.frx\|PDFExport\|PDFSimpleExport\|DataBand\|RegisterData" --include="*.cs" --include="*.csproj" .

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

# Check NuGet packages
dotnet list package | grep FastReport
SHELL

記錄您的報告模板

遷移前,請將所有.frx檔案及其用途進行分類:

報告名稱和目的

  • 使用的資料來源
  • 頁首/頁尾配置
  • 頁碼要求
  • 特殊格式或樣式

理解範式轉移

從 快速報告 遷移到 IronPDF 時,最顯著的變化是其根本的設計方法。 快速報告 使用基於帶狀的視覺設計,帶有.frx模板檔案和專有概念,如 DataBand、PageHeaderBand 和 RegisterData()。 IronPDF 使用 HTML/CSS——大多數開發人員已經熟悉的網路技術。

這意味著將 快速報告 帶配置轉換為 HTML 模板,用字串插值或 Razor 模板進行直接資料綁定來取代 RegisterData(),並將 PageHeaderBand/PageFooterBand 轉換為基於 HTML 的頁首和頁尾。

逐步遷移過程

步驟 1:更新 NuGet 套件

移除所有 快速報告 軟體包,然後安裝 IronPDF:

# Remove all 快速報告 packages
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 快速報告 packages
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

步驟 2:更新命名空間引用

將 快速報告 命名空間替換為 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

步驟 3:設定許可證

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

完整的 API 遷移參考

核心類別映射

快速報表類IronPDF當量筆記
ReportChromePdfRenderer主渲染類
PDFExportChromePdfRenderer + SecuritySettings渲染 + 安全性
PDFSimpleExportChromePdfRenderer簡化出口
ReportPageHTML或者
頁面內容
TextObjectHTML<p><span><div>文字元素
HTMLObject直接 HTML 渲染HTML 內容
PageHeaderBandHtmlHeaderFooter頁面標題
PageFooterBandHtmlHeaderFooter頁面頁腳

方法映射

快速報告方法IronPDF當量筆記
report.Load("template.frx")HTML範本檔案或字串使用 HTML/CSS 進行佈局
report.RegisterData(data, "name")字串插值或 Razor直接資料綁定
report.Prepare()不適用無需(直接渲染)
report.Export(export, stream)pdf.SaveAs(path)簡化出口

頁碼佔位符轉換

FastReport 和 IronPDF 使用不同的佔位符語法來表示頁碼:

快速報告IronPDF
[Page]{page}
[TotalPages]{total-pages}

程式碼遷移範例

HTML 轉 PDF

此範例展示了 快速報告 的 HTMLObject 方法與 IronPDF 的直接渲染之間的根本差異。

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

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 需要建立一個 Report 物件、一個固定尺寸的 HTMLObject、準備報表,並透過串流匯出——只需七行使用 using 語句的程式碼。 IronPDF 僅用三行程式碼即可透過直接 HTML 渲染實現相同的結果。 更多選項,請參閱HTML 轉 PDF 文件

URL 轉 PDF

此範例突顯了 快速報告 需要手動下載 HTML,而 IronPDF 則原生支援 URL 渲染。

FastReport 實作:

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

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

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

            report.Prepare();

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

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

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

            report.Prepare();

            PDFSimpleExport pdfExport = new PDFSimpleExport();
            using (FileStream fs = new FileStream("webpage.pdf", FileMode.Create))
            {
                report.Export(pdfExport, fs);
            }
        }
    }
}
$vbLabelText   $csharpLabel

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 需要使用 WebClient 手動下載 HTML 內容,然後將其嵌入到具有固定尺寸的 HTMLObject 中—這種變通方法無法正確處理 JavaScript 執行或相對資源 URL。 IronPDF 的RenderUrlAsPdf使用 Chromium 核心直接渲染即時網頁,並完整執行 JavaScript 程式碼。更多選項,請參閱URL 轉 PDF 文件

附頁碼的頁首和頁尾

這個範例說明了 快速報告 基於帶狀結構的系統與 IronPDF 基於 HTML 的方法之間的複雜性差異。

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

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 需要載入範本檔案、轉換頁面物件、建立帶區物件、設定高度、建立文字物件、新增至帶區集合以及將帶區新增至頁面。 IronPDF 使用HtmlHeaderFooter和簡單的 HTML 片段-您可以使用完整的 CSS 設定頁首和頁尾樣式。 請注意頁碼語法的變化: [Page]變成{page}[TotalPages]變成{total-pages} 。 更多選項請參閱頁首和頁尾文件

關鍵遷移說明

沒有 .frx 範本文件

FastReport 範本(.frx)無法與 IronPDF 一起使用。 將您的頁面轉換為 HTML/CSS 範本:

// 快速報告 - loads .frx template
report.Load("report.frx");

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

// IronPDF - use HTML template
var html = File.ReadAllText("template.html");
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

資料綁定轉換

將 RegisterData() 替換為直接產生 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

安全設定

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

有關全面的安全性選項,請參閱加密文件

遷移後檢查清單

程式碼遷移完成後,請驗證以下內容:

  • 產生PDF檔案的可視化比較
  • 核對頁首/頁尾和頁碼
  • 使用生產資料量進行測試
  • 驗證安全性/加密功能
  • 性能基準測試
  • 刪除未使用的 .frx 範本文件
  • 刪除與 快速報告 相關的程式碼
  • 更新文檔

讓您的 PDF 基礎架構面向未來

隨著 .NET 10 即將到來,C# 14 也引入了新的語言特性,選擇一個採用現代 Web 技術的 PDF 函式庫可以確保長期的可維護性。 IronPDF 的 HTML/CSS 方法意味著您的範本利用了 Web 開發中使用的相同技能——沒有無法轉移到其他技術的專有基於頻段的概念。 隨著專案延至 2025 年和 2026 年,使用標準 HTML 範本以及 CSS3 功能(如 Flexbox 和 Grid)提供了 快速報告 專有格式無法比擬的設計彈性。

其他資源

IronPDF 文件


從 快速報告 遷移到 IronPDF 可以消除對視覺化設計器的依賴、基於頻段的學習曲線以及碎片化的軟體包模型。 向基於 HTML/CSS 的 PDF 生成過渡,利用了熟悉的 Web 技術,同時在一個軟體包中提供了完整的 PDF 操作功能——合併、分割、安全性和表單。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。