把 RDL 放進 Blazor 專案後,能否直接生成 PDF?

| PowerPlatform | 2 Reads

最近在研究將既有 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