C#でSSRSからIronPDFに移行する方法
SQL Server Reporting Services (SSRS)からIronPDFに移行することで、PDF生成のワークフローが、重量のあるサーバーベースのインフラストラクチャから、.NETアプリケーションに直接埋め込むことができる軽量のインプロセスライブラリに変わります。 このガイドでは、SQL Serverへの依存、レポートサーバーのオーバーヘッド、Microsoftエコシステムのロックインを排除する、完全で段階的な移行パスを提供します。
なぜSSRSからIronPDFに移行するのか
SSRSについて
SQL Server Reporting Services(SSRS)は、Microsoftのエンタープライズレポーティングプラットフォームで、多額のインフラ投資が必要です。 SSRSは、レポートの作成、展開、管理のための完全なスイートを提供するMicrosoftの包括的なレポートプラットフォームであり、豊富な機能とインタラクティブなレポート機能の両方を提供します。 SQL Serverエコシステムの一部として開発されたSSRSは、マイクロソフトのデータベースソリューションと緊密に統合されています。
しかし、多くのPDF生成シナリオでは、SSRSインフラストラクチャは過剰です。移行する主な理由は以下の通りです:
1.高度なインフラストラクチャ: SQL Server、レポート サーバー、IIS の構成が必要です
- Microsoftエコシステムのロックイン: SQL ServerライセンスとWindows Serverに結びついている 3.複雑な展開:レポートの展開、セキュリティ構成、サブスクリプション管理 4.高価なライセンス: SQL Server ライセンス、特にエンタープライズ機能向け
- Webサポートが限られている:最新のSPAフレームワークとの統合が難しい 6.メンテナンスオーバーヘッド:サーバーのパッチ適用、データベースのメンテナンス、レポート管理 7.クラウドネイティブオプションなし:オンプレミス向けに設計されているため、クラウドサポートが不便
SSRSが過剰な場合
| ニーズ | SSRSオーバーヘッド |
|---|---|
| 請求書の作成 | フルレポートサーバー |
| データテーブルのエクスポート | SQL Serverライセンス |
| データからPDFを作成 | Windowsサーバー |
| シンプルなドキュメント生成 | レポート購読 |
IronPdfはサーバーのインフラなしでインプロセスでPDFを生成します。
SSRSとIronPDFの比較
| フィーチャー | SSRS | IronPDF |
|---|---|---|
| 依存性について | SQL Serverが必要です。 | データベースへの依存なし |
| デプロイメント | サーバーベース | ライブラリ(アプリケーションへの組み込み) |
| 統合。 | マイクロソフトとの緊密な統合 | あらゆるデータソースに対応 |
| データビジュアライゼーション | 豊富なネイティブオプション | PDFを中心としたビジュアライゼーション |
| 複雑さ | 高(サーバー設定が必要) | 中~低レベル(ライブラリのセットアップ) |
| 費用 | SQL Serverのライセンス費用 | 開発者1人あたりのライセンス費用 |
| HTMLからPDFへ | なし | 完全なChromium |
| URLからPDFへ。 | なし | はい |
| CSSサポート | 制限的 | 完全なCSS3 |
| JavaScript(JavaScript | なし | フルES2024 |
IronPdfはSSRSとは異なり、特定のデータベースやサーバーエコシステムに縛られることはありません。 C#で直接PDF文書を動的に作成、編集、操作するための柔軟なライブラリを開発者に提供します。 サーバーベースのインフラストラクチャから切り離されることで、顕著な利点が得られます。
2025年と2026年まで.NET 10とC# 14の採用を計画しているチームに対して、IronPDFはSSRSのインフラストラクチャの複雑さを解消する最新のChromiumレンダリングエンジンを提供します。
始める前に
前提条件
- .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGetアクセス: NuGetパッケージをインストールする機能
- IronPDFライセンス: IronPDFからライセンスキーを取得します。
NuGetパッケージの変更
#SSRShas no direct NuGet - it's server-based
# Remove any ReportViewer controls
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WinForms
# Install IronPDF
dotnet add package IronPdf
#SSRShas no direct NuGet - it's server-based
# Remove any ReportViewer controls
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WinForms
# Install IronPDF
dotnet add package IronPdf
ライセンス構成
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' 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;
// Before: SSRS
using Microsoft.Reporting.WebForms;
using Microsoft.Reporting.WinForms;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports Microsoft.Reporting.WebForms
Imports Microsoft.Reporting.WinForms
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
コア API マッピング
| SSRSのコンセプト | IronPDF 同等物 | ノート |
|---|---|---|
LocalReport |
ChromePdfRenderer |
コアレンダリング |
ServerReport |
RenderUrlAsPdf() |
URLベースのレンダリング |
.rdlc ファイル |
HTML/CSSテンプレート | テンプレート形式 |
ReportParameter |
文字列の補間 | パラメータ |
ReportDataSource |
C#データ + 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);
}
}
//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);
}
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.Reporting.WebForms
Imports System.IO
Class SSRSHtmlToPdf
Shared Sub Main()
' Create a ReportViewer instance
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
' Load RDLC report definition
reportViewer.LocalReport.ReportPath = "Report.rdlc"
' Add HTML content as a parameter or dataset
Dim htmlContent As String = "<h1>Hello World</h1><p>This is HTML content.</p>"
Dim param As New ReportParameter("HtmlContent", htmlContent)
reportViewer.LocalReport.SetParameters(param)
' Render the report to PDF
Dim mimeType As String, encoding As String, fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render( _
"PDF", _
Nothing, _
mimeType, _
encoding, _
fileNameExtension, _
streams, _
warnings)
File.WriteAllBytes("output.pdf", bytes)
End Sub
End Class
翻訳後(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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Class IronPdfHtmlToPdf
Shared Sub Main()
' Create a ChromePdfRenderer instance
Dim renderer = New ChromePdfRenderer()
' Convert HTML string to PDF
Dim htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' Save the PDF file
pdf.SaveAs("output.pdf")
End Sub
End Class
この例は、基本的なアーキテクチャの違いを示しています。SSRSでは、インスタンスを作成し、レポート定義ファイルを読み込み、パラメータを設定してから、メタデータの複数のパラメータを使用してを呼び出す必要があります。
IronPDF は、わずか 3 行のコード内で ChromePdfRenderer と RenderHtmlAsPdf() を使用します。 レポート定義ファイル、パラメータオブジェクト、メタデータの処理は不要です。 包括的な例については、HTML to PDF documentationを参照してください。
例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);
}
}
//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);
}
}
Imports System
Imports System.IO
Imports System.Net
Imports Microsoft.Reporting.WebForms
Class SSRSUrlToPdf
Shared Sub Main()
' Download HTML content from URL
Dim url As String = "https://example.com"
Dim htmlContent As String
Using client As New WebClient()
htmlContent = client.DownloadString(url)
End Using
' Create RDLC report with header/footer configuration
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
reportViewer.LocalReport.ReportPath = "WebReport.rdlc"
' Set parameters for header and footer
Dim parameters As ReportParameter() = {
New ReportParameter("HeaderText", "Company Report"),
New ReportParameter("FooterText", "Page " & DateTime.Now.ToString()),
New ReportParameter("HtmlContent", htmlContent)
}
reportViewer.LocalReport.SetParameters(parameters)
' Render to PDF
Dim mimeType As String, encoding As String, fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render(
"PDF", Nothing, mimeType, encoding,
fileNameExtension, streams, warnings)
File.WriteAllBytes("webpage.pdf", bytes)
End Sub
End Class
翻訳後(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");
}
}
// 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");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Class IronPdfUrlToPdf
Shared Sub Main()
' Create a ChromePdfRenderer instance
Dim renderer As New ChromePdfRenderer()
' Configure rendering options with header and footer
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Company Report</div>"
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " & DateTime.Now.ToString("MM/dd/yyyy") & "</div>"
}
' Convert URL to PDF
Dim url As String = "https://example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
' Save the PDF file
pdf.SaveAs("webpage.pdf")
End Sub
End Class
SSRSはURLを直接PDFに変換することはできません。 WebClient.DownloadString() を使用して HTML コンテンツを手動でダウンロードし、別の .rdlc レポート ファイルを作成し、HTML およびヘッダー/フッター テキストを ReportParameter 配列として渡し、複雑な Render() メソッド シグネチャを使用してレンダリングする必要があります。
IronPDF の RenderUrlAsPdf() は、1 回の呼び出しでプロセス全体を処理します。 ヘッダーとフッターは、完全な HTML/CSS と、{page} や {total-pages} などのプレースホルダーをサポートする HtmlHeaderFooter オブジェクトで構成されます。 詳しくは、チュートリアルをご覧ください。
例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);
}
}
//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);
}
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.Reporting.WebForms
Imports System.IO
Class SSRSDatabaseReport
Shared Sub Main()
' Create a ReportViewer instance
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
reportViewer.LocalReport.ReportPath = "SalesReport.rdlc"
' Create database connection and fetch data
Dim connString As String = "Server=localhost;Database=SalesDB;Integrated Security=true;"
Using connection As New SqlConnection(connString)
Dim adapter As New SqlDataAdapter("SELECT * FROM Sales", connection)
Dim dataSet As New DataSet()
adapter.Fill(dataSet, "Sales")
' Bind data to report
Dim dataSource As New ReportDataSource("SalesDataSet", dataSet.Tables(0))
reportViewer.LocalReport.DataSources.Clear()
reportViewer.LocalReport.DataSources.Add(dataSource)
End Using
' Render to PDF
Dim mimeType As String
Dim encoding As String
Dim fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render("PDF", Nothing, mimeType, encoding, fileNameExtension, streams, warnings)
File.WriteAllBytes("sales-report.pdf", bytes)
End Sub
End Class
翻訳後(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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Text
Class IronPdfDatabaseReport
Shared Sub Main()
' Create database connection and fetch data
Dim connString As String = "Server=localhost;Database=SalesDB;Integrated Security=true;"
Dim dataTable As New DataTable()
Using connection As New SqlConnection(connString)
Dim adapter As New SqlDataAdapter("SELECT * FROM Sales", connection)
adapter.Fill(dataTable)
End Using
' Build HTML table from data
Dim htmlBuilder As New StringBuilder()
htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>")
For Each column As DataColumn In dataTable.Columns
htmlBuilder.Append($"<th>{column.ColumnName}</th>")
Next
htmlBuilder.Append("</tr>")
For Each row As DataRow In dataTable.Rows
htmlBuilder.Append("<tr>")
For Each item In row.ItemArray
htmlBuilder.Append($"<td>{item}</td>")
Next
htmlBuilder.Append("</tr>")
Next
htmlBuilder.Append("</table>")
' Convert to PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString())
pdf.SaveAs("sales-report.pdf")
End Sub
End Class
SSRS では、事前に設計された .rdlc レポート ファイル ("SalesReport.rdlc")、DataSet の入力、レポート定義に一致する必要がある特定の名前 ("SalesDataSet") を持つ ReportDataSource の作成、既存のデータ ソースのクリア、新しいデータ ソースの追加、レンダリングが必要です。
IronPDF は既存のデータ アクセス コード (同じ SqlDataAdapter パターン) を使用し、StringBuilder を使用して HTML を動的に構築します。 標準的なHTML/CSSを使用してレイアウトを完全に制御できます。
機能比較
| フィーチャー | SSRS | IronPDF | |||
|---|---|---|---|---|---|
| :インフラストラクチャー: | 必要なサーバー | はい(レポートサーバー) | なし | ||
| SQL Serverライセンス | 必須 | 不要 | |||
| Windowsサーバー | 必須 | プラットフォーム | |||
| データベース必須 | はい(ReportServer DB) | なし | |||
| :発達: | ビジュアルデザイナー | はい (.rdlc) | HTMLエディタ | ||
| テンプレート形式 | RDLC/RDL | HTML/CSS/Razor | |||
| データソース | 組み込みDSN | あらゆるC#データ | |||
| :レンダリング: | HTMLからPDFへ | なし | 完全なChromium | ||
| 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
var data = await _dbContext.Sales.ToListAsync();
// Then bind to HTML template
Dim 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);
// Your own parameter form, then:
var pdf = GenerateReport(startDate, endDate, region);
' Your own parameter form, then:
Dim pdf = GenerateReport(startDate, endDate, region)
課題4:定期購読/定期レポート
SSRS:組み込みのサブスクリプションエンジン。
解決策:バックグラウンド・ジョブ・フレームワークを使用する:
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
移行チェックリスト
移行前
- すべてのSSRSレポートをインベントリします (
.rdlcファイル) - データソースと接続を文書化する
- 視覚的な参照のためのスクリーンショットレポートレイアウト
- 各レポートのレポートパラメータを一覧表示する
- サブスクリプションスケジュールをメモする
- IronPDFからIronPDFライセンスキーを取得します
コードの更新
- ReportViewer パッケージを削除する
IronPdfNuGetパッケージをインストールします.rdlcファイルを HTML テンプレートに変換するLocalReportをChromePdfRendererに置き換えますReportDataSourceを C# データ + HTML テンプレートに置き換えますReportParameterを文字列補間に置き換えますLocalReport.Render("PDF")をRenderHtmlAsPdf()に置き換えますHtmlHeaderFooterを使用してヘッダー/フッターを実装します- アプリケーションの起動時にライセンスの初期化を追加
インフラ
- レポートサーバーの廃止を計画する
- サブスクリプションをジョブ スケジューラ (Hangfire など) に移行する
- デプロイメントスクリプトを更新する
テスティング
- PDF出力を視覚的に比較する
- データの正確性を確認する
- テストページネーション
- すべてのパラメータを確認する
- パフォーマンステスト

