Migrieren von SAP Crystal Reports zu IronPDF in C#
Die Migration von SAP Crystal Reports zu IronPDF verwandelt Ihren Berichtsworkflow von einer schwergewichtigen Legacy-Plattform mit komplexen Bereitstellungsanforderungen in ein modernes, schlankes NuGet-Paket. Dieser Leitfaden bietet einen vollständigen, schrittweisen Migrationspfad, der die massive Laufzeitinstallation von mehr als 500 MB überflüssig macht, die Bindung an das SAP-Ökosystem beseitigt und die vollständige Unterstützung von .NET Core/5/6/7/8+ ermöglicht.
Warum von SAP Crystal Reports zu IronPDF migrieren
SAP Crystal Reports kennenlernen
SAP Crystal Reports zeichnet sich im Unternehmensbereich als Werkzeug zur Erstellung dynamischer und "pixelgenauer" Berichte aus. SAP Crystal Reports, das für seine Fähigkeit bekannt ist, eine Vielzahl von Datenquellen anzuschließen, ist für viele Unternehmen, die umfassende Berichtsfunktionen benötigen, die Lösung der Wahl. Die Plattform bietet mit dem Crystal Reports Designer, einem Tool, das die Erstellung komplexer Berichtslayouts vereinfacht, eine unübertroffene Leistung.
Da sich die Technologie jedoch weiterentwickelt hat, kann die starke Abhängigkeit von SAP Crystal Reports vom SAP-Framework und seine anspruchsvollen Installations- und Bereitstellungsanforderungen nicht unbemerkt bleiben. Da es sich um eine schwergewichtige Software handelt, benötigen Unternehmen oft erhebliche Ressourcen und Zeit, um das System vollständig zu implementieren und zu pflegen.
Wichtige Gründe für die Migration
- Umfangreiche Installation: Crystal Reports Runtime ist über 500 MB groß und erfordert eine komplexe Installation.
- SAP-Ökosystem-Lock-in: Verbunden mit SAPs Preisgestaltung, Supportzyklen und Produkt-Roadmap
- Komplexe Lizenzierung: Lizenzierung pro Prozessor/pro Benutzer mit dem Enterprise -Vertriebsprozess von SAP
- Legacy-Architektur: 32-Bit-COM-Abhängigkeiten, die moderne 64-Bit-Bereitstellungen verkomplizieren
- Eingeschränkte Unterstützung for .NET Core: Begrenzte Unterstützung für moderne .NET -Plattformen
- Abhängigkeit vom Berichtsdesigner: Erfordert Visual Studio-Erweiterungen oder einen eigenständigen Designer.
- Langsame Performance: Hoher Aufwand bei der Laufzeitinitialisierung und im Speicherbedarf.
Die versteckten Kosten von SAP Crystal Reports
| Kostenfaktor | SAP Crystal Reports | IronPDF |
|---|---|---|
| Laufzeit Größe | 500MB+ | ~20 MB |
| Installation | Komplexes MSI/Setup | NuGet-Paket |
| Bereitstellung | Spezielle Installationsprogramme | xcopy |
| 64-Bit-Unterstützung | Problematisch | Native |
| .NET Core/5/6/7/8 | Beschränkt | Unterstützt |
| Cloud-Bereitstellung | Schwierig | Einfach |
| Linux/Docker | No | Yes |
Vergleich zwischen SAP Crystal Reports und IronPDF
| Feature | SAP Crystal Reports | 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 | No | Vollständiges Chromium |
| URL zu PDF | No | Yes |
| CSS-Unterstützung | No | Vollständig CSS3 |
| JavaScript | No | Vollständiger ES2024 |
| PDF-Bearbeitung | No | Vollständig (zusammenführen, aufteilen, bearbeiten) |
| Digitale Signaturen | No | Yes |
| PDF/A-Konformität | No | Yes |
| Moderne Relevanz | Rückläufig, ersetzt durch moderne Alternativen | Modern, gut integriert mit zeitgenössischen Technologien |
Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, bietet IronPDF eine native plattformübergreifende Unterstützung, die SAP Crystal Reports nicht bieten kann.
Bevor Sie beginnen
Voraussetzungen
- .NET -Umgebung: .NET Framework4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet -Zugriff: Möglichkeit zur Installation von NuGet-Paketen
- IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.
NuGet-Paketänderungen
# Remove Crystal Reports packages
dotnet remove package CrystalDecisions.CrystalReports.Engine
dotnet remove package CrystalDecisions.Shared
dotnet remove package CrystalDecisions.ReportAppServer
dotnet remove package CrystalDecisions.Web
# Remove legacy assemblies from project references
# Install IronPDF
dotnet add package IronPdf
# Remove Crystal Reports packages
dotnet remove package CrystalDecisions.CrystalReports.Engine
dotnet remove package CrystalDecisions.Shared
dotnet remove package CrystalDecisions.ReportAppServer
dotnet remove package CrystalDecisions.Web
# Remove legacy assemblies from project references
# Install IronPDF
dotnet add package IronPdf
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"
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
Kern-API-Zuordnungen
| SAP Crystal Reports | 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() |
|
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
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
Dieses Beispiel verdeutlicht den grundlegenden Paradigmenunterschied. Für SAP Crystal Reports wird eine vordefinierte Dateivorlage .rpt benötigt, die im Crystal Reports Designer erstellt wurde. Anschließend 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 einen 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
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
SAP Crystal Reports kann URLs nicht direkt in PDF konvertieren. Sie müssten den HTML-Inhalt manuell mit WebClient herunterladen und diese Daten dann irgendwie extrahieren und an eine vordefinierte .rpt Vorlage binden – ein Prozess, der nicht einfach ist und einen erheblichen manuellen Aufwand erfordert.
Die Methode RenderUrlAsPdf() von IronPDF erfasst die vollständig gerenderte Webseite mit allen CSS-, JavaScriptund Bildinhalten 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
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
SAP Crystal Reports erfordert die Konfiguration von Kopf- und Fußzeilen während der Entwurfszeit. Sie müssen die Seitenzahlen in der Datei .rpt mithilfe des Crystal Reports Designers erstellen und anschließend zur Laufzeit Parameterwerte wie "HeaderText" und "FooterText" übergeben. Die Seitenzahlen müssen über Formelfelder im Designer konfiguriert werden.
IronPDF bietet programmatische Kopf- und Fußzeilenkonfiguration mit den Eigenschaften TextHeader und TextFooter. Setzen Sie CenterText, LeftText, RightText und FontSize direkt im Code. Seitenzahlen verwenden die Platzhalter {page} und {total-pages} – 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:
- .rpt im Crystal Reports Designer öffnen
- Dokumentlayout, Schriftarten, Farben
- Alle Formelfelder beachten
- Neu erstellen in HTML/CSS
- 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)
Ausgabe 3: Laufzeit-Abhängigkeiten
SAP Crystal Reports: Erfordert die Installation von 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
Ausgabe 4: 32-Bit/64-Bit-Probleme
SAP Crystal Reports: COM-Abhängigkeiten erfordern häufig den 32-Bit-Modus.
Lösung: IronPDF ist ein natives 64-Bit-System, das keine spezielle Konfiguration erfordert.
Neue Funktionen nach der Migration
Nach der Migration auf IronPDF erhalten Sie Funktionen, die SAP Crystal Reports nicht 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")
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")
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)
Wasserzeichen
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
Zusammenfassung des Funktionsvergleichs
| Feature | SAP Crystal Reports | IronPDF | |||
|---|---|---|---|---|---|
| Installation : | Laufzeit Größe | 500MB+ | ~20 MB | ||
| Installationsmethode | MSI/Setup.exe | NuGet | |||
| Bereitstellung | Komplex | xcopy | |||
| Plattformunterstützung : | .NET Framework | Yes | Yes | ||
| .NET Core/5/6/7/8 | Beschränkt | Voll | |||
| 64-Bit-Nativ | Problematisch | Yes | |||
| Linux/Docker | No | Yes | |||
| Azure/AWS | Schwierig | Einfach | |||
| : Entwicklung : | Berichtsdesigner | Erforderlich | Fakultativ (HTML) | ||
| Format der Vorlage | .rpt (binär) | HTML/CSS | |||
| Lernkurve | Crystal-Syntax | Web-Standards | |||
| IntelliSense | No | Vollständiges C# | |||
| : Rendering : | HTML zu PDF | No | Vollständiges Chromium | ||
| URL zu PDF | No | Yes | |||
| CSS-Unterstützung | No | Vollständig CSS3 | |||
| JavaScript | No | Vollständiger ES2024 | |||
| : PDF-Funktionen : | PDFs zusammenführen | No | Yes | ||
| PDFs teilen | No | Yes | |||
| Wasserzeichen | Beschränkt | Vollständiges HTML | |||
| Digitale Signaturen | No | Yes | |||
| PDF/A | No | Yes |
Migrations-Checkliste
Vor der Migration
- Inventarisierung aller
.rptDateien - 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
- Crystal Reports-Pakete entfernen (
CrystalDecisions.CrystalReports.Engine, etc.) - Laufzeitinstallation aus der Bereitstellung entfernen
- Installieren Sie das NuGet-Paket
IronPdf - Konvertierung von
.rptLayouts in HTML/CSS-Vorlagen - Crystal-Formeln in C#-Code konvertieren
- Datenbindung von
SetDataSource()auf HTML-String-Interpolation aktualisieren - Aktualisierung des Druckcodes von
PrintToPrinter()aufpdf.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

