比較

Telerik Reporting vs IronPDF:技術比較指南

當.NET開發人員需要產生 PDF 文件時,通常會出現兩種突出的解決方案:Telerik Reporting 和IronPDF。 雖然兩者都能產生 PDF 輸出,但它們在文件生成方面代表了截然不同的方法。 本次技術比較將對這兩個函式庫進行分析,以幫助架構師和開發人員為其.NET應用程式做出明智的決策。

了解 Telerik 報表

Telerik Reporting 是一個綜合性的企業報表平台,旨在以 C# 建立詳細的互動式報表。 Telerik 報表 具有將複雜資料集轉換為視覺吸引力格式的強大功能,可與ASP.NET Core應用程式無縫集成,並支援匯出為包括 PDF 在內的多種格式。

該平台擅長以報表為中心的工作流程,提供視覺化設計器、向下鑽取功能和互動式檢視體驗。 然而,這種全面性也帶來了一些團隊應該評估的因素:

-捆綁許可: Telerik 報表 是 DevCraft 套件的一部分,即使您只需要報表功能,也需要購買整個套件。 -報表設計器相依性:需要安裝 Visual Studio 擴充功能和執行時間元件 -基礎設施需求:需要報表服務託管、連接字串和資料來源配置 -專有格式:使用 .trdp.trdx 文件,造成生態系鎖定 -運行時佔用空間:對於看似簡單的 PDF 生成任務而言,部署空間卻很大

了解IronPDF

IronPDF是一個主要用於產生 PDF 的庫,其獨特之處在於能夠直接將 HTML 轉換為 PDF。 IronPDF不使用視覺化設計器來建立報告,而是使用基於 Chromium 的現代引擎來渲染 PDF,該引擎支援完整的 CSS3 和JavaScript執行。

IronPDF的主要特點包括:

  • HTML 轉 PDF:直接從 HTML 檔案、字串或 URL 產生 PDF,利用標準 Web 技術實現文件設計的彈性。 -進階PDF操作:新增書籤、註解、合併文件、分割頁面和應用數位簽名 -整合簡單:無需額外的設計工具或服務基礎架構,即可透過NuGet直接安裝。
  • Chromium渲染:支援現代CSS、 JavaScript和響應式佈局

功能對比

下表列出了 Telerik 報表 和IronPDF在關鍵維度上的技術差異:

特徵 Telerik 報表 IronPDF
主要關注點 建立帶有 PDF 匯出選項的報告 從 HTML 和其他來源產生全面的 PDF 文件
整合範圍 與ASP.NET Core應用程式無縫集成 可以整合到任何.NET應用程式中
設定複雜度 需要安裝報表設計器 簡單的NuGet安裝
定價模式 DevCraft商業套件的一部分 單獨授權,對於獨立生成 PDF 來說更具成本效益
PDF生成 僅限於報告出口 功能齊全,具備高階 PDF 處理功能
目標受眾 需要以報表為中心的解決方案的開發人員 需要靈活的 PDF 生成解決方案的開發人員
資料來源支援 廣泛的資料庫連接 HTML 檔案和其他資源
範本格式 .trdp / .trdx(專有) HTML/CSS/ Razor (標準網頁)
CSS 支援 有限的 完整的 CSS3
JavaScript執行 完整版 ES2024
PDF檔案的URL 否(需手動下載HTML檔) 是的,原生支持
數位簽名 是的
PDF/A 合規性 是的

渲染引擎差異

技術上的關鍵區別在於每個庫如何將內容渲染成 PDF。

Telerik 報告方法

Telerik Reporting 使用其自身針對結構化報表佈局優化的渲染引擎。 內容透過報表項目定義,例如 TableHtmlTextBox,位置以實體單位指定:

// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using System.Collections.Specialized;

class TelerikExample
{
    static void Main()
    {
        var reportSource = new Telerik.Reporting.TypeReportSource();
        var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
        instanceReportSource.ReportDocument = new Telerik.Reporting.Report()
        {
            Items = { new Telerik.Reporting.HtmlTextBox() { Value = "<h1>Hello World</h1><p>Sample HTML content</p>" } }
        };

        var reportProcessor = new ReportProcessor();
        var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);

        using (var fs = new System.IO.FileStream("output.pdf", System.IO.FileMode.Create))
        {
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
        }
    }
}
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using System.Collections.Specialized;

class TelerikExample
{
    static void Main()
    {
        var reportSource = new Telerik.Reporting.TypeReportSource();
        var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
        instanceReportSource.ReportDocument = new Telerik.Reporting.Report()
        {
            Items = { new Telerik.Reporting.HtmlTextBox() { Value = "<h1>Hello World</h1><p>Sample HTML content</p>" } }
        };

        var reportProcessor = new ReportProcessor();
        var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);

        using (var fs = new System.IO.FileStream("output.pdf", System.IO.FileMode.Create))
        {
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
        }
    }
}
Imports Telerik.Reporting
Imports Telerik.Reporting.Processing
Imports System.Collections.Specialized
Imports System.IO

Class TelerikExample
    Shared Sub Main()
        Dim reportSource As New Telerik.Reporting.TypeReportSource()
        Dim instanceReportSource As New Telerik.Reporting.InstanceReportSource()
        instanceReportSource.ReportDocument = New Telerik.Reporting.Report() With {
            .Items = {New Telerik.Reporting.HtmlTextBox() With {.Value = "<h1>Hello World</h1><p>Sample HTML content</p>"}}
        }

        Dim reportProcessor As New ReportProcessor()
        Dim result = reportProcessor.RenderReport("PDF", instanceReportSource, Nothing)

        Using fs As New FileStream("output.pdf", FileMode.Create)
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

這種方法需要了解 Telerik 特有的類別、報表來源和報表處理管道。

IronPDF方法

IronPDF利用基於 Chromium 的渲染引擎,將 HTML 作為 PDF 產生的一等公民。 同樣的HTML程式碼在瀏覽器中渲染後,在PDF中也會產生完全相同的輸出結果:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfExample
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>Sample HTML content</p>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfExample
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>Sample HTML content</p>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class IronPdfExample
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>Sample HTML content</p>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

ChromePdfRenderer類別提供了一個簡化的 API,熟悉 Web 技術的開發人員可以立即採用。 有關 HTML 轉換的詳細指南,請參閱HTML 轉 PDF 教學

URL 轉 PDF

將即時網頁轉換為 PDF 後,可以發現這兩個函式庫之間有顯著的架構差異。

Telerik 報表實施

Telerik Reporting 本身並不支援 URL 到 PDF 的轉換。 開發人員必須手動下載 HTML 內容並將其嵌入到報告中:

// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using System.Net;

class TelerikExample
{
    static void Main()
    {
        string htmlContent;
        using (var client = new WebClient())
        {
            htmlContent = client.DownloadString("https://example.com");
        }

        var report = new Telerik.Reporting.Report();
        var htmlTextBox = new Telerik.Reporting.HtmlTextBox()
        {
            Value = htmlContent
        };
        report.Items.Add(htmlTextBox);

        var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
        instanceReportSource.ReportDocument = report;

        var reportProcessor = new ReportProcessor();
        var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);

        using (var fs = new System.IO.FileStream("webpage.pdf", System.IO.FileMode.Create))
        {
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
        }
    }
}
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using System.Net;

class TelerikExample
{
    static void Main()
    {
        string htmlContent;
        using (var client = new WebClient())
        {
            htmlContent = client.DownloadString("https://example.com");
        }

        var report = new Telerik.Reporting.Report();
        var htmlTextBox = new Telerik.Reporting.HtmlTextBox()
        {
            Value = htmlContent
        };
        report.Items.Add(htmlTextBox);

        var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
        instanceReportSource.ReportDocument = report;

        var reportProcessor = new ReportProcessor();
        var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);

        using (var fs = new System.IO.FileStream("webpage.pdf", System.IO.FileMode.Create))
        {
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
        }
    }
}
Imports Telerik.Reporting
Imports Telerik.Reporting.Processing
Imports System.Net
Imports System.IO

Class TelerikExample
    Shared Sub Main()
        Dim htmlContent As String
        Using client As New WebClient()
            htmlContent = client.DownloadString("https://example.com")
        End Using

        Dim report As New Telerik.Reporting.Report()
        Dim htmlTextBox As New Telerik.Reporting.HtmlTextBox() With {
            .Value = htmlContent
        }
        report.Items.Add(htmlTextBox)

        Dim instanceReportSource As New Telerik.Reporting.InstanceReportSource()
        instanceReportSource.ReportDocument = report

        Dim reportProcessor As New ReportProcessor()
        Dim result = reportProcessor.RenderReport("PDF", instanceReportSource, Nothing)

        Using fs As New FileStream("webpage.pdf", FileMode.Create)
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

這種方法會遺失 CSS 樣式、外部資源和 JavaScript 渲染的內容,因為它只會捕捉原始 HTML。

IronPDF實現

IronPDF提供原生 URL 渲染功能,可在無頭 Chromium 瀏覽器中載入頁面,執行JavaScript並套用所有樣式:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfExample
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfExample
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf
Imports System

Class IronPdfExample
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

RenderUrlAsPdf 方法可擷取完整的渲染頁面,包括動態產生的內容。 對於使用 React、Angular 或 Vue.js 等框架建立的現代 Web 應用程式而言,這種功能至關重要。

頁首、頁尾和頁碼

具有動態頁碼的文件頁首和頁尾是一個常見的需求,但其實現複雜度卻大相逕庭。

Telerik 報表實施

Telerik Reporting 要求以程式設計方式建立頁首和頁尾部分,並明確設定其大小和位置:

// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using Telerik.Reporting.Drawing;

class TelerikExample
{
    static void Main()
    {
        var report = new Telerik.Reporting.Report();

        // Add page header
        var pageHeader = new Telerik.Reporting.PageHeaderSection();
        pageHeader.Height = new Unit(0.5, UnitType.Inch);
        pageHeader.Items.Add(new Telerik.Reporting.TextBox()
        {
            Value = "Document Header",
            Location = new PointU(0, 0),
            Size = new SizeU(new Unit(6, UnitType.Inch), new Unit(0.3, UnitType.Inch))
        });
        report.PageHeaderSection = pageHeader;

        // Add page footer
        var pageFooter = new Telerik.Reporting.PageFooterSection();
        pageFooter.Height = new Unit(0.5, UnitType.Inch);
        pageFooter.Items.Add(new Telerik.Reporting.TextBox()
        {
            Value = "Page {PageNumber} of {PageCount}",
            Location = new PointU(0, 0),
            Size = new SizeU(new Unit(6, UnitType.Inch), new Unit(0.3, UnitType.Inch))
        });
        report.PageFooterSection = pageFooter;

        // Add content
        var htmlTextBox = new Telerik.Reporting.HtmlTextBox()
        {
            Value = "<h1>Report Content</h1><p>This is the main content.</p>"
        };
        report.Items.Add(htmlTextBox);

        var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
        instanceReportSource.ReportDocument = report;

        var reportProcessor = new ReportProcessor();
        var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);

        using (var fs = new System.IO.FileStream("report_with_headers.pdf", System.IO.FileMode.Create))
        {
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
        }
    }
}
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using Telerik.Reporting.Drawing;

class TelerikExample
{
    static void Main()
    {
        var report = new Telerik.Reporting.Report();

        // Add page header
        var pageHeader = new Telerik.Reporting.PageHeaderSection();
        pageHeader.Height = new Unit(0.5, UnitType.Inch);
        pageHeader.Items.Add(new Telerik.Reporting.TextBox()
        {
            Value = "Document Header",
            Location = new PointU(0, 0),
            Size = new SizeU(new Unit(6, UnitType.Inch), new Unit(0.3, UnitType.Inch))
        });
        report.PageHeaderSection = pageHeader;

        // Add page footer
        var pageFooter = new Telerik.Reporting.PageFooterSection();
        pageFooter.Height = new Unit(0.5, UnitType.Inch);
        pageFooter.Items.Add(new Telerik.Reporting.TextBox()
        {
            Value = "Page {PageNumber} of {PageCount}",
            Location = new PointU(0, 0),
            Size = new SizeU(new Unit(6, UnitType.Inch), new Unit(0.3, UnitType.Inch))
        });
        report.PageFooterSection = pageFooter;

        // Add content
        var htmlTextBox = new Telerik.Reporting.HtmlTextBox()
        {
            Value = "<h1>Report Content</h1><p>This is the main content.</p>"
        };
        report.Items.Add(htmlTextBox);

        var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
        instanceReportSource.ReportDocument = report;

        var reportProcessor = new ReportProcessor();
        var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);

        using (var fs = new System.IO.FileStream("report_with_headers.pdf", System.IO.FileMode.Create))
        {
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
        }
    }
}
Imports Telerik.Reporting
Imports Telerik.Reporting.Processing
Imports Telerik.Reporting.Drawing
Imports System.IO

Class TelerikExample
    Shared Sub Main()
        Dim report As New Telerik.Reporting.Report()

        ' Add page header
        Dim pageHeader As New Telerik.Reporting.PageHeaderSection()
        pageHeader.Height = New Unit(0.5, UnitType.Inch)
        pageHeader.Items.Add(New Telerik.Reporting.TextBox() With {
            .Value = "Document Header",
            .Location = New PointU(0, 0),
            .Size = New SizeU(New Unit(6, UnitType.Inch), New Unit(0.3, UnitType.Inch))
        })
        report.PageHeaderSection = pageHeader

        ' Add page footer
        Dim pageFooter As New Telerik.Reporting.PageFooterSection()
        pageFooter.Height = New Unit(0.5, UnitType.Inch)
        pageFooter.Items.Add(New Telerik.Reporting.TextBox() With {
            .Value = "Page {PageNumber} of {PageCount}",
            .Location = New PointU(0, 0),
            .Size = New SizeU(New Unit(6, UnitType.Inch), New Unit(0.3, UnitType.Inch))
        })
        report.PageFooterSection = pageFooter

        ' Add content
        Dim htmlTextBox As New Telerik.Reporting.HtmlTextBox() With {
            .Value = "<h1>Report Content</h1><p>This is the main content.</p>"
        }
        report.Items.Add(htmlTextBox)

        Dim instanceReportSource As New Telerik.Reporting.InstanceReportSource()
        instanceReportSource.ReportDocument = report

        Dim reportProcessor As New ReportProcessor()
        Dim result = reportProcessor.RenderReport("PDF", instanceReportSource, Nothing)

        Using fs As New FileStream("report_with_headers.pdf", FileMode.Create)
            fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF實現

IronPDF使用 HTML 片段作為頁首和頁腳,並內建了用於頁面資訊的佔位符:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class IronPdfExample
{
    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("<h1>Report Content</h1><p>This is the main content.</p>");
        pdf.SaveAs("report_with_headers.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class IronPdfExample
{
    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("<h1>Report Content</h1><p>This is the main content.</p>");
        pdf.SaveAs("report_with_headers.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

Class IronPdfExample
    Shared Sub Main()
        Dim renderer As 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("<h1>Report Content</h1><p>This is the main content.</p>")
        pdf.SaveAs("report_with_headers.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

HtmlHeaderFooter 類別接受標準的 HTML 和 CSS,可以使用熟悉的 Web 開發技術來實現複雜的頭部設計。 有關完整的頁首和頁尾文檔,請存取頁首和頁尾指南

API對應參考

正在評估從 Telerik 報表 過渡到IronPDF 的團隊會發現此映射有助於理解概念等效性:

Telerik 報表 IronPDF
Report ChromePdfRenderer
ReportProcessor renderer.RenderHtmlAsPdf()
ReportSource HTML字串或文件
.trdp / .trdx 文件 HTML/CSS模板
ReportParameter 字串插值 / Razor
ReportDataSource C# 資料綁定
RenderReport("PDF") RenderHtmlAsPdf()
Export() pdf.SaveAs()
TextBox 報告項 HTML <span>, <p>, <div>
Table 報告項 HTML <table>
PictureBox HTML <img>
PageSettings RenderingOptions

當團隊考慮 Telerik 報表 的替代方案時

以下幾種情況通常會促使開發團隊評估 Telerik 報表 的替代方案:

許可成本優化

當產生 PDF 檔案是主要需求時,DevCraft 軟體包會帶來很大的開銷。 IronPDF 的專注型授權模式提供 PDF 功能,而無需為未使用的報表功能付費。

簡化的基礎設施

Telerik Reporting 的基礎設施需求——報表設計器、服務託管和專有文件格式——增加了開發和部署流程的複雜性。 IronPDF是一個獨立的NuGet包,沒有外部相依性。

現代網路技術集成

使用現代前端框架建立的應用程式可以受益於 IronPDF 的 HTML 優先方法。 開發人員可以重複使用現有的 CSS 樣式表和JavaScript庫,而無需學習專有的報告標記。

生態系彈性

專有的 .trdp.trdx 格式會造成供應商鎖定。 IronPDF使用的 HTML 範本仍然具有可移植性,並且可以使用標準的 Web 開發工具進行編輯。

運作時效率

對於產生大量 PDF 的應用程式而言,與完整的 Telerik 報表 執行階段相比,IronPDF 的專注程式碼庫通常可提供較小的部署佔用空間。

PDF 處理功能

除了產生文件之外, IronPDF還提供文件操作功能,從而擴展了其用途:

-合併 PDF將多個文件合併成單一文件 -拆分文檔將頁面範圍提取到單獨的 PDF 文件中 -數位簽章套用加密簽章來驗證文件的真實性 -浮水印透過 HTML/CSS 新增文字或圖像浮水印

.NET相容性和未來適應性

這兩個函式庫都支援目前的.NET實作。 IronPDF持續進行積極開發和定期更新,確保與.NET 8、 .NET 9 以及包括預計 2026 年發布的.NET 10 在內的未來版本相容。該程式庫在其 API 中全面支援 async/await 模式,符合現代 C# 開發實踐,包括 C# 13 中的功能以及預期的 C# 14 功能。

結論

儘管 Telerik 報表 和IronPDF都能產生 PDF 輸出,但它們的主要用途卻有所不同。 Telerik 報表 是一款卓越的綜合性企業報表平台,具有視覺化設計器、互動式檢視器和多格式匯出功能,是需要功能齊全的報表產生和內建分析功能的組織的理想選擇。

IronPDF專注於從 HTML 和 Web 內容生成 PDF,為需要將 HTML、URL 或動態生成的內容轉換為 PDF 的開發人員提供了一個簡化的解決方案,而無需完整的報表基礎架構帶來的額外開銷。 它基於 Chromium 的渲染技術確保了與瀏覽器顯示完全匹配的像素級輸出,而其 API 設計則優先考慮了簡潔性和與標準 Web 開發工作流程的整合。

選擇哪種工具取決於專案需求:全面的報表工作流程適合 Telerik Reporting,而從 Web 內容直接產生 PDF 則符合 IronPDF 的優勢。 對於目前主要使用 Telerik 報表 產生 PDF 的團隊而言,評估IronPDF可能會發現降低複雜性和最佳化成本的機會。

如需更多實施指導,請查閱IronPDF文件教程,其中涵蓋具體用例和高級功能。