Saltar al pie de página
GUíAS DE MIGRACIóN

Cómo migrar de SAP Crystal Reports a IronPDF en C#

La migración de Crystal Reports aIronPDFtransforma su flujo de trabajo de generación de informes de una plataforma heredada pesada con requisitos de implementación complejos a un paquete NuGetmoderno y ligero. Esta guía proporciona una ruta de migración completa, paso a paso, que elimina la instalación masiva de más de 500 MB de tiempo de ejecución, elimina el bloqueo del ecosistema SAP y permite la compatibilidad total con .NET Core/5/6/7/8+.

Por qué migrar de SAP Crystal Reportsa IronPDF

Entender SAP Crystal Reports

SAP Crystal Reports destaca en el ámbito empresarial como herramienta para generar informes dinámicos y "pixel-perfect". SAP Crystal Reports, reconocido por su capacidad para conectarse a multitud de fuentes de datos, ha sido la solución a la que han recurrido muchas empresas que buscaban una funcionalidad de generación de informes completa. La plataforma ofrece una potencia inigualable con su Crystal Reports Designer, una herramienta que simplifica la construcción de diseños de informes complejos.

Sin embargo, a medida que la tecnología ha ido evolucionando, la gran dependencia de Crystal Reports del marco SAP y sus exigentes requisitos de instalación y despliegue no pueden pasar desapercibidos. La naturaleza de peso pesado significa que las empresas a menudo requieren recursos y tiempo significativos para implementar y mantener completamente el sistema.

Razones clave para migrar

  1. Instalación masiva: Crystal Reports Runtime ocupa más de 500 MB y requiere una instalación compleja.
  2. Dependencia del ecosistema SAP: vinculada a los precios, los ciclos de soporte y la hoja de ruta de productos de SAP
  3. Licencias complejas: Licencias por procesador/por usuario con el proceso de ventas empresarial de SAP
  4. Arquitectura heredada: Dependencias COM de 32 bits que complican las implementaciones modernas de 64 bits
  5. Compatibilidad obsoleta con .NET Core: compatibilidad limitada con plataformas .NET modernas
  6. Dependencia del Diseñador de informes: Requiere extensiones de Visual Studio o un diseñador independiente
  7. Rendimiento lento: inicialización de tiempo de ejecución pesado y consumo de memoria

Los costes ocultos de SAP Crystal Reports

Coste SAP Crystal Reports IronPDF
Tamaño del tiempo de ejecución mÁS DE 500 MB ~20 MB
Instalación MSI/Instalación complejos Paquete NuGet
Despliegue Instaladores especiales xcopy
compatibilidad con 64 bits Problemática Nativo
.NET Core/5/6/7/8 Limitado Se admite
Despliegue en la nube Difícil Simple
Linux/Docker No

Comparación entre SAP Crystal Reportse IronPDF

Característica SAP Crystal Reports IronPDF
Funcionalidad principal Plataforma de informes empresariales Motor de conversión de HTML a PDF y manipulación de PDF
Integración Mejor dentro del ecosistema SAP Integración moderna con .NET, paquete NuGetligero
Facilidad de uso Configuración y despliegue complejos Integración simplificada, compatible con desarrolladores .NET
Diseñador de informes Requerido Opcional (HTML/CSS)
Formato de la plantilla .rpt (binario) HTML/CSS
HTML a PDF No Chromium completo
URL a PDF No
Soporte CSS No CSS3 completo
JavaScript No ES2024 completo
Manipulación de PDF No Completo (combinar, dividir, editar)
Firmas digitales No
Cumplimiento de PDF/A No
Relevancia moderna En declive, sustituido por alternativas modernas Moderno, bien integrado con las tecnologías contemporáneas

Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una compatibilidad nativa entre plataformas que SAP Crystal Reportsno puede ofrecer.


Antes de empezar

Prerrequisitos

  1. Entorno .NET : .NET Framework4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Acceso a NuGet: Capacidad para instalar paquetes NuGet
  3. Licencia deIronPDF: Obtenga su clave de licencia en IronPDF

Cambios en el paquete 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

Configuración de licencias

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

Referencia completa de la API

Cambios en el espacio de nombres

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

Mapeos de API principales

SAP Crystal Reports IronPDF Notas
ReportDocument ChromePdfRenderer Traducción básica
ReportDocument.Load() RenderHtmlAsPdf() Cargar contenido
.rpt archivos Plantillas HTML/CSS Formato de la plantilla
SetDataSource() HTML con datos Vinculación de datos
SetParameterValue() Interpolación de cadenas Parámetros
ExportToDisk() pdf.SaveAs() Guardar archivo
ExportToStream() pdf.BinaryData Obtener bytes
PrintToPrinter() pdf.Print() Imprimir
Database.Tables Acceso a datos en C# Fuente de datos
FormulaFieldDefinitions Lógica de C# Cálculos
SummaryInfo pdf.MetaData Metadatos PDF
ExportFormatType.PortableDocFormat Resultados por defecto PDF nativo

Ejemplos de migración de código

Ejemplo 1: Conversión de HTML a 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

Despué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 ejemplo demuestra la diferencia fundamental de paradigma. SAP Crystal Reportsrequiere una plantilla de archivo .rpt prediseñada creada en Crystal Reports Designer, luego debe configurar ExportOptions, ExportDestinationType, ExportFormatType y DiskFileDestinationOptions. La biblioteca no admite directamente contenido HTML, por lo que es necesario vincular los datos a la plantilla de informe.

IronPDF acepta cadenas HTML directamente: crea un ChromePdfRenderer, llama a RenderHtmlAsPdf() con cualquier contenido HTML y SaveAs(). No se requiere diseñador, ni plantillas binarias, ni una compleja configuración de exportación. Consulte la documentación HTML a PDF para ver ejemplos completos.

Ejemplo 2: Conversión de URL a 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

Despué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

Crystal Reports no puede convertir directamente URL a PDF. Necesitarías descargar el contenido HTML manualmente con WebClient y luego, de alguna manera, extraer y vincular esos datos a una plantilla prediseñada .rpt, un proceso que no es sencillo y requiere un trabajo manual significativo.

El método RenderUrlAsPdf() deIronPDFcaptura la página web completamente renderizada con todo el CSS, JavaScripte imágenes en una sola llamada. Más información en nuestros tutoriales.

Ejemplo 3: Encabezados y pies de página con 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

Despué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 requiere la configuración en tiempo de diseño de encabezados y pies de página. Debe diseñarlos en el archivo .rpt mediante el Diseñador de Crystal Reports y, a continuación, pasar valores de parámetros como "HeaderText" y "FooterText" en tiempo de ejecución. Los números de página deben configurarse mediante campos de fórmula en el diseñador.

IronPDF proporciona una configuración programática de encabezado y pie de página con las propiedades TextHeader y TextFooter. Establezca CenterText, LeftText, RightText y FontSize directamente en el código. Los números de página utilizan los marcadores de posición {page} y {total-pages}; no se requiere diseñador.


Problemas comunes de migración

Edición 1: Conversión de archivos .rpt

SAP Crystal Reports: Archivos binarios .rpt con diseño, datos y fórmulas incrustados.

Solución: No se puede convertir directamente, se debe recrear como HTML:

  1. Abrir .rpt en el diseñador de Crystal Reports
  2. Diseño del documento, fuentes, colores
  3. Tenga en cuenta todos los campos de fórmula
  4. Recrear en HTML/CSS
  5. Convertir fórmulas en código C#

Número 2: Conexiones de bases de datos

SAP Crystal Reports: Cadenas de conexión incrustadas y ODBC.

Solución: Utiliza la capa de datos de tu aplicación:

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

Tema 3: Dependencias en tiempo de ejecución

SAP Crystal Reports: Requiere la instalación de Crystal Reports Runtime (500MB+).

Solución:IronPDFes autónomo:

# 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

Número 4: Cuestiones de 32 bits/64 bits

SAP Crystal Reports: Las dependencias COM suelen requerir el modo de 32 bits.

Solución:IronPDFes nativo de 64 bits, por lo que no requiere ninguna configuración especial.


Nuevas capacidades tras la migración

Tras migrar a IronPDF, obtendrá funciones que SAP Crystal Reportsno puede ofrecerle:

Fusión de 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

Seguridad en 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

Firmas digitales

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

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

Resumen comparativo de características

Característica SAP Crystal Reports IronPDF
: Instalación : Tamaño del tiempo de ejecución mÁS DE 500 MB ~20 MB
Método de instalación MSI/Setup.exe NuGet
Despliegue Complejo xcopy
: Soporte de plataforma : .NET Framework
.NET Core/5/6/7/8 Limitado Completo
nativo de 64 bits Problemática
Linux/Docker No
Azure/AWS Difícil Simple
: Desarrollo : Diseñador de informes Requerido Opcional (HTML)
Formato de plantilla .rpt (binario) HTML/CSS
Curva de aprendizaje Sintaxis de Crystal Estándares web
IntelliSense No C# completo
: Representación : HTML a PDF No Chromium completo
URL a PDF No
Soporte CSS No CSS3 completo
JavaScript No ES2024 completo
: Características del PDF : Fusionar PDF No
Dividir PDF No
Marcas de agua Limitado HTML completo
Firmas digitales No
PDF/A No

Lista de comprobación de la migración

Pre-Migración

  • Inventariar todos los archivos .rpt
  • Captura de pantalla de cada diseño de informe como referencia
  • Documentar campos de fórmulas y cálculos
  • Enumere todas las fuentes de datos y parámetros
  • Identificar los requisitos de impresión
  • Obtenga la clave de licencia deIronPDFen IronPDF

Actualizaciones de código

  • Eliminar paquetes de Crystal Reports (CrystalDecisions.CrystalReports.Engine, etc.)
  • Eliminar la instalación en tiempo de ejecución de la implementación
  • Instalar el paquete NuGetIronPdf
  • Convertir diseños .rpt en plantillas HTML/CSS
  • Convertir fórmulas de Crystal a código C#
  • Actualizar el enlace de datos de SetDataSource() a la interpolación de cadenas HTML
  • Actualizar el código de impresión de PrintToPrinter() a pdf.Print()
  • Agregar inicialización de licencia al iniciar la aplicación

Infraestructura

  • Eliminar Crystal Runtime de los servidores
  • Actualizar scripts de implementación
  • Eliminar el modo de compatibilidad de 32 bits
  • Actualizar imágenes de Docker (si corresponde)

Pruebas

  • Comparar la salida PDF con los informes originales
  • Verificar todos los cálculos
  • Pruebe todos los parámetros
  • Prueba de funcionalidad de impresión
  • Pruebas de rendimiento
  • Pruebas de 64 bits

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame