C#'ta SAP Crystal Reports'tan IronPDF'ye Nasıl Geçilir
SAP Crystal Reports'tan IronPDF'ye geçmek, raporlama iş akışınızı COM-çağı bağımlılıkları olan bir runtime MSI yeniden dağıtılabilirden modern birNuGetpaketine dönüştürür. Bu kılavuz, runtime yükleyicisi gerekliliğini ortadan kaldıran, SAP ekosisteminden bağımsızlık sağlayan ve Crystal Reports for Visual Studio'nun (CR4VS) desteklemediği .NET 6/8/9 ve Linux/Docker hedeflerini açan bir adımdan-adıma geçiş yolu sunar.
SAP Crystal Reports'tan IronPDF'e Neden Geçilmeli
SAP Crystal Reports'u Anlama
SAP Crystal Reports, 'piksel mükemmelliğinde' raporlar üretmek için özellikle kullanılan, geniş veri kaynağı bağlantısı ve uzun süreli bir tasarımcı ekosistemine sahip bir kurumsal raporlama platformudur. Crystal Reports Designer, SAP yığını içinde karmaşık rapor düzenleri oluşturmak için üretken bir araç olarak kalır.
Ancak, runtime'ın COM-çağı mimarisi ve yalnızca Windows/.NET Framework varlığı, .NET 6/8/9, Linux veya konteyner-öncelikli dağıtımları hedefleyen ekipler için sürtünme yaratır.
Göç Etmenin Temel Nedenleri
- Runtime MSI Yeniden Dağıtılabilir: Crystal Reports Runtime, birNuGetpaketi yerine bir MSI yükleyici olarak gönderilir (tipik olarak 32/64-bit ve yerel dile göre boyutlar düzinelerce ila birkaç yüz MB arasında olabilir)
- SAP Ekosistem Bağımlılığı: SAP'nin sürüm döngüleri ve ürün yol haritasına bağlıdır; SAP, CR4VS için ana akım bakımın 2027 yılı sonunda sona ereceğini onayladı
- Lisanslama: CR4VS kendisi indirilebilir ve runtime yeniden dağıtılabilir, ancak Crystal Reports tasarımcı ailesi (CR 2020 / CR 2025) ve BI Platformu ticari SAP SKUs'udur
- Miras Mimarisi: COM'ye bağımlı runtime DLL'leri .NET Framework 4.x'i hedefler ve.NET Core / .NET 5+altında yüklenemez
- Modern .NET Desteği Yok: Crystal Reports runtime'ı modern .NET'i hedefleyen bir yol haritası yoktur; projeler .NET Framework 4.x'e sabit kalır
- 32-bit Runtime Sonlandırıldı: SAP, 32-bit CR .NET runtime'ın SP 39'dan sonra (Aralık 2025) sonlandırıldığını onayladı; gelecek hizmet paketleri yalnızca 64-bittir
- Rapor Tasarımcısı Bağımlılığı:
.rptdosyaları oluşturmak için CR4VS Visual Studio uzantısına veya bağımsız bir Crystal Reports tasarımcısına ihtiyaç duyar
SAP Crystal Reports'un Gizli Maliyetleri
| Maliyet Faktörü | SAP Crystal Reports | IronPDF |
|---|---|---|
| Runtime Dağıtımı | MSI yeniden dağıtılabilir yükleyici | NuGetpaketi |
| Kurulum | Runtime yükleyici + VS uzantısı | dotnet add package IronPdf |
| Dağıtım | Hedef makinede MSI çalıştırın | xcopy / yayımla |
| 64-bit Desteği | Evet (32-bit runtime SP 39'dan sonra sona erer, Aralık 2025) | Yerel |
| .NET Core / .NET 5+ | Desteklenmiyor (sadece Framework 4.x) | Tam destek (.NET 6/8/9, Framework 4.6.2+) |
| Bulut Dağıtımı | Sadece Windows VM'ler | Basit |
| Linux / Docker | Desteklenmiyor (sadece Windows) | Desteklenen |
SAP Crystal Reports ve IronPDF Karşılaştırması
| Özellik | SAP Crystal Reports | IronPDF |
|---|---|---|
| Birincil İşlevsellik | Kurumsal raporlama platformu | HTML'den PDF'e dönüşüm motoru ve PDF düzenleme |
| Entegrasyon | SAP ekosistemi içinde en iyi | Modern .NET entegrasyonu, hafifNuGetpaketi |
| Kullanım Kolaylığı | Karmaşık kurulum ve dağıtım | Basitleştirilmiş entegrasyon, .NET geliştiricilerini destekler |
| Rapor Tasarımcısı | Gereklidir | İsteğe bağlı (HTML/CSS) |
| Şablon Formatı | .rpt (ikili) | HTML/CSS |
| HTML'den PDF'ye | Hayır | Tam Chromium |
| URL'den PDF'ye | Hayır | Evet |
| CSS Desteği | Hayır | Tam CSS3 |
| JavaScript | Hayır | Tam ES2024 |
| PDF Manipülasyonu | Hayır | Tam (birleştirme, bölme, düzenleme) |
| Dijital İmzalar | Hayır | Evet |
| PDF/A Uyumlu | Hayır | Evet |
| Modern Geçerlilik | Azalan, modern alternatiflerle değiştirildi | Modern, çağdaş teknolojilerle iyi entegre |
Modern .NET'i (6, 8, 9) ve çapraz platform dağıtımı hedefleyen ekipler için, IronPDF, Crystal Reports runtime'nin sunamayacağı, .NET Framework 4.x'e sabitlenmiş olan yerleşik desteği sağlar.
Başlamadan Önce
Ön Koşullar
- .NET Environment: .NET Framework 4.6.2+ or .NET 6 / 8 / 9
- NuGet Erişimi:NuGetpaketlerini yükleyebilme
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# 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
# NuGet wrappers such as CrystalReports.Engine exist for build automation
# but are not official SAP packages.
# 1. Remove direct assembly references (CrystalDecisions.*.dll) from your .csproj
# 2. If using a community NuGet wrapper, 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
# NuGet wrappers such as CrystalReports.Engine exist for build automation
# but are not official SAP packages.
# 1. Remove direct assembly references (CrystalDecisions.*.dll) from your .csproj
# 2. If using a community NuGet wrapper, 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
Lisans Yapılandırması
// 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"
Tam API Referansı
Ad Alanı Değişiklikleri
// 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
Temel API Eşlemeleri
| SAP Crystal Reports | IronPDF | Notlar |
|---|---|---|
ReportDocument |
ChromePdfRenderer |
Çekirdek oluşturma |
ReportDocument.Load() |
RenderHtmlAsPdf() |
İçerik yükle |
.rpt dosyaları |
HTML/CSSşablonları | Şablon formatı |
SetDataSource() |
Veri ile HTML | Veri bağlama |
SetParameterValue() |
Dizi iç içe dizimi | Parametreler |
ExportToDisk() |
pdf.SaveAs() |
Dosyayı kaydet |
ExportToStream() |
pdf.BinaryData |
Baytları al |
PrintToPrinter() |
pdf.Print() |
Yazdırma |
Database.Tables |
C# veri erişimi | Veri kaynağı |
FormulaFieldDefinitions |
C# mantığı | Hesaplamalar |
SummaryInfo |
pdf.MetaData |
PDF meta verileri |
ExportFormatType.PortableDocFormat |
Varsayılan çıktı | PDF yerel |
Kod Göç Örnekleri
Örnek 1: HTML'den PDF'ye Dönüştürme
Önce (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
Sonrası (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
Bu örnek, temel paradigma farkını göstermektedir. SAP Crystal Reports, Crystal Reports Tasarımcısında oluşturulmuş önceden tasarlanmış bir .rpt dosya şablonu gerektirir, ardından ExportOptions, ExportDestinationType, ExportFormatType ve DiskFileDestinationOptions yapılandırmanız gerekir. Kütüphane doğrudan HTML içeriğini desteklemez—veriyi rapor şablonuna bağlamanız gerekir.
IronPDF, HTML dizgilerini doğrudan kabul eder: bir ChromePdfRenderer oluşturun, herhangi bir HTML içeriği ile RenderHtmlAsPdf() çağırın ve SaveAs(). Tasarımcı gerekmez, ikili şablon yok, karmaşık ihracat yapılandırması yok. Kapsamlı örnekler için HTML'den PDF'e dönüşüm belgelerine bakın.
Örnek 2: URL'den PDF'ye Dönüştürme
Önce (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
Sonrası (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
SAP Crystal Reports, URL'leri doğrudan PDF'e dönüştüremez. HTML içeriğini WebClient ile manuel olarak indirmeniz, ardından o verileri önceden tasarlanmış bir .rpt şablonuna çıkartmanız ve bağlamanız gerekecektir - bu, doğrudan olmayan ve önemli manuel çalışma gerektiren bir süreçtir.
IronPDF'nin RenderUrlAsPdf() yöntemi, tüm CSS,JavaScriptve resimler ile tam olarak oluşturulmuş web sayfasını tek bir çağrıyla yakalar. Daha fazla bilgiyi kılavuzlarımızda öğrenin.
Örnek 3: Sayfa Numaraları ile Başlıklar ve Alt Bilgiler
Önce (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
Sonrası (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
SAP Crystal Reports üstbilgi ve altbilgiler için tasarım zamanı yapılandırması gerektirir. Onları Crystal Reports Tasarımcısını kullanarak .rpt dosyasında tasarlamalı, ardından çalışma zamanında "HeaderText" ve "FooterText" gibi parametre değerlerini aktarmalısınız. Sayfa numaraları, tasarımcıdaki formül alanları aracılığıyla yapılandırılmalıdır.
IronPDF, TextHeader ve TextFooter özellikleri ile programlanabilir başlık/altbilgi yapılandırması sağlar. CenterText, LeftText, RightText ve FontSize doğrudan kod içerisinde ayarlayın. Sayfa numaraları, tasarımcı gerektirmeyen {page} ve {total-pages} yer tutucularını kullanır.
Yaygın Geçiş Sorunları
Sorun 1: .rpt Dosya Dönüşümü
SAP Crystal Reports: Gömülü düzen, veri, formüllere sahip ikili .rpt dosyaları.
Çözüm: Doğrudan dönüştürülemez—HTML olarak yeniden oluşturulmalıdır:
- Crystal Reports tasarımcısında .rpt açın
- Düzen, yazı tipleri, renkleri belgeleyin
- Tüm formül alanlarını not edin 4.HTML/CSSolarak yeniden oluşturun
- Formülleri C# koduna dönüştürün
Sorun 2: Veritabanı Bağlantıları
SAP Crystal Reports: Gömülü bağlantı dizeleri ve ODBC.
Çözüm: Uygulamanızın veri katmanını kullanı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)
Sorun 3: Çalışma Zamanı Bağımlılıkları
SAP Crystal Reports: Crystal Reports Çalışma Zamanı kurulumunu gerektirir (500MB+).
Çözüm:IronPDF kendi kendine yeterlidir:
# 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
Önem 4: 32-bit/64-bit ve .NET Framework Bağımlılığı
SAP Crystal Reports: Crystal Reports runtime, COM'ye bağımlıdır ve ayrı 32-bit ve 64-bit MSI'ler halinde gönderilir. SAP, 32-bit CR .NET runtime'ın SP 39'dan sonra (Aralık 2025) sonlandırıldığını onayladı; gelecek hizmet paketleri yalnızca 64-bittir. Runtime, .NET Framework 4.x'i hedeflemektedir ve.NET Core / .NET 5+altında yüklenemez.
Çözüm: IronPDF, .NET Framework 4.6.2+, .NET 6, .NET 8 ve .NET 9'da çalışır — Linux ve Docker dahil olmak üzere. 64-bit veya AnyCPU için özel bir yapılandırma gerekmemektedir.
Geçiş Sonrası Yeni Özellikler
IronPDF'ye geçiş yaptıktan sonra, SAP Crystal Reports'un sunamayacağı yetenekler kazanırsınız:
PDF Birleştirme
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")
PDF Güvenliği
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")
Dijital İmzalar
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)
Filigranlar
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>")
Özellik Karşılaştırması Özeti
| Özellik | SAP Crystal Reports | IronPDF | |||
|---|---|---|---|---|---|
| :Kurulum: | Runtime Dağıtımı | MSI yeniden dağıtılabilir | NuGet | ||
| Kurulum Yöntemi | MSI + Visual Studio uzantısı | NuGet | |||
| Dağıtım | Hedef makinede MSI çalıştırın | xcopy / yayımla | |||
| :Platform Desteği: | .NET Framework 4.x | Evet | Evet (4.6.2+) | ||
| .NET Core / .NET 5+ | Desteklenmiyor | Evet (.NET 6/8/9) | |||
| 64-bit Yerel | Evet (32-bit SP 39'dan sonra sona erer, Aralık 2025) | Evet | |||
| Linux / Docker | Desteklenmiyor (sadece Windows) | Evet | |||
| Azure / AWS | Sadece Windows VM'ler | Basit | |||
| :Geliştirme: | Rapor Tasarımcısı | Gereklidir | İsteğe Bağlı (HTML) | ||
| Şablon Biçimi | .rpt (ikili) | HTML/CSS | |||
| Öğrenme Eğrisi | Crystal sözdizimi | Web standartları | |||
| IntelliSense | Hayır | Tam C# | |||
| :Oluşturma: | HTML'den PDF'ye | Hayır | Tam Chromium | ||
| URL'yi PDF'ye çevir | Hayır | Evet | |||
| CSS Desteği | Hayır | Tam CSS3 | |||
| JavaScript | Hayır | Tam ES2024 | |||
| :PDF Özellikleri: | PDF'leri birleştir | Hayır | Evet | ||
| PDF Ayırma | Hayır | Evet | |||
| Filigranlar | Sınırlı | Tam HTML | |||
| Dijital İmzalar | Hayır | Evet | |||
| PDF/A | Hayır | Evet |
Geçiş Kontrol Listesi
Öncesi-Geçiş
- Tüm
.rptdosyalarını envanterleyin - Her rapor düzenini referans için ekran görüntüsü alın
- Formül alanları ve hesaplamaları belgeleyin
- Tüm veri kaynaklarını ve parametrelerini listeleyin
- Baskı gereksinimlerini belirleyin
- ironpdf.com adresinden IronPDF lisans anahtarını edinin
Kod Güncellemeleri
- Crystal Reports paketlerini (
CrystalDecisions.CrystalReports.Engine, vb.) kaldırın - Dağıtımdan çalışma zamanı kurulumunu kaldırın
IronPdfNuGetpaketini yükleyin.rptdüzenleriniHTML/CSSşablonlarına dönüştürün- Crystal formüllerini C# koduna dönüştürün
- Veri bağlama işlemini
SetDataSource()'den HTML dizgi interpolasyonuna güncelleyin - Yazdırma kodunu
PrintToPrinter()'denpdf.Print()'ya güncelleyin - Uygulama başlangıcında lisans başlatma ekle
Altyapı
- Crystal Çalışma Zamanını sunuculardan kaldırın
- Dağıtım betiklerini güncelleyin
- 32-bit uyumluluk modunu kaldırın
- Docker görüntülerini güncelleyin (varsa)
Test Etme
- PDF çıktısını orijinal raporlarla karşılaştırın
- Tüm hesaplamaları doğrulayın
- Tüm parametreleri test edin
- Baskı işlevselliğini test edin
- Performans testi yapın
- 64-bit testi
SAP Crystal Reports, ilgili sahibi tarafından tescilli bir ticari markadır. Bu site SAP ile ilişkilendirilmemiştir, onun tarafından onaylanmamış veya desteklenmemiştir. Tüm ürün adları, logolar ve markalar ilgili sahiplerinin malıdır. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.)}]

