IRONSOFTWAREHOME
影片

如何在 VB .NET 庫中生成 PDF 文件 | IronPDF

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

從SQL Server Reporting Services (SSRS) 遷移到IronPDF,將您的PDF生成工作流程從沉重的基於伺服器的基礎設施轉變為輕量的、可以直接嵌入任何.NET應用程式的內部程式庫。 本指南提供了一個完整的、逐步的遷移路徑,消除了SQL Server的依賴性、報告伺服器的開銷和微軟生態系統的鎖定。

為什麼要從SSRS遷移到IronPDF

理解SSRS

SQL Server Reporting Services (SSRS) 是微軟的企業報告平台 — 一個完整的套件,用於建立、部署和管理報告,與SQL Server生態系統緊密整合。 微軟已確認 SSRS 2022 是最後一個獨立版本:從SQL Server 2025開始,本地報告將整合到Power BI Report Server (PBIRS),不再發布新的SSRS版本。SSRS 2022將收到安全更新直至 2033年1月11日,符合同SQL Server 2022生命週期(見報告服務整合常見問題解答)。

對於許多PDF生成場景,SSRS基礎設施過於繁瑣。遷移的主要原因包括:

  1. **SSRS路線的終結:**SQL Server 2025 發貨時沒有SSRS; PBIRS取而代之。 針對SSRS的新工作是死胡同。
  2. **繁重的基礎設施:**需要配置SQL Server、報告伺服器以及(對於舊的Web Forms查看器)IIS
  3. **微軟生態系統鎖定:**與SQL Server授權和Windows Server綁定
  4. **複雜的部署:**報告部署、安全配置和訂閱管理
  5. **昂貴的授權:**尤其是企業功能的SQL Server授權費用
  6. **沒有一流的.NET Core支援:**微軟的Microsoft.ReportingServices.ReportViewerControl.WebForms / .Winforms 套件僅針對.NET Framework 4.0–4.8.1。 .NET Core / .NET 5+使用者依賴於社區移植的ReportViewerCore.NETCore
  7. **維護開銷:**伺服器補丁、資料庫維護、報告管理
  8. **無雲端原生選項:**設計為本地使用,對於雲支援不夠靈活

當SSRS過於繁瑣時

您的需求SSRS開銷
生產發票全面的報告伺服器
匯出資料表SQL Server授權
從資料生成PDFWindows Server
簡單的文件生成報告訂閱

IronPDF提供不需要任何伺服器基礎設施的內部PDF生成。

SSRS vs IronPDF比較

功能SSRSIronPDF
依賴性需要SQL Server無特定的資料庫依賴
部署基於伺服器程式庫(嵌入應用程式中)
整合與微軟緊密整合支援任何資料來源
資料可視化豐富的原生選項專注於PDF的可視化
複雜性高(需要伺服器設置)中到低(程式庫設置)
成本SQL Server授權成本每開發人員的授權費用
HTML 到 PDF完整的Chromium
URL至PDF
CSS 支援有限完整支持 CSS3
JavaScript完整的ES2024

IronPDF,不同於SSRS,不與任何特定的資料庫或伺服器生態系統綁定。 它為開發者提供了一個靈活的程式庫,可以直接在C#中動態建立、編輯和操作PDF文件。 這種不依賴於基於伺服器的基礎設施帶來了顯著的優勢——它簡單且適應性強,適合於超越報告的廣泛應用。

對於採用現代.NET的團隊,IronPDF提供的Chromium渲染引擎消除了SSRS基礎設施的複雜性。


開始之前

前提條件

  1. .NET環境:.NET Framework 4.6.2+ 或.NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet存取: 有能力安裝NuGet套件
  3. IronPDF授權:ironpdf.com獲取您的授權金鑰

NuGet包變更

# SSRS itself is server-based, but the in-process LocalReport API
# ships via Microsoft's ReportViewerControl packages (latest 150.1652.0,
# June 2024 — .NET Framework 4.0–4.8.1 only).
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.Winforms

# If your project used the community .NET Core port, remove it too:
# dotnet remove package ReportViewerCore.NETCore

# Install IronPDF
dotnet add package IronPdf
SHELL

授權配置

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

完整API參考

名稱空間變更

// Before: SSRS
using Microsoft.Reporting.WebForms;
using Microsoft.Reporting.WinForms;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;

核心API對應

SSRS概念IronPDF等價注釋
LocalReportChromePdfRenderer核心渲染
ServerReportRenderUrlAsPdf()基於URL的渲染
.rdlc文件HTML/CSS模板模板格式
ReportParameter字串插值參數
ReportDataSourceC#資料 + HTML資料綁定
LocalReport.Render("PDF")RenderHtmlAsPdf()PDF輸出
SubReport合併PDF巢狀報告
Report Server URL不需要無需伺服器
ReportViewer控制不需要直接PDF生成
匯出格式PDF是原生的專注的輸出

程式碼遷移範例

範例1:HTML轉PDF轉換

之前(SSRS):

// SSRS - SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;

class SSRSHtmlToPdf
{
    static void Main()
    {
        // Create a ReportViewer instance
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;
        
        // Load RDLC report definition
        reportViewer.LocalReport.ReportPath = "Report.rdlc";
        
        // Add HTML content as a parameter or dataset
        var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var param = new ReportParameter("HtmlContent", htmlContent);
        reportViewer.LocalReport.SetParameters(param);
        
        // Render the report to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;
        
        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF",
            null,
            out mimeType,
            out encoding,
            out fileNameExtension,
            out streams,
            out warnings);
        
        File.WriteAllBytes("output.pdf", bytes);
    }
}

之後(IronPDF):

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

class IronPdfHtmlToPdf
{
    static void Main()
    {
        // Create a ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();
        
        // Convert HTML string to PDF
        var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        
        // Save the PDF file
        pdf.SaveAs("output.pdf");
    }
}

此範例說明基本的架構差異。 SSRS需要建立一個out參數用於元資料。

IronPDF只需三行程式碼使用RenderHtmlAsPdf()。 無需報告定義文件,無需參數物件,無需元資料處理。 查看更多HTML到PDF文件以獲得完整的範例。

範例2:URL到PDF加上頁首與頁尾

之前(SSRS):

// SSRS - SQL Server Reporting Services
using System;
using System.IO;
using System.Net;
using Microsoft.Reporting.WebForms;

class SSRSUrlToPdf
{
    static void Main()
    {
        // Download HTML content from URL
        string url = "https://example.com";
        string htmlContent;
        
        using (var client = new WebClient())
        {
            htmlContent = client.DownloadString(url);
        }
        
        // Create RDLC report with header/footer configuration
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;
        reportViewer.LocalReport.ReportPath = "WebReport.rdlc";
        
        // Set parameters for header and footer
        var parameters = new ReportParameter[]
        {
            new ReportParameter("HeaderText", "Company Report"),
            new ReportParameter("FooterText", "Page " + DateTime.Now.ToString()),
            new ReportParameter("HtmlContent", htmlContent)
        };
        reportViewer.LocalReport.SetParameters(parameters);
        
        // Render to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;
        
        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF", null, out mimeType, out encoding,
            out fileNameExtension, out streams, out warnings);
        
        File.WriteAllBytes("webpage.pdf", bytes);
    }
}

之後(IronPDF):

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

class IronPdfUrlToPdf
{
    static void Main()
    {
        // Create a ChromePdfRenderer instance
        var renderer = new ChromePdfRenderer();
        
        // Configure rendering options with header and footer
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center'>Company Report</div>"
        };
        
        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " + DateTime.Now.ToString("MM/dd/yyyy") + "</div>"
        };
        
        // Convert URL to PDF
        string url = "https://example.com";
        var pdf = renderer.RenderUrlAsPdf(url);
        
        // Save the PDF file
        pdf.SaveAs("webpage.pdf");
    }
}

SSRS無法直接將URL轉換為PDF。 您必須手動下載HTML內容與Render()方法簽名進行渲染。

IronPDF的RenderUrlAsPdf()處理整個過程僅需一次調用。 頁首和頁尾配置使用支援完整HTML/CSS和占位符例如{total-pages}的物件。 在我們的教程中了解更多。

範例3:資料庫驅動報告

之前(SSRS):

// SSRS - SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;

class SSRSDatabaseReport
{
    static void Main()
    {
        // Create a ReportViewer instance
        var reportViewer = new ReportViewer();
        reportViewer.ProcessingMode = ProcessingMode.Local;
        reportViewer.LocalReport.ReportPath = "SalesReport.rdlc";
        
        // Create database connection and fetch data
        string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
        using (var connection = new SqlConnection(connString))
        {
            var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
            var dataSet = new DataSet();
            adapter.Fill(dataSet, "Sales");
            
            // Bind data to report
            var dataSource = new ReportDataSource("SalesDataSet", dataSet.Tables[0]);
            reportViewer.LocalReport.DataSources.Clear();
            reportViewer.LocalReport.DataSources.Add(dataSource);
        }
        
        // Render to PDF
        string mimeType, encoding, fileNameExtension;
        string[] streams;
        Warning[] warnings;
        
        byte[] bytes = reportViewer.LocalReport.Render(
            "PDF", null, out mimeType, out encoding,
            out fileNameExtension, out streams, out warnings);
        
        File.WriteAllBytes("sales-report.pdf", bytes);
    }
}

之後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;

class IronPdfDatabaseReport
{
    static void Main()
    {
        // Create database connection and fetch data
        string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
        var dataTable = new DataTable();
        
        using (var connection = new SqlConnection(connString))
        {
            var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
            adapter.Fill(dataTable);
        }
        
        // Build HTML table from data
        var htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>");
        
        foreach (DataColumn column in dataTable.Columns)
            htmlBuilder.Append($"<th>{column.ColumnName}</th>");
        htmlBuilder.Append("</tr>");
        
        foreach (DataRow row in dataTable.Rows)
        {
            htmlBuilder.Append("<tr>");
            foreach (var item in row.ItemArray)
                htmlBuilder.Append($"<td>{item}</td>");
            htmlBuilder.Append("</tr>");
        }
        htmlBuilder.Append("</table>");
        
        // Convert to PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
        pdf.SaveAs("sales-report.pdf");
    }
}

SSRS需要一個預設計的ReportDataSource,必須與報告定義匹配,清除現有資料源,新增新的資料源,然後開始渲染。

IronPDF使用您現有的資料存取程式碼(相同的StringBuilder動態構建HTML。 您可以使用標準的HTML/CSS完全控制佈局——無需專有的報告定義文件。


功能比較

功能SSRSIronPDF
:基礎設施:
SQL Server 授權必需的不需要
Windows Server必需的任意平台
需要資料庫是(ReportServer DB)
開發
模板格式RDLC/RDLHTML/CSS/Razor
資料源內建DSN任意C#資料
渲染
URL到PDF
CSS支持有限完整支持 CSS3
JavaScript完整的ES2024
圖表內建通過JS庫
:部署:
配置複雜簡單
維護性

常見遷移問題

問題1:RDLC報告定義

**SSRS:**使用專有的.rdlc XML格式。

**解決方案:**轉換為HTML模板:

  1. 在Visual Studio中打開.rdlc
  2. 記錄佈局結構
  3. 用HTML/CSS 重新建立
  4. 使用Razor進行資料綁定

問題2:共享資料源

**SSRS:**報告伺服器中的連接字串。

**解決方案:**使用您的應用程式資料存取層:

var data = await _dbContext.Sales.ToListAsync();
// Then bind to HTML template

問題3:報告參數UI

**SSRS:**內建的參數提示。

**解決方案:**在應用程式中建立參數UI:

// Your own parameter form, then:
var pdf = GenerateReport(startDate, endDate, region);

問題4:訂閱/排程報告

**SSRS:**內建的訂閱引擎。

**解決方案:**使用後台任務框架:

// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
    () => GenerateAndEmailReport(), Cron.Weekly);

遷移檢查表

遷移前

  • 清點所有SSRS報告(.rdlc文件)
  • 記錄資料源和連接
  • 擷取報告佈局截圖作為視覺參考
  • 列出每個報告的報告參數
  • 註記訂閱排程
  • 獲取IronPDF授權金鑰來自ironpdf.com

程式碼更新

  • 移除ReportViewer包
  • 安裝IronPdf NuGet包
  • .rdlc文件轉換為HTML模板
  • LocalReport
  • ReportDataSource替換為C#資料 + HTML模板
  • 用字串插值替換ReportParameter
  • LocalReport.Render("PDF")
  • 使用HtmlHeaderFooter實現頁首/頁尾
  • 在應用程式啟動時新增授權初始化

基礎結構

  • 策劃報告伺服器退役
  • 將訂閱遷移到工作排程器(Hangfire等)
  • 更新部署腳本

測試

  • 目視比較PDF輸出
  • 驗證資料準確性
  • 測試頁碼
  • 檢查所有參數
  • 性能測試

請注意: SSRS是其各自所有者的註冊商標。 此網站與Microsoft無關,也未獲其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
Curtis Chau
技術作家

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

...
閱讀更多

相關文章

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天試用金鑰
無需信用卡或帳戶建立