Ir para o conteúdo do rodapé
GUIAS DE MIGRAçãO

Como migrar do SAP Crystal Reports para o IronPDF em C#

Migrar doSAP Crystal Reportspara o IronPDF transforma o seu fluxo de trabalho de relatórios de uma redistribuição MSI de tempo de execução com dependências da era COM para um pacoteNuGetmoderno. Este guia fornece um caminho de migração passo a passo que remove a necessidade de instalador de tempo de execução, libera o bloqueio do ecossistema SAP e desbloqueia .NET 6/8/9 e metas Linux/Docker que o Crystal Reports para Visual Studio (CR4VS) não suporta.

Por que migrar doSAP Crystal Reportspara o IronPDF?

Entendendo o SAP Crystal Reports

OSAP Crystal Reportsé uma plataforma de relatórios empresariais amplamente usada para gerar relatórios "pixel-perfect", com ampla conectividade a fontes de dados e um ecossistema de design estabelecido. O Crystal Reports Designer continua a ser uma ferramenta produtiva para construir layouts de relatórios complexos dentro da pilha SAP.

No entanto, a arquitetura da era COM do tempo de execução e a dependência exclusiva do Windows/.NET Framework criam atrito para equipes que têm como alvo o .NET 6/8/9, Linux ou implementações centradas em contêineres.

Principais razões para migrar

  1. Redistribuição MSI de Tempo de Execução: O Crystal Reports Runtime é distribuído como um instalador MSI (geralmente chega a dezenas de MB a alguns centenas de MB dependendo de 32/64 bits e localização) em vez de um pacote NuGet
  2. Bloqueio do Ecossistema SAP: Vinculado aos ciclos de lançamento e roteiro de produtos da SAP; a SAP confirmou o fim do suporte de manutenção principal para CR4VS no final de 2027
  3. Licenciamento: O próprio CR4VS é gratuito para download e o tempo de execução é gratuito para redistribuir, mas a família de designers do Crystal Reports (CR 2020 / CR 2025) e a plataforma BI são SKU comerciais da SAP
  4. Arquitetura Legada: DLLs de tempo de execução dependentes de COM alvos do.NET Framework 4.xnão podem ser carregados sob .NET Core / .NET 5+
  5. Sem Suporte .NET Core / .NET 5+: Não há roteiro para um tempo de execução Crystal Reports visando o .NET moderno; os projetos permanecem fixados no .NET Framework 4.x
  6. Tempo de Execução de 32 bits Descontinuado: A SAP confirmou que o tempo de execução CR .NET de 32 bits será descontinuado após o SP 39 (dezembro de 2025); os pacotes de serviço futuros serão apenas de 64 bits
  7. Dependência do Designer de Relatórios: Requer a extensão CR4VS do Visual Studio ou um designer Crystal Reports autônomo para criar arquivos .rpt

Os custos ocultos do SAP Crystal Reports

Fator de custo SAP Crystal Reports IronPDF
Distribuição de Tempo de Execução Instalador MSI redistribuível PacoteNuGet
Instalação Instalador de tempo de execução + extensão VS dotnet add package IronPdf
Implantação Executar MSI na máquina de destino xcopy / publicar
Suporte a 64 bits Sim (tempo de execução de 32 bits termina após SP 39, dez 2025) Nativo
.NET Core / .NET 5+ Não suportado (apenas Framework 4.x) Suporte completo (.NET 6/8/9, Framework 4.6.2+)
Implantação na nuvem Apenas VMs Windows Simples
Linux / Docker Não suportado (apenas Windows) Apoiado

Comparação entreSAP Crystal Reportse IronPDF

Recurso SAP Crystal Reports IronPDF
Funcionalidade principal Plataforma de relatórios empresariais Motor de conversão de HTML para PDF e manipulação de PDFs
Integração O melhor dentro do ecossistema SAP Integração moderna com .NET , pacoteNuGetleve.
Facilidade de uso Configuração e implantação complexas Integração simplificada, compatível com desenvolvedores .NET
Designer de Relatórios Obrigatório Opcional (HTML/CSS)
Formato do modelo .rpt (binário) HTML/CSS
HTML para PDF Não Cromo completo
URL para PDF Não Sim
Suporte a CSS Não CSS3 completo
JavaScript Não ES2024 completo
Manipulação de PDF Não Completo (mesclar, dividir, editar)
Assinaturas digitais Não Sim
Conformidade com PDF/A Não Sim
Relevância Moderna Em declínio, substituído por alternativas modernas. Moderno e bem integrado com as tecnologias contemporâneas.

Para equipes visando .NET moderno (6, 8, 9) e implantação multiplataforma, o IronPDF fornece suporte nativo que o tempo de execução Crystal Reports — fixado no.NET Framework 4.x— não pode oferecer.


Antes de começar

Pré-requisitos

  1. Ambiente .NET: .NET Framework 4.6.2+ ou .NET 6 / 8 / 9
  2. Acesso aoNuGet: Capacidade de instalar pacotes NuGet.
  3. Licença do IronPDF: Obtenha sua chave de licença em IronPDF

Alterações no pacote 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 communityNuGetwrapper, 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 communityNuGetwrapper, 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

Configuração de licença

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

Referência completa da API

Alterações de namespace

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

Mapeamentos da API principal

SAP Crystal Reports IronPDF Notas
ReportDocument ChromePdfRenderer Renderização principal
ReportDocument.Load() RenderHtmlAsPdf() Carregar conteúdo
Arquivos .rpt ModelosHTML/CSS Formato do modelo
SetDataSource() HTML com dados Vinculação de dados
SetParameterValue() Interpolação de strings Parâmetros
ExportToDisk() pdf.SaveAs() Salvar arquivo
ExportToStream() pdf.BinaryData Obter bytes
PrintToPrinter() pdf.Print() Impressão
Database.Tables Acesso a dados em C# Fonte de dados
FormulaFieldDefinitions Lógica C# Cálculos
SummaryInfo pdf.MetaData Metadados do PDF
ExportFormatType.PortableDocFormat Saída padrão PDF nativo

Exemplos de migração de código

Exemplo 1: Conversão de HTML para PDF

Antes (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

Apó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

Este exemplo demonstra a diferença fundamental de paradigma.SAP Crystal Reportsrequer um template de arquivo .rpt pré-desenhado criado no Crystal Reports Designer, depois você deve configurar ExportOptions, ExportDestinationType, ExportFormatType, e DiskFileDestinationOptions. A biblioteca não oferece suporte direto a conteúdo HTML — você precisa vincular os dados ao modelo de relatório.

IronPDF aceita strings HTML diretamente: crie um ChromePdfRenderer, chame RenderHtmlAsPdf() com qualquer conteúdo HTML, e SaveAs(). Não requer designer, modelos binários ou configuração complexa de exportação. Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.

Exemplo 2: Conversão de URL para PDF

Antes (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

Apó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

OSAP Crystal Reportsnão consegue converter URLs diretamente para PDF. Você precisaria baixar manualmente o conteúdo HTML com WebClient, depois extrair e vincular de alguma forma esses dados a um template .rpt pré-desenhado—um processo que não é simples e requer um trabalho manual significativo.

O método RenderUrlAsPdf() do IronPDF captura a página web totalmente renderizada com todo o CSS,JavaScripte imagens em uma única chamada. Saiba mais em nossos tutoriais .

Exemplo 3: Cabeçalhos e rodapés com números de página

Antes (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

Apó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

OSAP Crystal Reportsrequer configuração em tempo de design para cabeçalhos e rodapés. Você deve projetá-los no arquivo .rpt usando o Crystal Reports Designer, depois passar valores de parâmetros como "HeaderText" e "FooterText" em tempo de execução. Os números de página devem ser configurados através de campos de fórmula no designer.

IronPDF oferece configuração de cabeçalho/rodapé programática com as propriedades TextHeader e TextFooter. Defina CenterText, LeftText, RightText e FontSize diretamente no código. Os números de página usam os placeholders {page} e {total-pages} — sem necessidade de designer.


Problemas comuns de migração

Problema 1: Conversão de arquivo .rpt

SAP Crystal Reports: Arquivos binários .rpt com layout, dados e fórmulas incorporados.

Solução: Não é possível converter diretamente — é necessário recriar como HTML:

  1. Abra o arquivo .rpt no designer do Crystal Reports
  2. Layout do documento, fontes, cores
  3. Observe todos os campos de fórmula.
  4. Recriar em HTML/CSS
  5. Converter fórmulas em código C#

Problema 2: Conexões de banco de dados

SAP Crystal Reports: Cadeias de conexão incorporadas e ODBC.

Solução: Utilize a camada de dados da sua aplicação:

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

Problema 3: Dependências de tempo de execução

SAP Crystal Reports: Requer a instalação do Crystal Reports Runtime (500 MB ou mais).

Solução:IronPDF é autossuficiente:

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

Problema 4: Bloqueio de 32 bits/64 bits e .NET Framework

SAP Crystal Reports: O tempo de execução do Crystal Reports depende de COM e é distribuído em MSIs separados de 32 bits e 64 bits. A SAP confirmou que o tempo de execução CR .NET de 32 bits será descontinuado após o SP 39 (dezembro de 2025); os pacotes de serviço futuros serão apenas de 64 bits. O tempo de execução tem como alvo o.NET Framework 4.xe não pode ser carregado sob .NET Core / .NET 5+.

Solution:IronPDF runs on .NET Framework 4.6.2+, .NET 6, .NET 8, and .NET 9 — including Linux and Docker. Nenhuma configuração especial é necessária para 64 bits ou AnyCPU.


Novas funcionalidades após a migração

Após migrar para o IronPDF, você obtém recursos que oSAP Crystal Reportsnão oferece:

Fusão de PDFs

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

Segurança de 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

Assinaturas digitais

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

Marcas d'água

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

Resumo da comparação de recursos

Recurso SAP Crystal Reports IronPDF
Instalação : Distribuição de Tempo de Execução MSI redistribuível NuGet
Método de instalação MSI + extensão do Visual Studio NuGet
Implantação Executar MSI na máquina de destino xcopy / publicar
Suporte à plataforma : .NET Framework 4.x Sim Sim (4.6.2+)
.NET Core / .NET 5+ Não suportado Sim (.NET 6/8/9)
Nativo de 64 bits Sim (o fim de 32 bits depois do SP 39, dez 2025) Sim
Linux / Docker Não suportado (apenas Windows) Sim
Azure / AWS Apenas VMs Windows Simples
: Desenvolvimento : Designer de Relatórios Obrigatório Opcional (HTML)
Formato do modelo .rpt (binário) HTML/CSS
Curva de Aprendizagem Sintaxe Crystal Padrões da Web
IntelliSense Não Dó# completo
Renderização : HTML para PDF Não Cromo completo
URL para PDF Não Sim
Suporte a CSS Não CSS3 completo
JavaScript Não ES2024 completo
: Funcionalidades do PDF : Mesclar PDFs Não Sim
Dividir PDFs Não Sim
Marcas d'água Limitado HTML completo
Assinaturas digitais Não Sim
PDF/A Não Sim

Lista de verificação para migração

Pré-migração

  • Inventariar todos os arquivos .rpt
  • Faça uma captura de tela de cada layout de relatório para referência.
  • Documentar campos de fórmulas e cálculos
  • Liste todas as fontes de dados e parâmetros.
  • Identificar os requisitos de impressão
  • Obtenha a chave de licença do IronPDF em IronPDF

Atualizações de código

  • Remover pacotes Crystal Reports (CrystalDecisions.CrystalReports.Engine, etc.)
  • Remover a instalação do runtime da implantação
  • Instalar o pacoteNuGetIronPdf
  • Converter layouts .rpt para templates HTML/CSS
  • Converter fórmulas Crystal em código C#
  • Atualizar a ligação de dados de SetDataSource() para interpolação de strings HTML
  • Atualizar o código de impressão de PrintToPrinter() para pdf.Print()
  • Adicionar inicialização de licença na inicialização do aplicativo

Infraestrutura

  • Remover o Crystal Runtime dos servidores
  • Atualizar scripts de implantação
  • Remover o modo de compatibilidade de 32 bits
  • Atualizar imagens do Docker (se aplicável)

Testando

  • Comparar a saída em PDF com os relatórios originais
  • Verificar todos os cálculos
  • Testar todos os parâmetros
  • Testar a funcionalidade de impressão
  • Testes de desempenho
  • Teste de 64 bits

ObserveSAP Crystal Reports é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pela SAP. Todos os nomes de produtos, logotipos e marcas são de propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de Suporte Iron

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim