把 RDL 放進 Blazor 專案後,能否直接生成 PDF?
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1325
最近在研究將既有 Access 報表遷移到 Blazor Web App 時,我遇到了一個很容易產生誤解的問題:
如果直接把
.rdl文件放進 Blazor Web App 的工程目錄,應用程式能不能自己把它生成 PDF?
還是一定要把 RDL 上傳到 Power BI Service,再透過 REST API 導出?
結論是:
RDL 不一定要放在 Power BI 雲端,但僅僅把 RDL 文件放進 Blazor 專案,也不能讓它自己生成 PDF。
真正需要的不是「文件放在哪裡」,而是必須有一個能夠解析和渲染 RDL 的報表引擎。
一、RDL 本身不能直接生成 PDF
RDL 的全稱是 Report Definition Language,本質上是一份 XML 格式的報表定義文件。
它通常記錄以下內容:
-
報表版面
-
資料來源
-
SQL 查詢
-
報表參數
-
表格和文字框
-
分頁方式
-
頁首與頁尾
-
格式和運算式
例如,在 Blazor 工程中建立以下目錄:
BlazorWebApp
└─ Reports
└─ 処理状況帳票.rdl
這只代表應用程式中保存了一份 RDL 文件。
RDL 本身不是執行程式,也不包含 PDF 生成器。Blazor 不會因為讀取到一份 RDL,就自動知道如何執行其中的 SQL、處理參數、計算版面並輸出 PDF。
整個流程實際上是:
RDL 報表定義
↓
報表渲染引擎
↓
執行 SQL、套用參數、排版
↓
輸出 PDF
因此,問題的核心不是 RDL 能不能放進 Blazor,而是由誰負責渲染。
二、方案一:使用 Power BI Service 生成 PDF
目前較常見的雲端方案是:
Blazor Web App
↓
Power BI REST API
↓
Power BI Service 中的 Paginated Report
↓
生成 PDF
↓
返回瀏覽器
Blazor 後端可以透過 Service Principal 呼叫 Power BI 的 ExportToFile API,將部署在 Power BI Service 中的 RDL 導出為 PDF。
這種方案的優點是:
-
不需要自己維護報表伺服器
-
報表統一放在 Power BI Workspace 中管理
-
適合 Azure Web App
-
可以透過 API 自動生成 PDF
-
Web 使用者不一定需要 Power BI 帳號
缺點則是:
-
通常需要 Microsoft Fabric Capacity
-
需要設定 Entra ID 應用程式和 Service Principal
-
需要管理 Workspace 權限
-
系統會依賴 Power BI 雲端服務
因此,Power BI Service 是比較現代化的雲端方案,但並不是唯一選擇。
三、方案二:自己部署 SSRS
微軟也提供 SQL Server Reporting Services,也就是 SSRS。
SSRS 是一套可以安裝在 Windows Server 上的報表伺服器,專門負責管理和渲染 RDL。
架構可以變成:
Blazor Web App
↓
SSRS Report Server
↓
執行 RDL
↓
查詢 SQL Server 或 Azure SQL Database
↓
輸出 PDF
SSRS 支援透過 URL 直接指定輸出格式,例如:
https://report-server/ReportServer?/Reports/処理状況帳票
&StartDate=2026-07-01
&EndDate=2026-07-31
&rs:Format=PDF
其中:
rs:Format=PDF
代表要求 SSRS 將報表渲染為 PDF。
Blazor 後端只需要向 SSRS 發出請求,取得 PDF 的位元資料,再返回給瀏覽器即可。
這個方案不需要 Power BI Service,也不需要呼叫 Power BI ExportToFile API。
SSRS 可以部署在:
-
公司內部 Windows Server
-
公司內部虛擬機
-
Azure Virtual Machine
-
其他 Windows Server 環境
不過,SSRS 本身是一個完整的伺服器產品,不能直接安裝在 Azure Web App 裡。通常需要另外準備 Windows Server 或 Azure VM。
四、方案三:Power BI Report Server
微軟還提供 Power BI Report Server。
它同樣可以部署在公司內部或 Windows Server 上,並支援 Paginated Report 和 RDL。
架構與 SSRS 類似:
Blazor Web App
↓
Power BI Report Server
↓
RDL
↓
PDF
Power BI Report Server 除了分頁報表之外,也支援部分 Power BI 報表功能。
但是,如果系統主要需求只是執行 RDL 並輸出 PDF,SSRS 往往更直接。Power BI Report Server 的授權條件也需要另外確認。
五、能不能完全不使用報表伺服器,由 Blazor 自己生成?
理論上可以,但微軟目前沒有為現代 Blazor 或 ASP.NET Core 提供一套完整、方便的官方 RDL 本地渲染 SDK。
微軟過去提供過 ReportViewer 和 LocalReport。
概念上的程式碼如下:
LocalReport report = new LocalReport();
report.ReportPath = "Reports/帳票.rdlc";
report.DataSources.Add(dataSource);
byte[] pdf = report.Render("PDF");
這種方式可以由應用程式直接生成 PDF,不需要連線到 Power BI Service 或 SSRS。
但是它存在幾個重要限制。
六、LocalReport 主要處理的是 RDLC,而不是完整 RDL
RDL 和 RDLC 很相似,但用途不同。
簡單來說:
RDL
→ 通常交給 SSRS、Power BI Service 或 Power BI Report Server 執行
RDLC
→ 通常由應用程式在本地模式中執行
RDL 中可以包含:
-
DataSource
-
SQL 查詢
-
報表參數
-
報表版面
而 RDLC 本地模式通常不會自己執行報表中的 SQL。
資料取得流程通常會變成:
Blazor 或後端程式
↓
自己執行 SQL
↓
取得 DataTable 或物件集合
↓
傳給 RDLC
↓
生成 PDF
也就是說,原本寫在 RDL 裡面的 SQL 和資料來源邏輯,可能需要移到 C# 程式中。
如果既有 RDL 已經包含完整的 SQL、參數和報表設計,那麼轉成 RDLC 可能會增加很多重寫工作。
七、微軟官方 ReportViewer 對 Blazor 支援不足
另一個問題是,微軟官方 ReportViewer 主要面向:
-
ASP.NET WebForms
-
Windows Forms
-
.NET Framework
它不是專門為以下環境設計的:
-
Blazor Web App
-
ASP.NET Core
-
.NET 8
-
.NET 9
-
.NET 10
因此,目前不存在這樣一個理想的官方套件:
Blazor .NET 10
+
完整 RDL
+
官方 NuGet
+
直接 Render PDF
雖然網路上有一些第三方或社群移植方案,例如:
-
ReportViewerCore
-
AspNetCore.Reporting
-
FastReport
-
Telerik Reporting
-
DevExpress Reporting
-
Bold Reports
-
Stimulsoft
但它們可能存在以下問題:
-
不是微軟官方產品
-
需要商業授權
-
對 RDL 的支援程度不同
-
不一定相容 Power BI Report Builder 產生的所有功能
-
複雜 Tablix、Subreport、Custom Code 或運算式可能無法完整執行
因此,第三方本地渲染方案需要逐份報表測試,不能直接假設與 Power BI Report Builder 完全相容。
八、幾種方案的比較
| 方案 | RDL 放置位置 | 是否需要報表伺服器 | 是否使用雲端 | Blazor 是否直接渲染 |
|---|---|---|---|---|
| Power BI Service | Power BI Workspace | 是,由微軟管理 | 是 | 否 |
| SSRS | 自建 Report Server | 是 | 不一定 | 否 |
| Power BI Report Server | 自建 Report Server | 是 | 不一定 | 否 |
| ReportViewer/RDLC | Blazor 或後端工程 | 否 | 否 | 是,但支援受限 |
| 第三方報表引擎 | 工程或自建服務 | 視產品而定 | 不一定 | 可以 |
其中最容易誤解的一點是:
將 RDL 放進 Blazor 工程,不等於 Blazor 就具備 RDL 渲染能力。
文件可以放在工程中,但仍然需要一個可以理解 RDL 的渲染引擎。
九、對既有 RDL 遷移專案的建議
如果既有 RDL 已經具備以下條件:
-
已經寫好 SQL
-
已經設定資料來源
-
已經設定參數
-
已經完成版面設計
-
可以在 Power BI Report Builder 中直接預覽
-
Web 端只需要點擊按鈕取得 PDF
那麼比較合適的方案通常是以下兩種。
雲端方案
Blazor Web App
↓
Power BI REST API
↓
Power BI Service
↓
PDF
這種方案適合使用 Azure Web App,並且不希望自己維護報表伺服器的情況。
自建方案
Blazor Web App
↓
SSRS
↓
RDL
↓
PDF
這種方案適合公司已經擁有 Windows Server、SQL Server 授權或內部基礎設施,並且希望避免依賴 Power BI 雲端服務的情況。
相對而言,不建議為了讓 Blazor 本地生成 PDF,而把大量完整 RDL 改造成 RDLC。
這樣做可能需要:
-
將 SQL 從報表中移到 C#
-
重寫資料取得邏輯
-
重新處理參數
-
驗證版面相容性
-
測試分頁與 PDF 輸出
-
處理第三方套件的相容性和授權
如果報表數量很多,維護成本可能比部署 SSRS 或使用 Power BI Service 更高。
十、最終結論
把 RDL 放進 Blazor Web App 工程後,RDL 不會自己變成 PDF。
完整流程必須存在一個報表渲染引擎。
這個渲染引擎可以是:
Power BI Service
也可以是:
SQL Server Reporting Services
或者:
Power BI Report Server
也可以改用 RDLC 或第三方報表套件,由應用程式本地渲染。
但在目前的微軟技術體系中,並不存在一個對 Blazor 和現代 .NET 完整支援、可以直接載入任意 RDL 並生成 PDF 的官方輕量級 SDK。
因此,最準確的理解是:
RDL 不一定必須放到雲端,但必須交給某個報表引擎。Power BI Service 是雲端引擎,SSRS 和 Power BI Report Server 是可自行部署的引擎,而 Blazor 本身並不是 RDL 渲染引擎。
This article was last edited at