Passer au contenu du pied de page
VIDéOS

Comment convertir les vues en PDFs dans ASPNET

Migrer de SAP Crystal Reportsà IronPDF transforme votre flux de travail de reporting d'un redistribuable MSI d'exécution avec des dépendances de l'ère COM à un package NuGetmoderne. Ce guide fournit un chemin de migration étape par étape qui élimine la nécessité d'un installateur runtime, lève l'enfermement dans l'écosystème SAP, et débloque les cibles .NET 6/8/9 et Linux/Docker que Crystal Reports pour Visual Studio (CR4VS) ne supporte pas.

Pourquoi migrer de SAP Crystal Reportsvers IronPDF

Compréhension de SAP Crystal Reports

SAP Crystal Reports est une plate-forme de reporting d'entreprise largement utilisée pour générer des rapports " pixel-perfect ", avec une connectivité de source de données large et un écosystème de designer de longue date. Le designer Crystal Reports reste un outil productif pour construire des mises en page de rapport complexes au sein de la pile SAP.

Cependant, l'architecture COM-era du runtime et l'empreinte uniquement Windows/.NET Framework créent des frictions pour les équipes ciblant .NET 6/8/9, Linux, ou des déploiements orientés conteneurs.

Principales raisons de migrer

  1. Redistribuable MSI d'exécution : Le runtime Crystal Reports est livré sous forme d'installateur MSI (généralement de quelques dizaines à quelques centaines de Mo selon le 32/64 bits et la locale) plutôt que d'un package NuGet
  2. Enfermement de l'écosystème SAP : Relié aux cycles de publication SAP et à la feuille de route du produit ; SAP a confirmé la fin de la maintenance principale pour CR4VS à la fin de 2027
  3. Licensing : CR4VS lui-même est gratuit à télécharger et le runtime est gratuit à redistribuer, mais la famille de designer Crystal Reports (CR 2020 / CR 2025) et la plateforme BI sont des SKUs SAP commerciaux
  4. Architecture héritée : Les DLLs runtime dépendantes de COM ciblent le .NET Framework 4.x et ne peuvent pas être chargés sous .NET Core / .NET 5+
  5. Pas de Support .NET Core / .NET 5+: Il n'y a pas de feuille de route pour un runtime de Crystal Reports ciblant le .NET moderne ; les projets restent fixés au .NET Framework 4.x
  6. Runtime 32 bits abandonné : SAP a confirmé que le runtime CR .NET 32 bits est abandonné après SP 39 (décembre 2025) ; les futurs packs service seront uniquement 64 bits
  7. Dépendance du Designer de rapport : Nécessite l'extension CR4VS pour Visual Studio ou un concepteur Crystal Reports autonome pour créer des fichiers .rpt

Les coûts cachés de SAP Crystal Reports

Facteur coût SAP Crystal Reports IronPDF
Distribution Runtime Installateur redistribuable MSI Paquet NuGet
Installation Installateur runtime + extension VS dotnet add package IronPdf
Déploiement Exécuter MSI sur la machine cible xcopy / publier
prise en charge 64 bits Oui (le runtime 32 bits se termine après SP 39, déc 2025) Natif
.NET Core / .NET 5+ Non pris en charge (Framework 4.x uniquement) Support complet (.NET 6/8/9, Framework 4.6.2+)
Déploiement dans le nuage VMs Windows uniquement Simple
Linux / Docker Non pris en charge (Windows uniquement) Prise en charge

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 Les exigences sont les suivantes 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 ciblant .NET moderne (6, 8, 9) et le déploiement multiplateforme,IronPDF offre un support natif que le runtime Crystal Reports — fixé au .NET Framework 4.x — ne peut offrir.


Avant de commencer

Prérequis

  1. .NET Environment: .NET Framework 4.6.2+ or .NET 6 / 8 / 9
  2. Accès à NuGet : possibilité d'installer des packages NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur IronPDF

Modifications du paquet NuGet

# 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

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

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

Mappages de l'API de base

SAP Crystal Reports IronPDF Notes
ReportDocument ChromePdfRenderer Rendu de base
ReportDocument.Load() RenderHtmlAsPdf() Charger le contenu
.rpt files 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
$vbLabelText   $csharpLabel

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

Cet exemple illustre la différence fondamentale de paradigme. SAP Crystal Reportsnécessite un modèle de fichier .rpt pré-conçu créé dans le Crystal Reports Designer, 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 tout 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
$vbLabelText   $csharpLabel

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

SAP Crystal Reports ne peut pas convertir directement les URL en PDF. Vous devriez télécharger manuellement le contenu HTML avec WebClient, puis extraire et lier ces données à un modèle .rpt pré-conçu—un processus non trivial et qui nécessite un travail manuel important.

La méthode RenderUrlAsPdf() d'IronPDF capture la page web entièrement rendue avec tout le CSS, JavaScriptet les 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
$vbLabelText   $csharpLabel

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

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 en utilisant le Crystal Reports Designer, puis passer des valeurs de paramètres comme "HeaderText" et "FooterText" à l'exécution. Les numéros de page doivent être configurés via les champs de formule dans le concepteur.

IronPDF propose une configuration programmatique de l'en-tête/pied de page avec les propriétés TextHeader et TextFooter. Définissez CenterText, LeftText, RightText et FontSize directement dans le code. Les numéros de page utilisent les espaces réservés {page} et {total-pages}—pas besoin de concepteur.


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 :

  1. Ouvrir .rpt dans le concepteur Crystal Reports
  2. Mise en page du document, polices, couleurs
  3. Notez tous les champs de formule
  4. Recréer en HTML/CSS
  5. 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)
$vbLabelText   $csharpLabel

Enjeu 3 : Dépendances d'exécution

SAP Crystal Reports: Nécessite l'installation de Crystal Reports Runtime (500MB+).

Solution:IronPDF est 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
SHELL

Problème 4 : 32 bits/64 bits et verrouillage du .NET Framework

SAP Crystal Reports : L'exécution de Crystal Reports dépend de COM et est livrée dans des MSI 32 bits et 64 bits séparés. SAP a confirmé que l'exécution CR .NET 32 bits est arrêtée après SP 39 (décembre 2025) ; les futurs packs de service seront uniquement 64 bits. L'exécution cible .NET Framework 4.x et ne peut pas être chargée sous .NET Core / .NET 5+.

Solution :IronPDF fonctionne sur .NET Framework 4.6.2+, .NET 6, .NET 8, et .NET 9 — y compris Linux et Docker. Aucune configuration spéciale n'est requise pour 64 bits ou AnyCPU.


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

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

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

Marques de fond

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

Résumé de la comparaison des fonctionnalités

Fonction SAP Crystal Reports IronPDF
: Installation : Distribution Runtime MSI redistribuable NuGet
Méthode d'installation MSI + extension Visual Studio NuGet
Déploiement Exécuter MSI sur la machine cible xcopy / publier
: Prise en charge de la plateforme : .NET Framework 4.x Oui Oui (4.6.2+)
.NET Core / .NET 5+ Non pris en charge Oui (.NET 6/8/9)
64-bit Native Oui (le 32 bits se termine après SP 39, déc 2025) Oui
Linux / Docker Non pris en charge (Windows uniquement) Oui
Azure / AWS VMs Windows uniquement Simple
: Développement : Concepteur de rapports Les exigences sont les suivantes 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

  • Inventorier 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 licence IronPDF sur 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 NuGetIronPdf
  • Convertir les mises en page .rpt en modèles HTML/CSS
  • Convertir les formules Crystal en code C#
  • Mettre à jour la liaison de données de SetDataSource() à 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

Veuillez noterSAP Crystal Reports est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé par, ou sponsorisé par SAP. Tous les noms de produits, logos et marques sont la propriété de leurs détenteurs respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi