跳至頁尾內容
影片

如何在 C# 中合併或分割 PDF 文件

FastReport.NET 是一款專為 .NET 生態系統而建的強大報告解決方案,具有可視化報告設計器和基於帶狀架構的特性,用於建立複雜的資料驅動報告。 但是,FastReport 為現代 PDF 生成工作流帶來了顯著挑戰:報告設計器的依賴性限制了先編寫程式碼的開發,圍繞帶狀概念(DataBand, PageHeaderBand)的陡峭學習曲線,使用專有格式的有限 CSS 支援、複雜的資料綁定需使用 RegisterData() 樸素模板,以及需多次安裝的零散 NuGet 套件。 此綜合指南提供從FastReport遷移到IronPDF的逐步方法——一個通用的 PDF 程式庫,利用 HTML/CSS 網頁技術來進行靈活的程式化文件生成。

為何從FastReport遷移到 IronPDF?

FastReport.NET 在報告方面的專業化對需要多用途 PDF 生成的開發團隊造成了摩擦。 了解這些架構差異對於規劃您的遷移至關重要。

FastReport的挑戰

  1. 報告設計器依賴:建立複雜佈局需要使用可視化設計器或對 .frx 文件結構有深入知識——不適合先編寫程式碼的開發方法。

  2. 陡峭的學習曲線:FastReport 的基於帶狀架構(DataBand, PageHeaderBand, PageFooterBand)需了解報告特定概念,這些概念無法轉移到其他技術中。

  3. 有限的 CSS 支援:網頁標準樣式不被原生支持; 樣式是通過FastReport的專有格式而非熟悉的 CSS 實現的。

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

  5. 零散的套件:完整功能需要多個 NuGet 套件(FastReport.OpenSource, FastReport.OpenSource.Export.PdfSimple 等)。 在 OpenSource 版本中,PDFSimpleExport 會光柵化頁面,因此輸出 PDF 含有文字圖像而非選擇性文字。

  6. 授權複雜性:開源版本(MIT)通過 PDFSimpleExport 配備了基於圖像的 PDF 當後備方案。 可選擇性文字的 PDF 匯出、加密、數位簽章和 PDF/A 需要商業 FastReport.Net 套件,該套件在FastReport的私有 NuGet 提要上發佈 (https://nuget.fast-report.com/api/v3/index.json),而不是在 nuget.org 上。 只有FastReport.Net.Demo(頁面限制,帶水印)在 nuget.org 上。

架構比較

方面 FastReport IronPDF
設計方法 可視化設計器 + .frx 文件 HTML/CSS(網頁技術)
學習曲線 陡峭的(基於帶狀的概念) 緩和(HTML/CSS知識)
資料綁定 RegisterData(), DataBand 字串插值、Razor、模板
CSS 支援 有限 全部 CSS3 支援,含 Flexbox/Grid
套件模型 多個套件 單一套件(所有功能)
渲染引擎 自定報告引擎;OpenSource PDF 匯出會光柵化 嵌入的Chromium
PDF 操作 以匯出為重點 完整(合併、拆分、安全性、表單)
現代 .NET .NET Framework 4.6.2+ / .NET 6+ .NET Framework 4.6.2+ / .NET 6/7/8/9+

主要遷移利益

  1. 網頁技術:使用熟悉的 HTML/CSS 而非專有的基於帶狀佈局
  2. 程式碼優先開發:程式化生成 PDF,而無需依賴可視化設計器
  3. 單一套件:一個 NuGet 套件包含所有 PDF 功能
  4. 現代渲染:最新的 Chromium 引擎提供完美像素的 CSS3 輸出
  5. 完整的 PDF 操作:合併、拆分、安全性、表單——不僅僅是匯出

遷移前準備

前提條件

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

  • .NET Framework 4.6.2+ or .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+或VS Code與C#擴展
  • NuGet包管理器存取 -IronPDF許可證金鑰(免費試用可在 ironpdf.com 獲得)

審計FastReport的使用

在您的解決方案目錄中運行這些命令以識別所有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

記錄您的報告模板

在遷移之前,編目所有 .frx 文件及其目的:

  • 報告名稱和用途
  • 使用的資料源
  • 頁眉/頁腳配置
  • 頁碼要求
  • 特殊格式或樣式

了解範式轉變

從FastReport遷移到IronPDF時,最顯著的變化是基本的設計方法。FastReport使用帶狀的可視化設計,採用 .frx 模板文件以及像 DataBand, PageHeaderBand 和 RegisterData() 這樣的專有概念。IronPDF使用 HTML/CSS——大多數開發者已經熟悉的網頁技術。

這意味著要將FastReport的帶狀配置轉換為 HTML 模板,用字串插值或 Razor 模板直接進行資料綁定以替換 RegisterData(),並將 PageHeaderBand/PageFooterBand 轉換為基於 HTML 的頁眉和頁腳。

逐步遷移過程

步驟1:更新NuGet包

移除所有FastReport套件並安裝 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

# InstallIronPDF(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

# InstallIronPDF(includes all features)
dotnet add package IronPdf
SHELL

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

將FastReport名稱空間替換為 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

步驟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";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

完整 API 遷移參考

核心類映射

FastReport 類 IronPDF等價
Report ChromePdfRenderer
PDFExport ChromePdfRenderer + SecuritySettings
PDFSimpleExport ChromePdfRenderer
ReportPage HTML <body><div>
TextObject HTML <p>, <span>, <div>
HTMLObject 直接 HTML 渲染
PageHeaderBand HtmlHeaderFooter
PageFooterBand HtmlHeaderFooter

方法映射

FastReport 方法 IronPDF等價
report.Load("template.frx") HTML 模板文件或字串
report.RegisterData(data, "name") 字串插值或 Razor
report.Prepare()
report.Export(export, stream) pdf.SaveAs(path)

頁碼佔位符轉換

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

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

程式碼遷移範例

HTML到PDF轉換

此範例展示了FastReport的 HTMLObject 方法和IronPDF的直接渲染之間的基本區別。

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

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 需要建立一個 Report 物件,附加一個 ReportPage 和一個 ReportTitleBand,在帶狀中放置一個有明確邊界的 HtmlObject,準備報告,並通過流匯出。 PDFSimpleExport 將輸出進行光柵化,因此生成的 PDF 包含文字圖像而不是可選擇的文字。IronPDF用直接 HTML 渲染和可選擇文字輸出三行程式碼即可實現相同效果。 有關更多選項,請參閱HTML轉PDF文件

URL 到 PDF 轉換

此範例突顯了FastReport需要手動下載 HTML,而IronPDF則可以自然地處理 URL 渲染。

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

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 沒有原生的 URL 到 PDF ——您需要使用 HttpClient 自行下載 HTML,將其嵌入在帶狀中的 HtmlObject,然後匯出。 HtmlObject 只能處理有限的 HTML 4 子集,不支持 JavaScript 執行,也不支持現代 CSS,並且 PDFSimpleExport 會光柵化輸出。IronPDF的 RenderUrlAsPdf 使用嵌入的 Chromium 引擎直接渲染現場網頁,支持完整的 JavaScript 執行。更多選項,請參見URL 到 PDF 文件

帶有頁碼的頁眉和頁腳

此範例展示了FastReport的帶狀系統和IronPDF的 HTML 方法之間的複雜性差異。

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

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 需要載入模板,將 Pages[0] 投射為 ReportPage,將頭部和底部的帶狀實例分配給頁面的 PageHeader / PageFooter 插槽,然後將 TextObject 實例與明確的 Bounds 附加到每個帶狀。IronPDF使用 HtmlHeaderFooter 和簡單的 HTML 片段——您可以使用完整的 CSS 樣式化頁眉和頁腳。 注意頁碼語法更改:[Page] 變為 [TotalPages] 變為 {total-pages}。 欲了解更多選項,請參見 頁眉和頁腳文件

關鍵遷移注意事項

無 .frx 模板文件

FastReport 模板 (.frx) 將無法與IronPDF一起工作。 將您的佈局轉換為 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

資料綁定轉換

用直接 HTML 生成替換 RegisterData():

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

安全設置

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

欲了解全面的安全選項,請參閱 加密文件

後遷移檢查清單

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

  • 生成的PDF文件的視覺比較
  • 驗證頁眉/頁腳和頁碼
  • 使用生產資料量進行測試
  • 驗證安全/加密功能
  • 性能基準測試
  • 移除未使用的 .frx 模板文件
  • 刪除與FastReport有關的程式碼
  • 更新文件

其他資源


從FastReport到IronPDF的遷移消除了對可視化設計器的依賴,帶狀學習曲線及零散的套件模型。 轉變為基於 HTML/CSS 的 PDF 生成利用熟悉的網頁技術,同時在單個套件中提供完整的 PDF 操作功能——合併、拆分、安全性和表單。

請注意FastReport 是其各自所有者的註冊商標。 本網站與 Fast Reports 無關,亦未獲其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話