Comment migrer de SSRS à IronPDF en C#
La migration de SQL Server Reporting Services (SSRS) versIronPDFtransforme votre flux de production de PDF d'une infrastructure lourde basée sur un serveur à une bibliothèque légère, en cours de processus, qui peut être intégrée directement dans n'importe quelle application .NET. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine les dépendances de SQL Server, la surcharge du serveur de rapports et l'enfermement dans l'écosystème Microsoft.
Pourquoi migrer de SSRSvers IronPDF
Comprendre SSRS
SQL Server Reporting Services (SSRS) est la plateforme de reporting d'entreprise de Microsoft qui nécessite un investissement important en termes d'infrastructure. SSRSest une plateforme de reporting complète de Microsoft qui fournit une suite complète pour la création, le déploiement et la gestion de rapports, offrant à la fois des fonctionnalités de rapport riches et interactives. Développé dans le cadre de l'écosystème SQL Server, SSRSest étroitement intégré aux solutions de base de données de Microsoft.
Cependant, pour de nombreux scénarios de génération de PDF, l'infrastructure SSRSest excessive. Les principales raisons de migrer sont les suivantes
- Infrastructure lourde : nécessite la configuration de SQL Server, de Report Server et d'IIS.
- Dépendance à l'écosystème Microsoft : liée aux licences SQL Server et Windows Server
- Déploiement complexe : déploiement des rapports, configuration de la sécurité et gestion des abonnements
- Licences coûteuses : les licences SQL Server, notamment pour les fonctionnalités Enterprise.
- Compatibilité Web limitée : Intégration difficile avec les frameworks SPA modernes
- Frais de maintenance : Mise à jour des serveurs, maintenance des bases de données, gestion des rapports
- Absence d'option native du cloud : Conçu pour une utilisation sur site, le support du cloud est peu pratique.
Quand SSRSest excessif
| Votre besoin | Frais généraux SSRS |
|---|---|
| Générer des factures | Serveur de rapport complet |
| Exporter des tableaux de données | Licence SQL Server |
| Créer des PDF à partir de données | Serveur Windows |
| Génération de documents simples | Abonnements aux rapports |
IronPDF permet de générer des PDF en cours de processus, sans aucune infrastructure de serveur.
Comparaison entre SSRSet IronPDF
| Fonction | SSRS | IronPDF |
|---|---|---|
| Dépendance | Requiert SQL Server | Pas de dépendance spécifique à l'égard d'une base de données |
| Déploiement | Basé sur le serveur | Bibliothèque (intégrée dans les applications) |
| Intégration | Intégration étroite avec Microsoft | Fonctionne avec n'importe quelle source de données |
| Visualisation des données | Options natives étendues | Visualisations axées sur les PDF |
| Complexité | Haut (configuration du serveur requise) | Modéré à faible (configuration de la bibliothèque) |
| Coût | Coût des licences SQL Server | Coût de la licence par développeur |
| HTML à PDF | Non | Chromium complet |
| URL vers PDF | Non | Oui |
| Support CSS | Limité | CSS3 complet |
| JavaScript | Non | ES2024 complet |
IronPDF, contrairement à SSRS, n'est pas lié à une base de données ou à un écosystème de serveur spécifique. Il fournit aux développeurs une bibliothèque flexible pour créer, éditer et manipuler dynamiquement des documents PDF directement en C#. Ce découplage par rapport à une infrastructure basée sur un serveur offre un avantage notable : il est simple et adaptable, et convient à un large éventail d'applications au-delà de la production de rapports.
Pour les équipes qui prévoient d'adopter .NET 10 et C# 14 d'ici 2025 et 2026,IronPDFfournit un moteur de rendu moderne Chromium qui élimine la complexité de l'infrastructure de SSRS.
Avant de commencer
Prérequis
- Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Accès à NuGet : possibilité d'installer des packages NuGet
- Licence IronPDF : Obtenez votre clé de licence sur IronPDF
Modifications du paquet 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
Configurationde la licence
// 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"
Référence API complète
Modifications de l'espace de nommage
// 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
Mappages de l'API de base
| Concept SSRS | Équivalent d'IronPDF | Notes |
|---|---|---|
LocalReport |
ChromePdfRenderer |
Rendu de base |
ServerReport |
RenderUrlAsPdf() |
Rendu basé sur l'URL |
.rdlc fichiers |
Modèles HTML/CSS | Format du modèle |
ReportParameter |
Interpolation de chaînes de caractères | Paramètres |
ReportDataSource |
Données C# + HTML | Liaison de données |
LocalReport.Render("PDF") |
RenderHtmlAsPdf() |
Sortie PDF |
SubReport |
PDF fusionnés | Rapports imbriqués |
Report Server URL |
Pas nécessaire | Aucun serveur n'est nécessaire |
ReportViewer contrôle |
Pas nécessaire | Génération directe de PDF |
| Formats d'exportation | Le PDF est natif | Un résultat ciblé |
Exemples de migration de code
Exemple 1 : Conversion HTML vers PDF
Avant (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
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("output.pdf", bytes)
End Sub
End Class
Après (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
Cet exemple illustre la différence architecturale fondamentale. SSRSnécessite la création d'une instance ReportViewer, le chargement d'un fichier de définition de rapport .rdlc, la définition des paramètres, puis l'appel de LocalReport.Render("PDF") avec plusieurs paramètres out pour les métadonnées.
IronPDF utilise un ChromePdfRenderer avec RenderHtmlAsPdf() en seulement trois lignes de code. Aucun fichier de définition de rapport, aucun objet de paramètre, aucune manipulation de métadonnées n'est requise. Consultez la documentation HTML vers PDF pour des exemples complets.
Exemple 2 : URL vers PDF avec en-têtes et pieds de page
Avant (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
Après (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 ne peut pas convertir directement les URL en PDF. Vous devez télécharger manuellement le contenu HTML avec WebClient.DownloadString(), créer un fichier de rapport séparé .rdlc, passer le HTML et le texte d'en-tête/pied de page sous forme de tableaux ReportParameter, puis effectuer le rendu avec la signature de méthode complexe Render().
IronPDF's RenderUrlAsPdf() gère l'ensemble du processus en un seul appel. Les en-têtes et les pieds de page sont configurés avec des objets HtmlHeaderFooter qui prennent en charge le HTML/CSS complet et les espaces réservés comme {page} et {total-pages}. Pour en savoir plus, consultez nos tutoriels.
Exemple 3 : Rapport basé sur une base de données
Avant (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, 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("sales-report.pdf", bytes)
End Sub
End Class
Après (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 nécessite un fichier de rapport prédéfini .rdlc (" SalesReport.rdlc "), le remplissage d'un DataSet, la création d'un ReportDataSource avec un nom spécifique (" SalesDataSet ") qui doit correspondre à la définition du rapport, l'effacement des sources de données existantes, l'ajout de la nouvelle source de données, puis le rendu.
IronPDF utilise votre code d'accès aux données existant (même modèle SqlDataAdapter), puis construit dynamiquement du HTML avec StringBuilder. Vous avez un contrôle total sur la mise en page à l'aide de HTML/CSS standard - aucun fichier de définition de rapport propriétaire n'est requis.
Comparaison des fonctionnalités
| Fonction | SSRS | IronPDF | |||
|---|---|---|---|---|---|
| : Infrastructure : | Serveur requis | Oui (Report Server) | Non | ||
| Licence SQL Server | Les exigences sont les suivantes | Pas nécessaire | |||
| Serveur Windows | Les exigences sont les suivantes | Toutes les plates-formes | |||
| Base de données requise | Oui (ReportServer DB) | Non | |||
| : Développement : | Concepteur visuel | Oui (.rdlc) | Éditeurs HTML | ||
| Format du modèle | RDLC/RDL | HTML/CSS/Razor | |||
| Sources de données | DSN intégré | Toutes les données C# | |||
| : Rendu : | HTML vers PDF | Non | Chromium complet | ||
| URL vers PDF | Non | Oui | |||
| Support CSS | Limité | CSS3 complet | |||
| JavaScript | Non | ES2024 complet | |||
| Graphiques | Intégré | Via les bibliothèques JS | |||
| : Déploiement : | Déploiement du rapport | Au serveur | Avec l'app | ||
| Configuration | Complexe | Simple | |||
| Entretien | Haut | Faible |
Problèmes de migration courants
Édition 1 : Définitions des rapports RDLC
SSRS: Utilise le format XML propriétaire .rdlc.
Solution: Convertir en modèles HTML :
- Ouvrir .rdlc dans Visual Studio
- Documenter la structure de la mise en page
- Recréer en HTML/CSS
- Utiliser Razor pour la liaison de données
Edition 2 : Sources de données partagées
SSRS:Chaînes de connexion dans Report Server.
Solution: Utilisez la couche d'accès aux données de votre application :
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
Sujet 3 : Interface utilisateur des paramètres de rapport
SSRS:Intégration d'invites de paramètres.
Solution: Construisez une interface utilisateur paramétrée dans votre application :
// 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)
Numéro 4 : Abonnements/Rapports programmés
SSRS: Moteur d'abonnement intégré.
Solution: Utiliser un cadre de travail en arrière-plan :
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
Liste de contrôle de la migration
Pré-migration
- Inventaire de tous les rapports SSRS(fichiers
.rdlc) - Sources et connexions des données du document
- Captures d'écran des mises en page des rapports à titre de référence visuelle
- Lister les paramètres de chaque rapport
- Notez les horaires d'abonnement
- Obtenez votre clé de licenceIronPDFsur IronPDF
Mises à jour du code
- Supprimer les packages ReportViewer
- Installer le package NuGet
IronPdf - Convertir les fichiers
.rdlcen modèles HTML - Remplacez
LocalReportparChromePdfRenderer - Remplacez
ReportDataSourcepar des données C# et des modèles HTML - Remplacez
ReportParameterpar une interpolation de chaîne - Remplacez
LocalReport.Render("PDF")parRenderHtmlAsPdf() - Implémenter les en-têtes/pieds de page avec
HtmlHeaderFooter - Ajouter l'initialisation de la licence au démarrage de l'application
Infrastructure
- Mise hors service du serveur de rapports de planification
- Migrer les abonnements vers le planificateur de tâches (Hangfire, etc.)
- Mettre à jour les scripts de déploiement
Essai
- Comparer visuellement le résultat PDF
- Vérifier l'exactitude des données
- Test de pagination
- Vérifier tous les paramètres
- Tests de performance

