Comment migrer de SAP Crystal Reports vers IronPDF en C#
La migration de SAP Crystal ReportsversIronPDFtransforme votre flux de travail de reporting d'une plateforme héritée lourde avec des exigences de déploiement complexes vers un package NuGetmoderne et léger. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine l'installation massive du runtime de plus de 500 Mo, supprime le verrouillage de l'écosystème SAP et permet une prise en charge complète de .NET Core/5/6/7/8+.
Pourquoi migrer de SAP Crystal Reportsvers IronPDF
Compréhension de SAP Crystal Reports
SAP Crystal Reports se distingue dans le domaine de l'entreprise en tant qu'outil permettant de générer des rapports dynamiques et "parfaits au pixel près". SAP Crystal Reports, reconnu pour sa capacité à se connecter à une multitude de sources de données, a été la solution de choix pour de nombreuses entreprises à la recherche de fonctionnalités de reporting complètes. La plateforme offre une puissance inégalée avec son Crystal Reports Designer, un outil qui simplifie la construction de mises en page de rapports complexes.
Cependant, avec l'évolution de la technologie, la forte dépendance de SAP Crystal Reportsà l'égard du cadre SAP et ses exigences élevées en matière d'installation et de déploiement ne peuvent pas passer inaperçues. En raison de la lourdeur du système, les entreprises ont souvent besoin de ressources importantes et de temps pour le mettre en œuvre et en assurer la maintenance.
Principales raisons de migrer
- Installation volumineuse : Crystal Reports Runtime pèse plus de 500 Mo et nécessite une installation complexe.
- Dépendance à l'écosystème SAP : Liée à la tarification, aux cycles de support et à la feuille de route produit de SAP
- Licences complexes : Licences par processeur/par utilisateur avec le processus de vente aux Enterprise de SAP
- Architecture héritée : dépendances COM 32 bits qui compliquent les déploiements modernes 64 bits
- Prise en charge obsolète de .NET Core: Prise en charge limitée des plateformes .NET modernes
- Dépendance à Report Designer : Nécessite les extensions Visual Studio ou un concepteur autonome
- Performances lentes : Initialisation d'exécution importante et forte consommation de mémoire
Les coûts cachés de SAP Crystal Reports
| Facteur coût | SAP Crystal Reports | IronPDF |
|---|---|---|
| Taille de l'exécution | 500MB+ | ~20 Mo |
| Installation | MSI/Setup complexe | Paquet NuGet |
| Déploiement | Installateurs spéciaux | xcopie |
| prise en charge 64 bits | Problématique | Natif |
| .NET Core/5/6/7/8 | Limité | Prise en charge |
| Déploiement dans le nuage | Difficultés | Simple |
| Linux/Docker | Non | Oui |
Comparaison SAP Crystal Reportsvs IronPDF
| Fonction | SAP Crystal Reports | IronPDF |
|---|---|---|
| Fonctionnalité principale | Plateforme de reporting d'entreprise | Moteur de conversion HTML-PDF et manipulation de PDF |
| Intégration | Meilleur au sein de l'écosystème SAP | Intégration .NET moderne, package NuGetléger |
| Facilité d'utilisation | Installationet déploiement complexes | Intégration simplifiée, prise en charge des développeurs .NET |
| Report Designer | Requis | Facultatif (HTML/CSS) |
| Format du modèle | .rpt (binaire) | HTML/CSS |
| HTML à PDF | Non | Chromium complet |
| URL vers PDF | Non | Oui |
| Support CSS | Non | CSS3 complet |
| JavaScript | Non | ES2024 complet |
| Manipulation de PDF | Non | Complet (fusionner, diviser, éditer) |
| Signatures numériques | Non | Oui |
| Conformité PDF/A | Non | Oui |
| Pertinence moderne | En déclin, remplacé par des alternatives modernes | Moderne, bien intégré aux technologies contemporaines |
Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 d'ici 2025 et 2026,IronPDFoffre une prise en charge native multiplateforme que SAP Crystal Reportsne peut pas offrir.
Avant de commencer
Prérequis
- Environnement .NET : .NET Framework4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Accès à NuGet : possibilité d'installer des packages NuGet
- Licence IronPDF : Obtenez votre clé de licence sur IronPDF
Modifications du paquet NuGet
# 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
Configuration de la licence
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Référence API complète
Modifications de l'espace de nommage
// Before: 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
Mappages de l'API de base
| SAP Crystal Reports | IronPDF | Notes |
|---|---|---|
ReportDocument |
ChromePdfRenderer |
Rendu de base |
ReportDocument.Load() |
RenderHtmlAsPdf() |
Charger le contenu |
.rpt fichiers |
Modèles HTML/CSS | Format du modèle |
SetDataSource() |
HTML avec données | Liaison de données |
SetParameterValue() |
Interpolation de chaînes de caractères | Paramètres |
ExportToDisk() |
pdf.SaveAs() |
Enregistrer le fichier |
ExportToStream() |
pdf.BinaryData |
Obtenir des octets |
PrintToPrinter() |
pdf.Print() |
Impression |
Database.Tables |
Accès aux données en C# | Source des données |
FormulaFieldDefinitions |
Logique C# | Calculs |
SummaryInfo |
pdf.MetaData |
Métadonnées PDF |
ExportFormatType.PortableDocFormat |
Résultat par défaut | PDF natif |
Exemples de migration de code
Exemple 1 : Conversion HTML vers PDF
Avant (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
Après (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
Cet exemple illustre la différence fondamentale de paradigme. SAP Crystal Reportsnécessite un modèle de fichier prédéfini .rpt créé dans le concepteur Crystal Reports, puis vous devez configurer ExportOptions, ExportDestinationType, ExportFormatType et DiskFileDestinationOptions. La bibliothèque ne prend pas directement en charge le contenu HTML : vous devez lier les données au modèle de rapport.
IronPDF accepte directement les chaînes HTML : créez un ChromePdfRenderer, appelez RenderHtmlAsPdf() avec n'importe quel contenu HTML, et SaveAs(). Aucun concepteur n'est requis, aucun modèle binaire n'est nécessaire, aucune configuration d'exportation complexe n'est requise. Consultez la documentation HTML vers PDF pour des exemples complets.
Exemple 2 : Conversion d'une URL en PDF
Avant (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
Après (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 ne peut pas convertir directement les URL en PDF. Vous devrez télécharger manuellement le contenu HTML avec WebClient, puis extraire et lier ces données à un modèle prédéfini .rpt—un processus qui n'est pas simple et qui nécessite un travail manuel important.
La méthode RenderUrlAsPdf() d'IronPDF capture la page Web entièrement rendue avec tous les CSS, JavaScriptet images en un seul appel. Pour en savoir plus, consultez nos tutoriels.
Exemple 3 : En-têtes et pieds de page avec numéros de page
Avant (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
Après (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 nécessite une configuration des en-têtes et des pieds de page au moment de la conception. Vous devez les concevoir dans le fichier .rpt à l'aide de Crystal Reports Designer, puis transmettre les valeurs des paramètres tels que "HeaderText" et "FooterText" lors de l'exécution. La numérotation des pages doit être configurée via des champs de formule dans le concepteur.
IronPDF fournit une configuration programmatique d'en-tête/pied de page avec les propriétés TextHeader et TextFooter. Définissez directement dans le code CenterText, LeftText, RightText et FontSize. Les numéros de page utilisent les espaces réservés {page} et {total-pages} — aucun concepteur requis.
Problèmes de migration courants
Enjeu 1 : Conversion de fichiers .rpt
SAP Crystal Reports: Fichiers binaires .rpt avec mise en page, données et formules intégrées.
Solution: Impossible de convertir directement - il faut recréer en HTML :
- Ouvrir .rpt dans le concepteur Crystal Reports
- Mise en page du document, polices, couleurs
- Notez tous les champs de formule
- Recréer en HTML/CSS
- Convertir des formules en code C#
Edition 2 : Connexions aux bases de données
SAP Crystal Reports: Chaînes de connexion intégrées et ODBC.
Solution: Utilisez la couche de données de votre application :
// 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)
Enjeu 3 : Dépendances d'exécution
SAP Crystal Reports: Nécessite l'installation de Crystal Reports Runtime (500MB+).
Solution:IronPDFest autonome :
# 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
Numéro 4 : Questions relatives aux 32 bits/64 bits
SAP Crystal Reports: Les dépendances COM requièrent souvent le mode 32 bits.
Solution:IronPDFest un logiciel 64 bits natif - aucune configuration particulière n'est nécessaire.
Nouvelles capacités après la migration
Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités que SAP Crystal Reportsne peut pas vous offrir :
Fusion de fichiers PDF
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")
Sécurité des 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");
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")
Signatures numériques
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)
Filigranes
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
Résumé de la comparaison des fonctionnalités
| Fonction | SAP Crystal Reports | IronPDF | |||
|---|---|---|---|---|---|
| : Installation : | Taille de l'exécution | 500MB+ | ~20 Mo | ||
| Méthode d'installation | MSI/Setup.exe | NuGet | |||
| Déploiement | Complexe | xcopie | |||
| : Prise en charge de la plateforme : | .NET Framework | Oui | Oui | ||
| .NET Core/5/6/7/8 | Limité | Complet | |||
| 64-bit Native | Problématique | Oui | |||
| Linux/Docker | Non | Oui | |||
| Azure/AWS | Difficultés | Simple | |||
| : Développement : | Concepteur de rapports | Requis | Facultatif (HTML) | ||
| Format du modèle | .rpt (binaire) | HTML/CSS | |||
| Courbe d'apprentissage | Syntaxe du cristal | Normes Web | |||
| IntelliSense | Non | C# complet | |||
| : Rendu : | HTML vers PDF | Non | Chromium complet | ||
| URL vers PDF | Non | Oui | |||
| Support CSS | Non | CSS3 complet | |||
| JavaScript | Non | ES2024 complet | |||
| : Fonctionnalités du PDF : | Fusionner des PDF | Non | Oui | ||
| Diviser les PDF | Non | Oui | |||
| Filigranes | Limité | HTML complet | |||
| Signatures numériques | Non | Oui | |||
| PDF/A | Non | Oui |
Liste de contrôle de la migration
Pré-migration
- Inventaire de tous les fichiers
.rpt - Capturez une capture d'écran de chaque mise en page de rapport pour référence.
- Champs de formules et calculs des documents
- Lister toutes les sources de données et les paramètres
- Identifier les exigences d'impression
- Obtenez votre clé de licenceIronPDFsur IronPDF
Mises à jour du code
- Supprimer les packages Crystal Reports (
CrystalDecisions.CrystalReports.Engine, etc.) - Supprimer l'installation d'exécution du déploiement
- Installer le package NuGet
IronPdf - Convertir les mises en page
.rpten modèles HTML/CSS - Convertir les formules Crystal en code C#
- Mise à jour de la liaison de données de
SetDataSource()vers l'interpolation de chaînes HTML - Mettre à jour le code d'impression de
PrintToPrinter()àpdf.Print() - Ajouter l'initialisation de la licence au démarrage de l'application
Infrastructure
- Supprimer Crystal Runtime des serveurs
- Mettre à jour les scripts de déploiement
- Supprimer le mode de compatibilité 32 bits
- Mettre à jour les images Docker (le cas échéant)
Essai
- Comparer le fichier PDF généré aux rapports originaux
- Vérifier tous les calculs
- Tester tous les paramètres
- Fonctionnalité d'impression de test
- Tests de performance
- Tests 64 bits

