Zum Fußzeileninhalt springen
VIDEOS

Wie man Ansichten in PDFs in ASPNET konvertiert

Die Migration von SAP-Kristallberichtezu IronPDF transformiert Ihren Berichtsablauf von einer MSI-Redistributable mit COM-Ära-Abhängigkeiten zu einem modernen NuGet-Paket. Dieser Leitfaden bietet einen schrittweisen Migrationspfad, der die Notwendigkeit eines Laufzeitinstallationsprogramms beseitigt, die Bindung an das SAP-Ökosystem aufhebt und .NET 6/8/9 und Linux/Docker-Ziele freischaltet, die Crystal Reports für Visual Studio (CR4VS) nicht unterstützt.

Warum von SAP-Kristallberichtezu IronPDF migrieren

SAP-Kristallberichtekennenlernen

SAP Crystal Reports ist eine Unternehmensberichtsplattform, die weit verbreitet für die Erstellung 'pixelperfekter' Berichte verwendet wird und die breite Datenquellenanbindung sowie ein langjähriges Designer-Ökosystem bietet. Der Crystal Reports Designer bleibt ein produktives Werkzeug zum Erstellen komplexer Berichtslayouts innerhalb des SAP-Stacks.

Jedoch schafft die COM-Ära-Architektur und das ausschließlich Windows/.NET-Framework-Fußabdruck des Runtime Friktionen für Teams, die auf .NET 6/8/9, Linux oder Container-First-Bereitstellungen zielen.

Wichtige Gründe für die Migration

  1. Runtime MSI Redistributable: Crystal Reports Runtime wird als MSI-Installer ausgeliefert (typischerweise Dutzende bis mehrere hundert MB je nach 32/64-Bit und Lokalisierung) und nicht als NuGet-Paket
  2. SAP-Ökosystem-Bindung: Gebunden an SAPs Veröffentlichungszyklen und Produkt-Roadmap; SAP hat das Ende der Mainstream-Wartung für CR4VS Ende 2027 bestätigt
  3. Lizenzierung: CR4VS selbst ist kostenlos herunterladbar und der Runtime ist kostenlos weiterverteilbar, aber die Crystal Reports Designer-Familie (CR 2020 / CR 2025) und die BI-Plattform sind kommerzielle SAP-SKUs
  4. Legacy-Architektur: COM-abhängige Runtime-DLLs zielen auf.NET Framework 4.xund können unter .NET Core / .NET 5+nicht geladen werden
  5. Keine .NET Core / .NET 5+Unterstützung: Es gibt keine Roadmap für eine Crystal Reports Runtime, die auf modernes .NET abzielt; Projekte bleiben an.NET Framework 4.xgebunden
  6. 32-Bit Runtime eingestellt: SAP hat bestätigt, dass die 32-Bit-CR-.NET-Runtime nach SP 39 (Dezember 2025) eingestellt wird; Zukünftige Service Packs sind nur 64-Bit
  7. Berichtsentwurfsabhängigkeit: Erforderlich ist die CR4VS Visual Studio-Erweiterung oder ein eigenständiger Crystal Reports-Designer, um .rpt Dateien zu erstellen

Die versteckten Kosten von SAP Crystal Reports

Kostenfaktor SAP-Kristallberichte IronPDF
Runtime-Verteilung MSI-redistributable Installer NuGet-Paket
Installation Runtime-Installer + VS-Erweiterung dotnet add package IronPdf
Bereitstellung Führen Sie MSI auf dem Zielcomputer aus xcopy / publish
64-Bit-Unterstützung Ja (32-Bit-Runtime endet nach SP 39, Dez 2025) Native
.NET Core / .NET 5+ Nicht unterstützt (nur Framework 4.x) Vollständige Unterstützung (.NET 6/8/9, Framework 4.6.2+)
Cloud-Bereitstellung Nur Windows-VMs Einfach
Linux / Docker Nicht unterstützt (nur Windows) Unterstützt

Vergleich zwischen SAP-Kristallberichteund IronPDF

Feature SAP-Kristallberichte IronPDF
Hauptfunktionalität Plattform für Unternehmensberichte HTML-zu-PDF-Konvertierungsmodul und PDF-Bearbeitung
Integration Am besten innerhalb des SAP-Ökosystems Moderne .NET-Integration, leichtgewichtiges NuGet-Paket
Benutzerfreundlichkeit Komplexe Einrichtung und Bereitstellung Vereinfachte Integration, unterstützt .NET-Entwickler
Berichtsdesigner Erforderlich Fakultativ (HTML/CSS)
Vorlage Format .rpt (binär) HTML/CSS
HTML zu PDF Nein Vollständiges Chromium
URL zu PDF Nein Ja
CSS-Unterstützung Nein Vollständig CSS3
JavaScript Nein Vollständiger ES2024
PDF-Bearbeitung Nein Vollständig (zusammenführen, aufteilen, bearbeiten)
Digitale Signaturen Nein Ja
PDF/A-Konformität Nein Ja
Moderne Relevanz Rückläufig, ersetzt durch moderne Alternativen Modern, gut integriert mit zeitgenössischen Technologien

Für Teams, die auf modernes .NET (6, 8, 9) und plattformübergreifende Bereitstellungen abzielen, bietet IronPDF native Unterstützung, die die Crystal Reports-Runtime – fixiert auf.NET Framework 4.x– nicht leisten kann.


Bevor Sie beginnen

Voraussetzungen

  1. .NET Environment: .NET Framework 4.6.2+ or .NET 6 / 8 / 9
  2. NuGet -Zugriff: Möglichkeit zur Installationvon NuGet-Paketen
  3. IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.

NuGet-Paketänderungen

# Crystal Reports for Visual Studio is not distributed by SAP on NuGet.
# Projects typically reference the GAC-installed CrystalDecisions.*.dll
# assemblies delivered by the CR4VS / CR runtime MSI. Community-maintained
# NuGetwrappers such as CrystalReports.Engine exist for build automation
# but are not official SAP packages.

# 1. Remove direct assembly references (CrystalDecisions.*.dll) from your .csproj
# 2. If using a community NuGetwrapper, remove it:
dotnet remove package CrystalReports.Engine

# 3. Uninstall the Crystal Reports runtime MSI from build/deploy targets

# 4. Install IronPDF
dotnet add package IronPdf
# Crystal Reports for Visual Studio is not distributed by SAP on NuGet.
# Projects typically reference the GAC-installed CrystalDecisions.*.dll
# assemblies delivered by the CR4VS / CR runtime MSI. Community-maintained
# NuGetwrappers such as CrystalReports.Engine exist for build automation
# but are not official SAP packages.

# 1. Remove direct assembly references (CrystalDecisions.*.dll) from your .csproj
# 2. If using a community NuGetwrapper, remove it:
dotnet remove package CrystalReports.Engine

# 3. Uninstall the Crystal Reports runtime MSI from build/deploy targets

# 4. 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: SAP Crystal Reports
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportAppServer;

// After: IronPDF
using IronPdf;
// Before: SAP Crystal Reports
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportAppServer;

// After: IronPDF
using IronPdf;
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports CrystalDecisions.ReportAppServer

Imports IronPdf
$vbLabelText   $csharpLabel

Kern-API-Zuordnungen

SAP-Kristallberichte IronPDF Notizen
ReportDocument ChromePdfRenderer Kern-Rendering
ReportDocument.Load() RenderHtmlAsPdf() Inhalt laden
.rpt Dateien HTML/CSS-Vorlagen Format der Vorlage
SetDataSource() HTML mit Daten Datenbindung
SetParameterValue() String-Interpolation Parameter
ExportToDisk() pdf.SaveAs() Datei speichern
ExportToStream() pdf.BinaryData Bytes erhalten
PrintToPrinter() pdf.Print() Drucken
Database.Tables C# Datenzugriff Datenquelle
FormulaFieldDefinitions C#-Logik Berechnungen
SummaryInfo pdf.MetaData PDF-Metadaten
ExportFormatType.PortableDocFormat Standard-Ausgabe PDF nativ

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in PDF

Vor (SAP Crystal Reports):

// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;

class Program
{
    static void Main()
    {
        // Crystal Reports requires a .rpt file template
        ReportDocument reportDocument = new ReportDocument();
        reportDocument.Load("Report.rpt");

        // Crystal Reports doesn't directly support HTML
        // You need to bind data to the report template
        // reportDocument.SetDataSource(dataSet);

        ExportOptions exportOptions = reportDocument.ExportOptions;
        exportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
        exportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

        DiskFileDestinationOptions diskOptions = new DiskFileDestinationOptions();
        diskOptions.DiskFileName = "output.pdf";
        exportOptions.DestinationOptions = diskOptions;

        reportDocument.Export();
        reportDocument.Close();
        reportDocument.Dispose();
    }
}
// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;

class Program
{
    static void Main()
    {
        // Crystal Reports requires a .rpt file template
        ReportDocument reportDocument = new ReportDocument();
        reportDocument.Load("Report.rpt");

        // Crystal Reports doesn't directly support HTML
        // You need to bind data to the report template
        // reportDocument.SetDataSource(dataSet);

        ExportOptions exportOptions = reportDocument.ExportOptions;
        exportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
        exportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

        DiskFileDestinationOptions diskOptions = new DiskFileDestinationOptions();
        diskOptions.DiskFileName = "output.pdf";
        exportOptions.DestinationOptions = diskOptions;

        reportDocument.Export();
        reportDocument.Close();
        reportDocument.Dispose();
    }
}
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System

Class Program
    Shared Sub Main()
        ' Crystal Reports requires a .rpt file template
        Dim reportDocument As New ReportDocument()
        reportDocument.Load("Report.rpt")

        ' Crystal Reports doesn't directly support HTML
        ' You need to bind data to the report template
        ' reportDocument.SetDataSource(dataSet)

        Dim exportOptions As ExportOptions = reportDocument.ExportOptions
        exportOptions.ExportDestinationType = ExportDestinationType.DiskFile
        exportOptions.ExportFormatType = ExportFormatType.PortableDocFormat

        Dim diskOptions As New DiskFileDestinationOptions()
        diskOptions.DiskFileName = "output.pdf"
        exportOptions.DestinationOptions = diskOptions

        reportDocument.Export()
        reportDocument.Close()
        reportDocument.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        // Create a PDF from HTML string
        var renderer = new ChromePdfRenderer();

        string htmlContent = "<h1>Hello World</h1><p>This is a PDF generated from HTML.</p>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF from HTML string
        var renderer = new ChromePdfRenderer();

        string htmlContent = "<h1>Hello World</h1><p>This is a PDF generated from HTML.</p>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        ' Create a PDF from HTML string
        Dim renderer As New ChromePdfRenderer()

        Dim htmlContent As String = "<h1>Hello World</h1><p>This is a PDF generated from HTML.</p>"

        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")

        Console.WriteLine("PDF created successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

Dieses Beispiel verdeutlicht den grundlegenden Paradigmenunterschied. SAP-Kristallberichteerfordert eine vorentworfene .rpt Dateivorlage, erstellt im Crystal Reports Designer, danach müssen Sie ExportOptions, ExportDestinationType, ExportFormatType, und DiskFileDestinationOptions konfigurieren. Die Bibliothek unterstützt keine direkten HTML-Inhalte - Sie müssen Daten an die Berichtsvorlage binden.

IronPDF akzeptiert HTML-Strings direkt: erstellen Sie ein ChromePdfRenderer, rufen Sie RenderHtmlAsPdf() mit beliebigem HTML-Inhalt auf und SaveAs(). Kein Designer erforderlich, keine binären Vorlagen, keine komplexe Exportkonfiguration. Umfassende Beispiele finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Konvertierung von URL in PDF

Vor (SAP Crystal Reports):

// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
using System.Net;

class Program
{
    static void Main()
    {
        // Crystal Reports cannot directly convert URLs to PDF
        // You need to create a report template first

        // Download HTML content
        WebClient client = new WebClient();
        string htmlContent = client.DownloadString("https://example.com");

        // Crystal Reports requires .rpt template and data binding
        // This approach is not straightforward for URL conversion
        ReportDocument reportDocument = new ReportDocument();
        reportDocument.Load("WebReport.rpt");

        // Manual data extraction and binding required
        // reportDocument.SetDataSource(extractedData);

        reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf");
        reportDocument.Close();
        reportDocument.Dispose();
    }
}
// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;
using System.Net;

class Program
{
    static void Main()
    {
        // Crystal Reports cannot directly convert URLs to PDF
        // You need to create a report template first

        // Download HTML content
        WebClient client = new WebClient();
        string htmlContent = client.DownloadString("https://example.com");

        // Crystal Reports requires .rpt template and data binding
        // This approach is not straightforward for URL conversion
        ReportDocument reportDocument = new ReportDocument();
        reportDocument.Load("WebReport.rpt");

        // Manual data extraction and binding required
        // reportDocument.SetDataSource(extractedData);

        reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf");
        reportDocument.Close();
        reportDocument.Dispose();
    }
}
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System
Imports System.Net

Module Program
    Sub Main()
        ' Crystal Reports cannot directly convert URLs to PDF
        ' You need to create a report template first

        ' Download HTML content
        Dim client As New WebClient()
        Dim htmlContent As String = client.DownloadString("https://example.com")

        ' Crystal Reports requires .rpt template and data binding
        ' This approach is not straightforward for URL conversion
        Dim reportDocument As New ReportDocument()
        reportDocument.Load("WebReport.rpt")

        ' Manual data extraction and binding required
        ' reportDocument.SetDataSource(extractedData)

        reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf")
        reportDocument.Close()
        reportDocument.Dispose()
    End Sub
End Module
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        // Create a PDF from a URL
        var renderer = new ChromePdfRenderer();

        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created from URL successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create a PDF from a URL
        var renderer = new ChromePdfRenderer();

        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created from URL successfully!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        ' Create a PDF from a URL
        Dim renderer As New ChromePdfRenderer()

        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("output.pdf")

        Console.WriteLine("PDF created from URL successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

SAP Crystal Reports kann URLs nicht direkt in PDF konvertieren. Sie müssten den HTML-Inhalt manuell mit WebClient herunterladen, dann irgendwie diese Daten extrahieren und an eine vorentworfene .rpt Vorlage binden—ein Prozess, der nicht einfach ist und erhebliche manuelle Arbeit erfordert.

Die RenderUrlAsPdf() Methode von IronPDF erfasst die vollständig gerenderte Webseite mit allen CSS, JavaScriptund Bildern in einem einzigen Aufruf. Erfahren Sie mehr in unseren Tutorials.

Beispiel 3: Kopf- und Fußzeilen mit Seitenzahlen

Vor (SAP Crystal Reports):

// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;

class Program
{
    static void Main()
    {
        // Crystal Reports requires design-time configuration
        ReportDocument reportDocument = new ReportDocument();
        reportDocument.Load("Report.rpt");

        // Headers and footers must be designed in the .rpt file
        // using Crystal Reports designer
        // You can set parameter values programmatically
        reportDocument.SetParameterValue("HeaderText", "Company Name");
        reportDocument.SetParameterValue("FooterText", "Page ");

        // Crystal Reports handles page numbers through formula fields
        // configured in the designer

        reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf");
        reportDocument.Close();
        reportDocument.Dispose();
    }
}
// NuGet: Install-Package CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System;

class Program
{
    static void Main()
    {
        // Crystal Reports requires design-time configuration
        ReportDocument reportDocument = new ReportDocument();
        reportDocument.Load("Report.rpt");

        // Headers and footers must be designed in the .rpt file
        // using Crystal Reports designer
        // You can set parameter values programmatically
        reportDocument.SetParameterValue("HeaderText", "Company Name");
        reportDocument.SetParameterValue("FooterText", "Page ");

        // Crystal Reports handles page numbers through formula fields
        // configured in the designer

        reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf");
        reportDocument.Close();
        reportDocument.Dispose();
    }
}
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System

Class Program
    Shared Sub Main()
        ' Crystal Reports requires design-time configuration
        Dim reportDocument As New ReportDocument()
        reportDocument.Load("Report.rpt")

        ' Headers and footers must be designed in the .rpt file
        ' using Crystal Reports designer
        ' You can set parameter values programmatically
        reportDocument.SetParameterValue("HeaderText", "Company Name")
        reportDocument.SetParameterValue("FooterText", "Page ")

        ' Crystal Reports handles page numbers through formula fields
        ' configured in the designer

        reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "output.pdf")
        reportDocument.Close()
        reportDocument.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        // Configure headers and footers
        renderer.RenderingOptions.TextHeader.CenterText = "Company Name";
        renderer.RenderingOptions.TextHeader.FontSize = 12;

        renderer.RenderingOptions.TextFooter.LeftText = "Confidential";
        renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}";
        renderer.RenderingOptions.TextFooter.FontSize = 10;

        string htmlContent = "<h1>Document Title</h1><p>Document content goes here.</p>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF with headers and footers created!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        // Configure headers and footers
        renderer.RenderingOptions.TextHeader.CenterText = "Company Name";
        renderer.RenderingOptions.TextHeader.FontSize = 12;

        renderer.RenderingOptions.TextFooter.LeftText = "Confidential";
        renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}";
        renderer.RenderingOptions.TextFooter.FontSize = 10;

        string htmlContent = "<h1>Document Title</h1><p>Document content goes here.</p>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF with headers and footers created!");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()

        ' Configure headers and footers
        renderer.RenderingOptions.TextHeader.CenterText = "Company Name"
        renderer.RenderingOptions.TextHeader.FontSize = 12

        renderer.RenderingOptions.TextFooter.LeftText = "Confidential"
        renderer.RenderingOptions.TextFooter.RightText = "Page {page} of {total-pages}"
        renderer.RenderingOptions.TextFooter.FontSize = 10

        Dim htmlContent As String = "<h1>Document Title</h1><p>Document content goes here.</p>"

        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")

        Console.WriteLine("PDF with headers and footers created!")
    End Sub
End Module
$vbLabelText   $csharpLabel

SAP Crystal Reports erfordert die Konfiguration von Kopf- und Fußzeilen während der Entwurfszeit. Sie müssen sie in der .rpt Datei mit dem Crystal Reports Designer entwerfen, dann Parameterwerte wie "HeaderText" und "FooterText" zur Laufzeit übergeben. Seitenzahlen müssen über Formelfeldfelder im Designer konfiguriert werden.

IronPDF bietet programmatische Kopf-/Fußzeilenkonfiguration mit TextHeader und TextFooter Eigenschaften. Setzen Sie CenterText, LeftText, RightText, und FontSize direkt im Code. Seitenzahlen verwenden die {page} und {total-pages} Platzhalter—kein Designer erforderlich.


Gängige Probleme bei der Migration

Aufgabe 1: Konvertierung von .rpt-Dateien

SAP Crystal Reports: Binäre .rpt-Dateien mit eingebettetem Layout, Daten und Formeln.

Lösung: Kann nicht direkt konvertiert werden - muss als HTML neu erstellt werden:

  1. .rpt im Crystal Reports Designer öffnen
  2. Dokumentlayout, Schriftarten, Farben
  3. Alle Formelfelder beachten
  4. Neu erstellen in HTML/CSS
  5. Formeln in C#-Code umwandeln

Ausgabe 2: Datenbank-Verbindungen

SAP Crystal Reports: Eingebettete Verbindungszeichenfolgen und ODBC.

Lösung: Verwenden Sie die Datenschicht Ihrer Anwendung:

// Instead of Crystal's database integration
var data = await _dbContext.Orders
    .Where(o => o.Date >= startDate && o.Date <= endDate)
    .ToListAsync();

// Bind to HTML template
var html = GenerateReportHtml(data);
// Instead of Crystal's database integration
var data = await _dbContext.Orders
    .Where(o => o.Date >= startDate && o.Date <= endDate)
    .ToListAsync();

// Bind to HTML template
var html = GenerateReportHtml(data);
Option Strict On



' Instead of Crystal's database integration
Dim data = Await _dbContext.Orders _
    .Where(Function(o) o.Date >= startDate AndAlso o.Date <= endDate) _
    .ToListAsync()

' Bind to HTML template
Dim html = GenerateReportHtml(data)
$vbLabelText   $csharpLabel

Ausgabe 3: Laufzeit-Abhängigkeiten

SAP Crystal Reports: Erfordert die Installationvon Crystal Reports Runtime (500MB+).

Lösung:IronPDF ist in sich geschlossen:

# Just add the NuGetpackage
dotnet add package IronPdf
# That's it - no additional installs needed
# Just add the NuGetpackage
dotnet add package IronPdf
# That's it - no additional installs needed
SHELL

Problem 4: 32-Bit/64-Bit und .NET-Framework-Bindung

SAP Crystal Reports: Der Crystal Reports Runtime ist COM-abhängig und wird in separaten 32-Bit- und 64-Bit-MSIs ausgeliefert. SAP hat bestätigt, dass die 32-Bit-CR-.NET-Runtime nach SP 39 (Dezember 2025) eingestellt wird; Zukünftige Service Packs sind nur 64-Bit. Die Runtime zielt auf.NET Framework 4.xund kann unter .NET Core / .NET 5+nicht geladen werden.

Lösung:IronPDF läuft auf .NET Framework 4.6.2+, .NET 6, .NET 8 und .NET 9 – einschließlich Linux und Docker. Keine spezielle Konfiguration ist für 64-Bit oder AnyCPU erforderlich.


Neue Funktionen nach der Migration

Nach der Migration auf IronPDF erhalten Sie Funktionen, die SAP-Kristallberichtenicht bieten kann:

PDF-Zusammenführung

var pdf1 = PdfDocument.FromFile("report1.pdf");
var pdf2 = PdfDocument.FromFile("report2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_report.pdf");
var pdf1 = PdfDocument.FromFile("report1.pdf");
var pdf2 = PdfDocument.FromFile("report2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_report.pdf");
Dim pdf1 = PdfDocument.FromFile("report1.pdf")
Dim pdf2 = PdfDocument.FromFile("report2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("complete_report.pdf")
$vbLabelText   $csharpLabel

PDF-Sicherheit

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(reportHtml);

pdf.MetaData.Title = "Quarterly Sales Report";
pdf.MetaData.Author = "Finance Department";

pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "view123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

pdf.SaveAs("secure_report.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(reportHtml);

pdf.MetaData.Title = "Quarterly Sales Report";
pdf.MetaData.Author = "Finance Department";

pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "view123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

pdf.SaveAs("secure_report.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(reportHtml)

pdf.MetaData.Title = "Quarterly Sales Report"
pdf.MetaData.Author = "Finance Department"

pdf.SecuritySettings.OwnerPassword = "admin123"
pdf.SecuritySettings.UserPassword = "view123"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False

pdf.SaveAs("secure_report.pdf")
$vbLabelText   $csharpLabel

Digitale Signaturen

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim signature = New PdfSignature("certificate.pfx", "password")
pdf.Sign(signature)
$vbLabelText   $csharpLabel

Wasserzeichen

using IronPdf.Editing;

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
using IronPdf.Editing;

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
Imports IronPdf.Editing

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>")
$vbLabelText   $csharpLabel

Zusammenfassung des Funktionsvergleichs

Feature SAP-Kristallberichte IronPDF
Installation : Runtime-Verteilung MSI-redistributable NuGet
Installationsmethode MSI + Visual Studio-Erweiterung NuGet
Bereitstellung Führen Sie MSI auf dem Zielcomputer aus xcopy / publish
Plattformunterstützung : .NET Framework 4.x Ja Ja (4.6.2+)
.NET Core / .NET 5+ Nicht unterstützt Ja (.NET 6/8/9)
64-Bit-Nativ Ja (32-Bit endet nach SP 39, Dez 2025) Ja
Linux / Docker Nicht unterstützt (nur Windows) Ja
Azure / AWS Nur Windows-VMs Einfach
: Entwicklung : Berichtsdesigner Erforderlich Fakultativ (HTML)
Format der Vorlage .rpt (binär) HTML/CSS
Lernkurve Crystal-Syntax Web-Standards
IntelliSense Nein Vollständiges C#
: Rendering : HTML zu PDF Nein Vollständiges Chromium
URL zu PDF Nein Ja
CSS-Unterstützung Nein Vollständig CSS3
JavaScript Nein Vollständiger ES2024
: PDF-Funktionen : PDFs zusammenführen Nein Ja
PDFs teilen Nein Ja
Wasserzeichen Beschränkt Vollständiges HTML
Digitale Signaturen Nein Ja
PDF/A Nein Ja

Migrations-Checkliste

Vor der Migration

  • Inventarisierung aller .rpt Dateien
  • Machen Sie zur Veranschaulichung einen Screenshot von jedem Berichtslayout.
  • Dokumentieren Sie Formelfelder und Berechnungen
  • Alle Datenquellen und Parameter auflisten
  • Druckanforderungen ermitteln
  • Den IronPDF Lizenzschlüssel erhalten Sie unter IronPDF

Code-Aktualisierungen

  • Entfernen von Crystal Reports-Paketen (CrystalDecisions.CrystalReports.Engine, usw.)
  • Laufzeitinstallation aus der Bereitstellung entfernen
  • Installieren des IronPdf NuGet-Pakets
  • Konvertieren von .rpt Layouts zu HTML/CSS-Vorlagen
  • Crystal-Formeln in C#-Code konvertieren
  • Aktualisieren der Datenbindung von SetDataSource() zu HTML-String-Interpolation
  • Aktualisieren des Druckcodes von PrintToPrinter() zu pdf.Print()
  • Lizenzinitialisierung beim Anwendungsstart hinzufügen

Infrastruktur

  • Crystal Runtime von den Servern entfernen
  • Bereitstellungsskripte aktualisieren
  • 32-Bit-Kompatibilitätsmodus entfernen
  • Docker-Images aktualisieren (falls zutreffend)

Testen

  • Vergleich der PDF-Ausgabe mit den Originalberichten
  • Alle Berechnungen überprüfen
  • Alle Parameter testen
  • Testdruckfunktion
  • Leistungstests
  • 64-Bit-Test

Hinweis:SAP Crystal Reports ist ein eingetragenes Markenzeichen seines jeweiligen Eigentümers. Diese Website ist nicht mit SAP verbunden, unterstützt oder wird von SAP gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. 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