IRONSOFTWAREHOME
视频

如何在C#中合并或拆分PDF文件

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

FastReport.NET 是专为 .NET 生态系统打造的强大报告解决方案,具有可视化报告设计器和基于频带的架构,可用于创建复杂的数据驱动型报告。 然而,FastReport 对现代 PDF 生成工作流程提出了重大挑战:报表设计器依赖性限制了代码优先开发,围绕基于带的概念(DataBand、PageHeaderBand)的学习曲线陡峭,使用专有格式的 CSS 支持有限,使用 RegisterData() 模板的复杂数据绑定,以及需要多次安装的零散 NuGet 包。 本综合指南提供了从快速报告逐步迁移到IronPDF的路径--IronPDF 是一种通用 PDF 库,利用 HTML/CSS 网络技术实现灵活的程序化文档生成。

为什么要从快速报告迁移到 IronPDF?

FastReport.NET在报告方面的专业性为需要多功能PDF生成的开发团队带来了摩擦。 了解这些架构差异对于规划迁移至关重要。

###快速报告的挑战

1.**报表设计器依赖性:**创建复杂的布局需要可视化设计器或对 .frx 文件结构有深入的了解——不适合代码优先的开发方法。

2.**学习曲线陡峭:**快速报告基于带状结构的架构(DataBand、PageHeaderBand、PageFooterBand)需要理解报表特有的概念,这些概念无法转移到其他技术中。

  1. **CSS 支持有限:**不支持 Web 标准样式; 样式设计通过快速报告的专有格式完成,而不是熟悉的 CSS。

4.复杂的数据绑定: RegisterData() 和 DataSource 连接为简单的 PDF 生成场景增加了样板代码。

5.**分散的包:**需要多个 NuGet 包才能实现完整功能(FastReport.OpenSource、FastReport.OpenSource.Export.PdfSimple 等)。 PDFSimpleExport 在OpenSource版本中光栅化页面,因此输出的PDF中包含的是文本的图像而不是可选择的文本。

  1. **许可复杂性:**OpenSource版本(MIT)通过PDFSimpleExport提供基于图像的PDF备用。 可选择文本PDF导出、加密、数字签名和PDF/A需要商业的https://nuget.fast-report.com/api/v3/index.json)上,而不是在nuget.org上。 只有FastReport.Net.Demo(页面限制,水印)在nuget.org上。

架构比较

方面快速报告IronPDF
设计方法可视化设计器 + .frx 文件HTML/CSS (网络技术)
学习曲线陡峭(基于波段的概念)温柔(HTML/CSS 知识)
数据绑定注册数据(), 数据带字符串插值、Razor、模板化
CSS支持有限的带有 Flexbox/Grid 的完整 CSS3
软件包模型多个软件包单个软件包(所有功能)
渲染引擎自定义报告引擎;OpenSource PDF 导出光栅化嵌入式 Chromium
PDF 操作注重出口完整(合并、拆分、安全、表单)
现代.NET.NET Framework 4.6.2+ / .NET 6+.NET Framework 4.6.2+ / .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
SHELL

记录您的报告模板

迁移之前,列出所有.frx文件及其用途:

  • 报告名称和目的
  • 使用的数据源
  • 页眉/页脚配置
  • 页码要求
  • 特殊格式或样式

理解范式转变

从快速报告迁移到IronPDF时,最重要的变化是基本设计方法。 FastReport使用基于乐谱的视觉设计,包含.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

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

步骤 3:配置许可证

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

完整的 API 迁移参考

核心类映射

快速报告类IronPDF 同等产品
ReportChromePdfRenderer
PDFExportChromePdfRenderer + SecuritySettings
PDFSimpleExportChromePdfRenderer
ReportPageHTML <body><div>
TextObjectHTML <div>
HTMLObject直接 HTML 渲染
PageHeaderBandHtmlHeaderFooter
PageFooterBandHtmlHeaderFooter

方法映射

快速报告方法IronPDF 同等产品
report.Load("template.frx")HTML 模板文件或字符串
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
//        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())
        {
            //快速报告renders 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);
            }
        }
    }
}
C#

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");
    }
}

FastReport要求创建一个Report对象,附加HtmlObject放在具有显式界限的乐谱上,准备报告,并通过流导出。 PDFSimpleExport将输出光栅化,因此生成的PDF中包含的是文本的图像而不是可选择的文本。 IronPDF通过直接HTML渲染和可选择文本输出在三行中实现相同的结果。 有关更多选项,请参阅 HTML 转 PDF 文档

URL到PDF转换

本示例重点说明了快速报告需要手动下载 HTML,而IronPDF可原生处理 URL 渲染。

FastReport 实现:

// NuGet: Install-Package FastReport.OpenSource
//        Install-Package FastReport.OpenSource.Export.PdfSimple
//快速报告has 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);
            }
        }
    }
}
C#

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");
    }
}

FastReport没有本地的URL到PDF —— 需要您自己用HtmlObject中,然后导出。 HtmlObject 仅处理有限的HTML 4子集,没有JavaScript执行和现代CSS,而PDFSimpleExport将输出光栅化。 IronPDF的RenderUrlAsPdf直接使用嵌入的Chromium引擎渲染实时网页并完整执行JavaScript。欲了解更多选项,请参见URL到PDF文档

带页码的页眉和页脚

本例展示了快速报告基于带状的系统与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 with快速报告page 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);
            }
        }
    }
}
C#

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");
    }
}

FastReport要求加载模板,将PageHeader / TextObject实例到每个乐谱。 IronPDF使用HtmlHeaderFooter与简单的HTML片段——可以用完整的CSS来设置页眉和页脚。 请注意页码语法的更改:[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);

数据绑定转换

用直接生成 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());

安全设置

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

有关全面的安全选项,请参阅加密文档

迁移后核对表

完成代码迁移后,请验证以下内容:

  • 生成PDF文件的可视化比较
  • 核对页眉/页脚和页码
  • 使用生产数据量进行测试
  • 验证安全/加密功能
  • 性能基准测试
  • 删除未使用的 .frx 模板文件
  • 删除与快速报告相关的代码
  • 更新文档

其他资源


从快速报告迁移到IronPDF可以消除可视化设计器依赖性、带状学习曲线和分散的软件包模型。 向基于 HTML/CSS 的 PDF 生成过渡利用了熟悉的网络技术,同时在一个软件包中提供了完整的 PDF 操作功能--合并、分割、安全和表单。

请注意: FastReport是其各自所有者的注册商标。 本网站与Fast Reports没有隶属关系,也未得到其认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户