Zum Fußzeileninhalt springen
VIDEOS

Wie man PDF-Dateien in der VB .NET-Bibliothek generiert | IronPDF

Die Migration von SQL Server Reporting Services (SSRS) zu IronPDF verwandelt Ihren PDF-Generierungs-Workflow von einer schwergewichtigen serverbasierten Infrastruktur in eine leichtgewichtige, prozessinterne Bibliothek, die direkt in jede .NET-Anwendung eingebettet werden kann. Dieser Leitfaden bietet einen vollständigen, schrittweisen Migrationspfad, der SQL Server-Abhängigkeiten, den Overhead des Berichtsservers und die Bindung an das Microsoft-Ökosystem eliminiert.

Warum von SSRS zu IronPDF migrieren

Verstehen von SSRS

SQL Server Reporting Services (SSRS) ist Microsofts Unternehmensberichtsplattform — eine komplette Suite zur Erstellung, Bereitstellung und Verwaltung von Berichten, eng integriert mit dem SQL Server-Ökosystem. Microsoft hat bestätigt, dass SSRS 2022 die letzte eigenständige Version ist: ab SQL Server 2025 konsolidieren sich On-Premises-Berichte in den Power BI Report Server (PBIRS), und keine neuen SSRS-Versionen werden ausgeliefert. SSRS2022 erhält Sicherheitsupdates bis 11. Januar 2033 in Übereinstimmung mit dem SQL Server 2022-Lebenszyklus (siehe die Reporting Services Consolidation FAQ).

Für viele PDF-Erstellungsszenarien ist die SSRS-Infrastruktur übermäßig. Wichtige Gründe für eine Migration sind:

  1. Ende der SSRS-Linie: SQL Server 2025 wird ohne SSRS ausgeliefert; PBIRS ersetzt es. Neue Arbeiten, die sich auf SSRS richten, führen in eine Sackgasse.
  2. Schwere Infrastruktur: Erfordert SQL Server, Report Server und (für den älteren Web Forms-Viewer) IIS-Konfiguration
  3. Lock-in im Microsoft-Ökosystem: An SQL Server-Lizenzierung und Windows-Server gebunden
  4. Komplexe Bereitstellung: Berichtsbereitstellung, Sicherheitskonfiguration und Abonnementverwaltung
  5. Teure Lizenzierung: SQL Server-Lizenzen, insbesondere für Enterprise-Funktionen
  6. Kein erstklassiger .NET Core Support: Microsofts Microsoft.ReportingServices.ReportViewerControl.WebForms / .Winforms-Pakete sind nur auf das .NET Framework 4.0–4.8.1 ausgelegt. .NET Core / .NET 5+-Benutzer verlassen sich auf den Community-Port ReportViewerCore.NETCore.
  7. Wartungsaufwand: Server-Patching, Datenbankwartung, Berichtsverwaltung
  8. Keine Cloud-native Option: Für lokale Bereitstellung entworfen, Cloud-Unterstützung ist umständlich

Wenn SSRS überflüssig ist

Ihr Bedarf SSRS-Gemeinkosten
Rechnungen generieren Vollständiger Berichtsserver
Datentabellen exportieren SQL Server-Lizenz
PDFs aus Daten erstellen Windows-Server
Einfache Dokumentenerstellung Berichtsabonnements

IronPDF bietet prozessbegleitende PDF-Erzeugung ohne Server-Infrastruktur.

SSRS vs IronPDF Vergleich

Feature SSRS IronPDF
Abhängigkeit Benötigt SQL Server Keine spezifische Datenbank-Abhängigkeit
Einsatz Serverbasiert Bibliothek (eingebettet in Anwendungen)
Integration Enge Integration mit Microsoft Funktioniert mit jeder Datenquelle
Datenvisualisierung Umfangreiche native Optionen PDF-orientierte Visualisierungen
Komplexität Hoch (Servereinrichtung erforderlich) Mäßig bis gering (Einrichtung der Bibliothek)
Kosten SQL Server-Lizenzierungskosten Kosten für die Lizenzierung pro Entwickler
HTML zu PDF Nein Vollständiges Chromium
URL zu PDF Nein Ja
CSS-Unterstützung Beschränkt Vollständig CSS3
JavaScript Nein Vollständiger ES2024

IronPDF ist im Gegensatz zu SSRS nicht an eine bestimmte Datenbank oder ein Server-Ökosystem gebunden. Es bietet Entwicklern eine flexible Bibliothek zur dynamischen Erstellung, Bearbeitung und Manipulation von PDF-Dokumenten direkt in C#. Diese Entkopplung von einer serverbasierten Infrastruktur bietet einen spürbaren Vorteil: Sie ist einfach und anpassungsfähig und eignet sich für eine Vielzahl von Anwendungen, die über das Berichtswesen hinausgehen.

Für Teams, die modernes .NET annehmen, bietet IronPDF eine Chromium-Rendering-Engine, die die Infrastrukturkomplexität von SSRS eliminiert.


Bevor Sie beginnen

Voraussetzungen

  1. .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
  3. IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.

NuGet-Paketänderungen

# 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
# 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

Lizenz-Konfiguration

// 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"
$vbLabelText   $csharpLabel

Komplette API-Referenz

Namensraumänderungen

// 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
$vbLabelText   $csharpLabel

Kern-API-Zuordnungen

SSRS-Konzept IronPDF-Äquivalent Notizen
LocalReport ChromePdfRenderer Kern-Rendering
ServerReport RenderUrlAsPdf() URL-basiertes Rendering
.rdlc-Dateien HTML/CSS-Vorlagen Format der Vorlage
ReportParameter String-Interpolation Parameter
ReportDataSource C#-Daten + HTML Datenbindung
LocalReport.Render("PDF") RenderHtmlAsPdf() PDF-Ausgabe
SubReport Zusammengeführte PDFs Verschachtelte Berichte
Report Server URL Nicht erforderlich Kein Server erforderlich
ReportViewer Steuerung Nicht erforderlich Direkte PDF-Erzeugung
Formate exportieren PDF ist nativ Gezielte Ausgabe

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in PDF

Vor (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
$vbLabelText   $csharpLabel

Nach (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
$vbLabelText   $csharpLabel

Dieses Beispiel verdeutlicht den grundlegenden architektonischen Unterschied. SSRS erfordert die Erstellung einer ReportViewer-Instanz, das Laden einer .rdlc-Berichtdefinitionsdatei, das Festlegen von Parametern und dann den Aufruf von LocalReport.Render("PDF") mit mehreren out-Parametern für Metadaten.

IronPDF verwendet einen ChromePdfRenderer mit RenderHtmlAsPdf() in nur drei Codezeilen. Es sind keine Berichtsdefinitionsdateien, keine Parameterobjekte und keine Metadaten erforderlich. Umfassende Beispiele finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: URL zu PDF mit Kopf- und Fußzeilen

Vor (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
$vbLabelText   $csharpLabel

Nach (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
$vbLabelText   $csharpLabel

SSRS kann URLs nicht direkt in PDF konvertieren. Sie müssen HTML-Inhalt manuell mit WebClient.DownloadString() herunterladen, eine separate .rdlc-Berichtdatei erstellen, das HTML und den Kopf-/Fußzeilentext als ReportParameter-Arrays übermitteln und dann mit der komplexen Render()-Methodensignatur rendern.

IronPDF's RenderUrlAsPdf() erledigt den gesamten Prozess in einem einzigen Aufruf. Kopf- und Fußzeilen werden mit HtmlHeaderFooter-Objekten konfiguriert, die vollständiges HTML/CSS und Platzhalter wie {page} und {total-pages} unterstützen. Erfahren Sie mehr in unseren Tutorials.

Beispiel 3: Datenbankgesteuerter Bericht

Vor (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
$vbLabelText   $csharpLabel

Nach (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
$vbLabelText   $csharpLabel

SSRS erfordert eine vordesignte .rdlc-Berichtdatei ("SalesReport.rdlc"), das Ausfüllen einer DataSet, das Erstellen einer ReportDataSource mit einem bestimmten Namen ("SalesDataSet"), der mit der Berichtdefinition übereinstimmen muss, das Löschen bestehender Datenquellen, das Hinzufügen der neuen Datenquelle und dann das Rendern.

IronPDF verwendet Ihren vorhandenen Datenzugriffscode (gleiches SqlDataAdapter-Muster), dann baut es HTML dynamisch mit StringBuilder auf. Sie haben die volle Kontrolle über das Layout unter Verwendung von Standard-HTML/CSS - es sind keine proprietären Berichtsdefinitionsdateien erforderlich.


Funktionsvergleich

Feature SSRS IronPDF
Infrastruktur : Server erforderlich Ja (Berichtsserver) Nein
SQL Server-Lizenz Erforderlich Nicht erforderlich
Windows-Server Erforderlich Jede Plattform
Datenbank erforderlich Ja (ReportServer DB) Nein
: Entwicklung : Visueller Designer Ja (.rdlc) HTML-Editoren
Format der Vorlage RDLC/RDL HTML/CSS/Razor
Datenquellen Eingebauter DSN Alle C#-Daten
: Rendering : HTML zu PDF Nein Vollständiges Chromium
URL zu PDF Nein Ja
CSS-Unterstützung Beschränkt Vollständig CSS3
JavaScript Nein Vollständiger ES2024
Diagramme Eingebaut Über JS-Bibliotheken
Bereitstellung : Bereitstellung des Berichts Zum Server Mit App
Konfiguration Komplex Einfach
Wartung Hoch Niedrig

Gängige Probleme bei der Migration

Ausgabe 1: Definitionen des RDLC-Berichts

SSRS: Verwendet das proprietäre XML-Format .rdlc.

Lösung: Konvertierung in HTML-Vorlagen:

  1. .rdlc in Visual Studio öffnen
  2. Dokumentieren Sie die Layout-Struktur
  3. Neu erstellen in HTML/CSS
  4. Razor für die Datenbindung verwenden

Ausgabe 2: Gemeinsame Datenquellen

SSRS: Verbindungszeichenfolgen in Report Server.

Lösung: Verwenden Sie die Datenzugriffsschicht Ihrer Anwendung:

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
$vbLabelText   $csharpLabel

Ausgabe 3: Berichtsparameter UI

SSRS: Eingebaute Parameteraufforderungen.

Lösung: Erstellen Sie Parameter UI in Ihrer Anwendung:

// 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)
$vbLabelText   $csharpLabel

Ausgabe 4: Abonnements/geplante Berichte

SSRS: Eingebautes Abonnement-System.

Lösung: Verwenden Sie das Framework für Hintergrundaufträge:

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

Migrations-Checkliste

Vor der Migration

  • Alle SSRS-Berichte inventarisieren (.rdlc-Dateien)
  • Dokumentdatenquellen und Verbindungen
  • Screenshot-Berichtslayouts zur visuellen Orientierung
  • Liste der Berichtsparameter für jeden Bericht
  • Beachten Sie die Abonnementpläne
  • Den IronPDF Lizenzschlüssel erhalten Sie unter IronPDF

Code-Aktualisierungen

  • ReportViewer-Pakete entfernen
  • IronPdf NuGet-Paket installieren
  • .rdlc-Dateien in HTML-Vorlagen konvertieren
  • Ersetzen von LocalReport durch ChromePdfRenderer
  • Ersetzen von ReportDataSource mit C#-Daten + HTML-Vorlagen
  • Ersetzen von ReportParameter mit Zeichenketteninterpolation
  • Ersetzen von LocalReport.Render("PDF") durch RenderHtmlAsPdf()
  • Implementieren von Kopf-/Fußzeilen mit HtmlHeaderFooter
  • Lizenzinitialisierung beim Anwendungsstart hinzufügen

Infrastruktur

  • Außerbetriebnahme des Planberichtservers
  • Abonnements zum Job-Scheduler migrieren (Hangfire usw.)
  • Bereitstellungsskripte aktualisieren

Testen

  • PDF-Ausgabe visuell vergleichen
  • Datengenauigkeit überprüfen
  • Test der Paginierung
  • Alle Parameter prüfen
  • Leistungstests

Hinweis:SSRS ist ein eingetragenes Warenzeichen seines jeweiligen Eigentümers. Diese Website steht in keiner Verbindung zu Microsoft und wird nicht von Microsoft unterstützt oder gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an