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

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

A migração do SAP Crystal Reports para o IronPDF transforma seu fluxo de trabalho de geração de relatórios, passando de uma plataforma legada complexa com requisitos de implantação para um pacote NuGet moderno e leve. Este guia fornece um caminho de migração completo, passo a passo, que elimina a instalação massiva do runtime de mais de 500 MB, remove a dependência do ecossistema SAP e permite suporte completo ao .NET Core/5/6/7/8+.

Por que migrar do SAP Crystal Reports para o IronPDF?

Entendendo o SAP Crystal Reports

O SAP Crystal Reports se destaca no domínio empresarial como uma ferramenta para gerar relatórios dinâmicos e com "perfeição em cada detalhe". O SAP Crystal Reports, reconhecido por sua capacidade de se conectar a uma infinidade de fontes de dados, tem sido a solução preferida por muitas empresas que buscam funcionalidades abrangentes de geração de relatórios. A plataforma oferece poder incomparável com o Crystal Reports Designer, uma ferramenta que simplifica a criação de layouts de relatórios complexos.

No entanto, com a evolução da tecnologia, a forte dependência do SAP Crystal Reports na estrutura SAP e seus exigentes requisitos de instalação e implementação não podem passar despercebidos. Devido à sua complexidade, as empresas geralmente precisam de recursos e tempo consideráveis ​​para implementar e manter o sistema por completo.

Principais razões para migrar

  1. Instalação complexa: O Crystal Reports Runtime tem mais de 500 MB e requer uma instalação complexa.
  2. Dependência do ecossistema SAP: Vinculada aos preços, ciclos de suporte e roteiro de produtos da SAP.
  3. Licenciamento complexo: Licenciamento por processador/por usuário com o processo de vendas corporativas da SAP.
  4. Arquitetura Legada: Dependências COM de 32 bits que complicam as implementações modernas de 64 bits.
  5. Suporte descontinuado for .NET Core: Suporte limitado para plataformas .NET modernas.
  6. Dependência do Designer de Relatórios: Requer extensões do Visual Studio ou um designer independente.
  7. Desempenho lento: Inicialização de tempo de execução pesada e alto consumo de memória.

Os custos ocultos do SAP Crystal Reports

Fator de custo SAP Crystal Reports IronPDF
Tamanho de tempo de execução 500 MB ou mais ~20MB
Instalação MSI/Configuração complexa Pacote NuGet
Implantação Instaladores especiais xcopy
Suporte a 64 bits Problemático Nativo
.NET Core/5/6/7/8 Limitado Apoiado
Implantação na nuvem Difícil Simples
Linux/Docker Não Sim

Comparação entre SAP Crystal Reports e 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 , pacote NuGet leve.
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 que planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, o IronPDF oferece suporte nativo multiplataforma que o SAP Crystal Reports não pode oferecer.


Antes de começar

Pré-requisitos

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

Alterações no pacote 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
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
.rpt arquivos Modelos HTML/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. O SAP Crystal Reports requer um modelo de arquivo .rpt pré-projetado criado no Crystal Reports Designer, então 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.

O 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

O SAP Crystal Reports não consegue converter URLs diretamente para PDF. Você precisaria baixar o conteúdo HTML manualmente com WebClient, depois extrair e vincular esses dados a um modelo pré-projetado .rpt — 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, incluindo todo o CSS, JavaScript e 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

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

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


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 the NuGet package
dotnet add package IronPdf
# That's it - no additional installs needed
# Just add the NuGet package
dotnet add package IronPdf
# That's it - no additional installs needed
SHELL

Problema 4: Problemas de 32 bits/64 bits

SAP Crystal Reports: as dependências COM geralmente exigem o modo de 32 bits.

Solução: O IronPDF é nativo de 64 bits — nenhuma configuração especial é necessária.


Novas funcionalidades após a migração

Após migrar para o IronPDF, você obtém recursos que o SAP Crystal Reports nã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

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

Resumo da comparação de recursos

Recurso SAP Crystal Reports IronPDF
Instalação : Tamanho de tempo de execução 500 MB ou mais ~20MB
Método de instalação MSI/Setup.exe NuGet
Implantação Complexo xcopy
Suporte à plataforma : .NET Framework Sim Sim
.NET Core/5/6/7/8 Limitado Completo
Nativo de 64 bits Problemático Sim
Linux/Docker Não Sim
Azure/AWS Difícil 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 do Crystal Reports (CrystalDecisions.CrystalReports.Engine, etc.)
  • Remover a instalação do runtime da implantação
  • Instale o pacote NuGet IronPdf
  • Converter layouts .rpt em modelos HTML/CSS
  • Converter fórmulas Crystal em código C#
  • Atualizar vinculação de dados de SetDataSource() para interpolação de string HTML
  • Atualizar 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

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 de ferro

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