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
- Instalação complexa: O Crystal Reports Runtime tem mais de 500 MB e requer uma instalação complexa.
- Dependência do ecossistema SAP: Vinculada aos preços, ciclos de suporte e roteiro de produtos da SAP.
- Licenciamento complexo: Licenciamento por processador/por usuário com o processo de vendas corporativas da SAP.
- Arquitetura Legada: Dependências COM de 32 bits que complicam as implementações modernas de 64 bits.
- Suporte descontinuado for .NET Core: Suporte limitado para plataformas .NET modernas.
- Dependência do Designer de Relatórios: Requer extensões do Visual Studio ou um designer independente.
- 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
- Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
- 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
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"
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
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
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
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
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
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
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
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:
- Abra o arquivo .rpt no designer do Crystal Reports
- Layout do documento, fontes, cores
- Observe todos os campos de fórmula.
- Recriar em HTML/CSS
- 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)
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
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")
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")
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)
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
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
.rptem 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()parapdf.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

