跳至頁尾內容
影片

如何在 C# | IronPDF 中使用資料 URI 嵌入圖片

Telerik Reporting是一個強大的企業級報告平台,對於.NET開發者來說,能夠使用視覺設計器和下鑽功能構建互動報告非常有用。 然而,對於那些主要需求是PDF生成而非全面報告基礎設施的團隊來說,Telerik Reporting在許可費用、部署複雜度和執行負載方面往往代表著顯著的超負荷。

該指南為專業.NET開發者評估從Telerik Reporting轉移到IronPDF提供了一個完整的遷移路徑,附有詳細說明、程式碼比較和實用範例。

為什麼要從Telerik Reporting遷移

從Telerik Reporting遷移的決定通常集中在讓您的工具與實際需求相匹配的問題上。 開發團隊考慮遷移的主要原因包括:

每位開發者的許可費:獨立的Telerik Reporting每位開發者起價約為$685,DevCraft Complete大包每位開發者起價約為$1,763 (2026 Q1, ComponentSource)。 兩者都以永久 + 1年維護或年度訂閱的形式出售。 對於只需要PDF生成的團隊來說,這代表著許多未使用的功能。

報告設計器依賴:Telerik Reporting需要獨立、Web或Visual Studio整合的設計師以及從專用的Telerik NuGet來源提取的運行時程式集 (https://nuget.telerik.com/v3/index.json,需要許可金鑰)。 這增加了開發環境和CI/CD管道的複雜性。

複雜的基礎設施:對於HTML5查看器場景,還需要託管一個Reporting REST服務(Telerik.Reporting.Services.AspNetCore),包括儲存、解決器和查看器腳本配置—這種基礎設施對於簡單的PDF生成任務增加了維護負擔。

專有格式:.trdxXML報告定義(Telerik自己的格式—不支持RDL/RDLC)將您鎖定在Telerik生態系統中。 遷移或修改模板需要Telerik工具。

沉重的運行時:在可能只是簡單的HTML到PDF轉換的情況下,部署佔用大,此外還有供DOCX/XLSX/PPTX/XPS用的可選渲染DLL。

可更新的維護:即使擁有永久許可,每次更新、修復和支持仍然需要更新維護訂閱。

當Telerik Reporting過於強大時

如果您主要使用Telerik Reporting從資料生成PDF,您可能會為不使用的功能支付費用:

您需要 Telerik提供 (未使用)
從HTML生成PDF 視覺設計器,下鑽功能
簡單報告 互動查看器,導出功能
伺服器端PDF 桌面控件,圖表引擎

IronPDF提供專注於PDF生成而無企業報告負擔的解決方案。

IronPDF與Telerik Reporting:功能比較

了解結構差異有助於技術決策者評估遷移投資:

功能 Telerik Reporting IronPDF
重點 報告建立與PDF導出選項 從HTML進行全面的PDF生成
整合 與ASP.NET Core應用無縫整合 可以整合到任何.NET應用程式中
設置複雜性 需要安裝報告設計器 簡單的NuGet安裝
定價 DevCraft商用套件的一部分 分開許可,對獨立的PDF生成成本更有效
PDF 生成 限於報告導出 齊全的功能和高級PDF操作
目標受眾 需要以報告為中心解決方案的開發者 需要靈活PDF生成解決方案的開發者
模板格式 .trdp / .trdx (XML; 不支持RDL/RDLC) HTML/CSS/Razor
學習曲線 Telerik專用(表達語言,區段) 標準的網頁技術
HTML 到 PDF 伺服器端通過HtmlTextBox(有限的HTML/CSS) 完整的Chromium渲染
URL至PDF 不內建(自己抓取HTML)
CSS 支援 有限(設計器中的類CSS選擇器) 完整支持 CSS3
渲染時的JavaScript 不(伺服器引擎不執行JavaScript) 完整的ES2024
數位簽名 是的(X.509 / .PFX 方法通過PDF裝置資訊)
PDF/A PDF/A-1b, PDF/A-2b, PDF/A-3b PDF/A-3
運行時大小 大(引擎 + 每格式渲染DLL)

快速開始:從Telerik Reporting到IronPDF的遷移

可以立即透過這些基本步驟開始遷移。

步驟 1:替換 NuGet 套件

移除所有Telerik Reporting包:

# Remove Telerik Reporting packages (hosted on the private Telerik NuGet feed)
dotnet remove package Telerik.Reporting
dotnet remove package Telerik.Reporting.Services.AspNetCore
dotnet remove package Telerik.ReportViewer.Mvc
# Remove Telerik Reporting packages (hosted on the private Telerik NuGet feed)
dotnet remove package Telerik.Reporting
dotnet remove package Telerik.Reporting.Services.AspNetCore
dotnet remove package Telerik.ReportViewer.Mvc
SHELL

安裝 IronPDF:

# InstallIronPDF(hosted on nuget.org)
dotnet add package IronPdf
# InstallIronPDF(hosted on nuget.org)
dotnet add package IronPdf
SHELL

步驟 2:更新命名空間

將Telerik命名空間替換為IronPDF命名空間:

// Before (Telerik Reporting)
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using Telerik.Reporting.Drawing;

// After (IronPDF)
using IronPdf;
// Before (Telerik Reporting)
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using Telerik.Reporting.Drawing;

// After (IronPDF)
using IronPdf;
Imports Telerik.Reporting
Imports Telerik.Reporting.Processing
Imports Telerik.Reporting.Drawing

' After (IronPDF)
Imports IronPdf
$vbLabelText   $csharpLabel

步驟 3:初始化授權

在應用啓動時新增授權初始化:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

程式碼遷移範例

將HTML轉換為PDF

最常見的用例展示了這些.NET PDF庫之間架構上的差異。

Telerik Reporting方法:

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

IronPDF 方法:

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

Telerik版本需要建立ReportProcessor,和手動檔流管理。 IronPDF的ChromePdfRenderer用三行程式碼處理整個過程。

如需進階 HTML 到 PDF 的場景,請參見 HTML 到 PDF 轉換指南

將 URL 轉換為 PDF

URL到PDF的轉換揭示了Telerik Reporting的重大功能差距。

Telerik Reporting方法:

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

IronPDF 方法:

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

Telerik Reporting沒有內建的URL到PDF的方法—您自己抓取HTML(這裡通過WebClient),伺服器端引擎不執行JavaScript,因此外部腳本和動態內容不呈現。 IronPDF的RenderUrlAsPdf方法準確捕捉完整的渲染頁面,就像它在瀏覽器中出現一樣。

查看 URL 到 PDF 文件,了解認證和自定義標頭選項。

實現具有頁碼的頁眉和頁腳

具有動態頁碼的頁眉和頁腳是專業文件的關鍵部分。 實施方法明顯不同。

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 方法:

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

Telerik Reporting需要建立TextBox項目。 IronPDF的基於HTML的方法使用熟悉的CSS樣式及簡單的占位符,如{total-pages}

瞭解更多關於頁眉和頁腳選項的內容,請參閱頁眉和頁腳文件

Telerik Reporting API到IronPDF對照表

此映射透過展示直接的 API 等價加速遷移:

Telerik Reporting 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

常見遷移問題及解決方案

問題1:報告定義(.trdp/.trdx文件)

Telerik Reporting使用專有的XML報告定義,無法直接轉換。

解決方案:通過打開設計器中的報告,記錄佈局、資料綁定和格式設置,然後重新建立為HTML/CSS模板進行轉換。 在複雜的方案中使用Razor進行資料綁定。

問題2:資料來源綁定

Telerik Reporting使用SqlDataSource和物件資料來源進行表達式綁定。

解決方案:在C#中獲取資料並綁定到HTML上:

var data = await dbContext.Orders.ToListAsync();
var html = $"<table>{string.Join("", data.Select(d => $"<tr><td>{d.Name}</td></tr>"))}</table>";
var data = await dbContext.Orders.ToListAsync();
var html = $"<table>{string.Join("", data.Select(d => $"<tr><td>{d.Name}</td></tr>"))}</table>";
Dim data = Await dbContext.Orders.ToListAsync()
Dim html = $"<table>{String.Join("", data.Select(Function(d) $"<tr><td>{d.Name}</td></tr>"))}</table>"
$vbLabelText   $csharpLabel

問題3:報告參數

Telerik Reporting使用ReportParameter與內建參數UI。

解決方案:將參數直接傳遞至HTML生成:

public string GenerateReport(string customerId, DateTime fromDate)
{
    return $"<h1>Report for {customerId}</h1><p>From: {fromDate:d}</p>";
}
public string GenerateReport(string customerId, DateTime fromDate)
{
    return $"<h1>Report for {customerId}</h1><p>From: {fromDate:d}</p>";
}
Public Function GenerateReport(customerId As String, fromDate As DateTime) As String
    Return $"<h1>Report for {customerId}</h1><p>From: {fromDate:d}</p>"
End Function
$vbLabelText   $csharpLabel

問題4:互動特性

Telerik Reporting在查看器中提供下鑽、排序和篩選。

解決方案:IronPDF生成靜態PDF。 對於互動性,將資料保留在您的網頁UI中,當使用者點擊"導出"時生成PDF。這將互動資料探索與文件生成分開考慮。

Telerik Reporting遷移清單

遷移前任務

審計您的程式碼庫以識別所有Telerik Reporting使用情況:

grep -r "using Telerik.Reporting" --include="*.cs" .
grep -r "Report\|ReportProcessor" --include="*.cs" .
grep -r "using Telerik.Reporting" --include="*.cs" .
grep -r "Report\|ReportProcessor" --include="*.cs" .
SHELL

記錄資料來源和參數,截圖當前報告佈局作為視覺參考,並識別可以轉換為可重用HTML模板的共享報告組件。

程式碼更新任務

  1. 移除Telerik NuGet包
  2. 安裝IronPDFNuGet 套件
  3. .trdx文件轉換為HTML模板
  4. ChromePdfRenderer
  5. 更新資料綁定為字串插值或Razor
  6. 使用HtmlHeaderFooter將頁眉/頁腳轉換為HTML
  7. 在啟動時新增許可初始化

遷移後測試

遷移後,驗證以下方面:

  • 對比PDF輸出與原始報告作視覺比較
  • 驗證生成PDF中的資料準確性
  • 測試多頁文件的分頁
  • 檢查頁眉/頁腳在所有頁面上正確顯示
  • 進行高負載場景的性能測試

遷移到IronPDF的關鍵好處

從Telerik Reporting轉移到IronPDF為專注於PDF生成的團隊提供了若干優勢:

現代Chromium渲染引擎:IronPDF使用與Google Chrome相同的渲染引擎,確保PDF與現代瀏覽器中顯示的內容一致。 完整的CSS3和JavaScript支持意味著您的網頁設計可以直接轉化為PDF。

簡化的許可:IronPDF提供每位開發者許可,而不需要購買全面的套件。 對於只需PDF生成的團隊來說,這代表著顯著的成本節省。

標準的網頁技術:HTML、CSS和JavaScript是每位網頁開發者都具備的技能。 無需學習專有模板格式或特殊設計工具。

更小的部署佔用:沒有報告服務基礎設施和設計器組件,部署更簡單和更快。

積極的開發:IronPDF的定期更新與當前的.NET版本保持一致,因此現代.NET上的項目在支援方面無需等待季度報告更新。

請注意Telerik是其各自所有者的註冊商標。 本網站未與Progress Software關聯、未被其支持或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。

Curtis Chau
技術作家

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

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

Iron 支援團隊

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