Cómo migrar de SSRS a IronPDF en C#
La migración de SQL Server Reporting Services (SSRS) aIronPDFtransforma su flujo de trabajo de generación de PDF de una pesada infraestructura basada en servidor a una biblioteca ligera y en proceso que puede incrustarse directamente en cualquier aplicación .NET. Esta guía proporciona una ruta de migración completa, paso a paso, que elimina las dependencias de SQL Server, la sobrecarga del servidor de informes y la dependencia del ecosistema de Microsoft.
Por qué migrar de SSRSa IronPDF
Comprensión de SSRS
SQL Server Reporting Services (SSRS) es la plataforma de informes empresariales de Microsoft que requiere una importante inversión en infraestructura. SSRSes una plataforma integral de generación de informes de Microsoft que proporciona un conjunto completo para crear, implementar y gestionar informes, y ofrece funciones de informes interactivos y con muchas funciones. Desarrollado como parte del ecosistema de SQL Server, SSRSestá estrechamente integrado con las soluciones de bases de datos de Microsoft.
Sin embargo, para muchos escenarios de generación de PDF, la infraestructura de SSRSes excesiva. Las razones clave para migrar incluyen:
- Infraestructura pesada: requiere configuración de SQL Server, Report Server e IIS
- Bloqueo del ecosistema de Microsoft: vinculado a las licencias de SQL Server y Windows Server
- Implementación compleja: implementación de informes, configuración de seguridad y gestión de suscripciones
- Licencias costosas: Licencias de SQL Server, especialmente para funciones empresariales
- Soporte web limitado: difícil de integrar con los marcos SPA modernos
- Gastos generales de mantenimiento: parches de servidor, mantenimiento de bases de datos, gestión de informes
- No hay opción nativa de la nube: Diseñado para instalaciones locales, el soporte en la nube es complicado.
Cuando SSRSes excesivo
| Sus necesidades | Sobrecarga de SSRS |
|---|---|
| Generar facturas | Servidor de informes completo |
| Exportar tablas de datos | Licencia de SQL Server |
| Crear PDF a partir de datos | Servidor Windows |
| Generación sencilla de documentos | Suscripción a informes |
IronPDF proporciona generación de PDF en proceso sin ninguna infraestructura de servidor.
Comparación entre SSRSe IronPDF
| Característica | SSRS | IronPDF |
|---|---|---|
| Dependencia | Requiere SQL Server | Sin dependencia específica de la base de datos |
| Despliegue | Basado en servidor | Biblioteca (integrada en aplicaciones) |
| Integración | Estrecha integración con Microsoft | Funciona con cualquier fuente de datos |
| Visualización de datos | Amplias opciones nativas | Visualizaciones centradas en PDF |
| Complejidad | Alta (requiere configuración del servidor) | Moderado a bajo (configuración de la biblioteca) |
| Coste | Costes de licencia de SQL Server | Coste de licencia por desarrollador |
| HTML a PDF | No | Chromium completo |
| URL a PDF | No | Sí |
| Soporte CSS | Limitado | CSS3 completo |
| JavaScript | No | ES2024 completo |
IronPDF, a diferencia de SSRS, no está vinculado a ninguna base de datos o ecosistema de servidor específico. Proporciona a los desarrolladores una biblioteca flexible para crear, editar y manipular dinámicamente documentos PDF directamente en C#. Este desacoplamiento de una infraestructura basada en servidor ofrece una ventaja notable: es sencillo y adaptable, adecuado para una amplia gama de aplicaciones más allá de la elaboración de informes.
Para los equipos que planean la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona un moderno motor de renderizado Chromium que elimina la complejidad de la infraestructura de SSRS.
Antes de empezar
Prerrequisitos
- Entorno .NET : .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acceso a NuGet : Capacidad para instalar paquetes NuGet
- Licencia deIronPDF: Obtenga su clave de licencia en IronPDF
Cambios en el paquete 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
Configuración de licencias
// 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"
Referencia completa de la API
Cambios en el espacio de nombres
// 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
Mapeos de API principales
| Concepto de SSRS | Equivalente de IronPDF | Notas |
|---|---|---|
LocalReport |
ChromePdfRenderer |
Traducción básica |
ServerReport |
RenderUrlAsPdf() |
Representación basada en URL |
.rdlc archivos |
Plantillas HTML/CSS | Formato de la plantilla |
ReportParameter |
Interpolación de cadenas | Parámetros |
ReportDataSource |
Datos en C# + HTML | Vinculación de datos |
LocalReport.Render("PDF") |
RenderHtmlAsPdf() |
Resultados en PDF |
SubReport |
PDF fusionados | Informes anidados |
Report Server URL |
No es necesario | No se requiere servidor |
ReportViewer control |
No es necesario | Generación directa de PDF |
| Formatos de exportación | El PDF es nativo | Resultados específicos |
Ejemplos de migración de código
Ejemplo 1: Conversión de HTML a PDF
Antes (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
Despué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
Este ejemplo demuestra la diferencia arquitectónica fundamental. SSRSrequiere crear una instancia ReportViewer, cargar un archivo de definición de informe .rdlc, configurar parámetros y luego llamar a LocalReport.Render("PDF") con múltiples parámetros out para metadatos.
IronPDF utiliza un ChromePdfRenderer con RenderHtmlAsPdf() en solo tres líneas de código. No se requieren archivos de definición de informes, objetos de parámetros ni manejo de metadatos. Consulte la documentación HTML a PDF para ver ejemplos completos.
Ejemplo 2: URL a PDF con encabezados y pies de página
Antes (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
Despué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 no puede convertir directamente URL a PDF. Debe descargar manualmente el contenido HTML con WebClient.DownloadString(), crear un archivo de informe separado .rdlc, pasar el HTML y el texto del encabezado/pie de página como matrices ReportParameter y luego renderizar con la firma de método compleja Render().
RenderUrlAsPdf() deIronPDFmaneja todo el proceso en una sola llamada. Los encabezados y pies de página se configuran con objetos HtmlHeaderFooter que admiten HTML/CSS completo y marcadores de posición como {page} y {total-pages}. Más información en nuestros tutoriales.
Ejemplo 3: Informe basado en bases de datos
Antes (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
Despué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 requiere un archivo de informe prediseñado ("SalesReport.rdlc"), completar un DataSet, crear un ReportDataSource con un nombre específico ("SalesDataSet") que debe coincidir con la definición del informe, borrar las fuentes de datos existentes, agregar la nueva fuente de datos y luego renderizar.
IronPDF utiliza su código de acceso a datos existente (el mismo patrón SqlDataAdapter) y luego crea HTML dinámicamente con StringBuilder. Usted tiene el control total sobre el diseño utilizando HTML/CSS estándar, sin necesidad de archivos propietarios de definición de informes.
Comparación de características
| Característica | SSRS | IronPDF | |||
|---|---|---|---|---|---|
| : Infraestructura : | Servidor requerido | Sí (servidor de informes) | No | ||
| Licencia de SQL Server | Requerido | No es necesario | |||
| Servidor Windows | Requerido | Cualquier plataforma | |||
| Base de datos requerida | Sí (ReportServer DB) | No | |||
| : Desarrollo : | Diseñador visual | Sí (.rdlc) | Editores HTML | ||
| Formato de plantilla | RDLC/RDL | HTML/CSS/Razor | |||
| Fuentes de datos | DSN incorporado | Cualquier dato de C# | |||
| : Representación : | HTML a PDF | No | Chromium completo | ||
| URL a PDF | No | Sí | |||
| Soporte CSS | Limitado | CSS3 completo | |||
| JavaScript | No | ES2024 completo | |||
| Gráficos | Incorporado en | A través de bibliotecas JS | |||
| : Implementación : | Despliegue del informe | Para el servidor | Con app | ||
| Configuración | Complejo | Simple | |||
| Mantenimiento | Alta | Bajo |
Problemas comunes de migración
Número 1: Definiciones del informe RDLC
SSRS: Utiliza el formato propietario .rdlc XML.
Solución: Convertir a plantillas HTML:
- Abrir .rdlc en Visual Studio
- Documentar la estructura del diseño
- Recrear en HTML/CSS
- Utilizar Razor para la vinculación de datos
Número 2: Fuentes de datos compartidas
SSRS: Cadenas de conexión en Report Server.
Solución: Utiliza la capa de acceso a datos de tu aplicación:
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
Tema 3: Interfaz de usuario de parámetros de informe
SSRS: Avisos de parámetros incorporados.
Solución: Construya una interfaz de usuario paramétrica en su aplicación:
// 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)
Número 4: Suscripciones/Informes programados
SSRS: Motor de suscripción integrado.
Solución: Utilizar marco de trabajo de fondo:
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
Lista de comprobación de la migración
Pre-Migración
- Inventariar todos los informes SSRS(archivos (
.rdlc) - Documentar fuentes de datos y conexiones
- Diseños de informes de captura de pantalla para referencia visual
- Enumere los parámetros del informe para cada informe
- Horarios de suscripción de notas
- Obtenga la clave de licencia deIronPDFen IronPDF
Actualizaciones de código
- Eliminar paquetes de ReportViewer
- Instalar el paquete NuGet
IronPdf - Convertir archivos
.rdlcen plantillas HTML - Reemplace
LocalReportconChromePdfRenderer - Reemplace
ReportDataSourcecon datos de C# + plantillas HTML - Reemplazar
ReportParametercon interpolación de cadena - Reemplace
LocalReport.Render("PDF")conRenderHtmlAsPdf() - Implementar encabezados/pies de página con
HtmlHeaderFooter - Agregar inicialización de licencia al iniciar la aplicación
Infraestructura
- Desmantelamiento del servidor de informes del plan
- Migrar suscripciones al programador de trabajos (Hangfire, etc.)
- Actualizar scripts de implementación
Pruebas
- Comparar visualmente la salida PDF
- Verificar la exactitud de los datos
- Paginación de pruebas
- Compruebe todos los parámetros
- Pruebas de rendimiento

