C#'ta SSRS'den IronPDF'ye Nasıl Geçilir
SQL Server Reporting Services (SSRS)'den IronPDF'e geçiş, PDF oluşturma iş akışınızı, ağır bir sunucu tabanlı altyapıdan, herhangi bir .NET uygulamasına doğrudan gömülebilen hafif, süreç içi bir kütüphaneye dönüştürür. Bu rehber, SQL Server bağımlılıklarını, rapor sunucusu yükünü ve Microsoft ekosistemine bağımlılığı ortadan kaldıran eksiksiz, adım adım bir geçiş yolu sağlar.
Neden SSRS'den IronPDF'e Geçilmeli
SSRSAnlamak
SQL Server Reporting Services (SSRS), önemli altyapı yatırımı gerektiren Microsoft'un kurumsal raporlama platformudur. SSRS, rapor oluşturma, dağıtma ve yönetmenin tüm yönlerini kapsayan, zengin özellikli ve etkileşimli rapor özellikleri sunan Microsoft'un kapsamlı bir raporlama platformudur. SQL Server ekosisteminin bir parçası olarak geliştirilen SSRS, Microsoft'un veritabanı çözümleri ile sıkı bir şekilde entegre edilmiştir.
Ancak, birçok PDF oluşturma senaryosu içinSSRSaltyapısı aşırıdır. Geçiş için ana nedenler şunlardır:
- Yüksek Altyapı Gereksinimleri: SQL Server, Rapor Sunucusu ve IIS yapılandırması gerektirir.
- Microsoft Ekosistemine Bağımlılık: SQL Server lisanslamasına ve Windows Server'a bağlıdır.
- Karmaşık Dağıtım: Rapor dağıtımı, güvenlik yapılandırması ve abonelik yönetimi
- Pahalı Lisanslama: SQL Server lisansları, özellikle kurumsal özellikler için
- Sınırlı Web Desteği: Modern SPA çerçeveleri ile entegrasyonu zordur.
- Bakım Yükü: Sunucu yamaları, veritabanı bakımı, rapor yönetimi
- Bulut Yerlisi Seçenek Yok: Yerel olarak tasarlandığı için, bulut desteği gariptir.
SSRS'nin Gereksiz Olduğu Durumlar
| İhtiyacınız | SSRSYükü |
|---|---|
| Faturalar oluşturun | Tam rapor sunucusu |
| Veri tablolarını dışa aktarın | SQL Server lisansı |
| Verilerden PDF'ler oluşturun | Windows Server |
| Basit belge oluşturma | Rapor abonelikleri |
IronPDF, herhangi bir sunucu altyapısı olmadan işlem içi PDF oluşturma sağlar.
SSRS veIronPDFKarşılaştırması
| Özellik | SSRS | IronPDF |
|---|---|---|
| Bağımlılık | SQL Server gerektirir | Belirli bir veri tabanı bağımlılığı yok |
| Dağıtım | Sunucu tabanlı | Uygulamalara gömülü kütüphane |
| Entegrasyon | Microsoft ile sıkı entegrasyon | Herhangi bir veri kaynağı ile çalışır |
| Veri Görselleştirme | Kapsamlı yerel seçenekler | PDF odaklı görselleştirmeler |
| Karmaşıklık | Yüksek (sunucu kurulumu gerektirir) | Orta ila düşük (kütüphane kurulumu) |
| Maliyet | SQL Server lisanslama maliyetleri | Geliştirici başına lisanslama maliyeti |
| HTML to PDF | Hayır | Tam Chromium |
| URL'den PDF'ye | Hayır | Evet |
| CSS Desteği | Sınırlı | Tam CSS3 |
| JavaScript | Hayır | Tam ES2024 |
IronPDF, SSRS'e benzemez şekilde, belirli bir veritabanı veya sunucu ekosistemine bağlı değildir. Geliştiricilere, doğrudan C# içinde PDF belgelerini dinamik olarak oluşturmak, düzenlemek ve manipüle etmek için esnek bir kütüphane sağlar. Sunucu tabanlı altyapıdan kopması dikkat çekici bir avantaj sunar - basit ve uyarlanabilir, raporlamanın ötesinde geniş bir uygulama alanı için uygundur.
2025 ve 2026 boyunca .NET 10 ve C# 14 benimsemeyi planlayan ekipler için, IronPDF, SSRS'in altyapı karmaşıklığını ortadan kaldıran modern bir Chromium render motoru sunar.
Başlamadan Önce
Önkoşullar
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleme yeteneği
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# SSRS has no direct NuGet - it's server-based
# Remove any ReportViewer controls
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WinForms
# Install IronPDF
dotnet add package IronPdf
# SSRS has no direct NuGet - it's server-based
# Remove any ReportViewer controls
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WebForms
dotnet remove package Microsoft.ReportingServices.ReportViewerControl.WinForms
# 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"
API Referansının Tamamı
Namespace Değişiklikleri
// Before: SSRS
using Microsoft.Reporting.WebForms;
using Microsoft.Reporting.WinForms;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: SSRS
using Microsoft.Reporting.WebForms;
using Microsoft.Reporting.WinForms;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports Microsoft.Reporting.WebForms
Imports Microsoft.Reporting.WinForms
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
Temel API Eşleştirmeleri
| SSRS Kavramı | IronPDF Eşdeğeri | Notlar |
|---|---|---|
LocalReport |
ChromePdfRenderer |
Ana render etme |
ServerReport |
RenderUrlAsPdf() |
URL tabanlı oluşturma |
.rdlc dosyaları |
HTML/CSS şablonları | Sablon formati |
ReportParameter |
Dize enterpolasyonu | Parametreler |
ReportDataSource |
C# veri + HTML | Veri baglama |
LocalReport.Render("PDF") |
RenderHtmlAsPdf() |
PDF çıktısı |
SubReport |
Birleştirilmiş PDF'ler | İç içe geçmiş raporlar |
Report Server URL |
Gerekli değil | Sunucu gerekmez |
ReportViewer kontrolü |
Gerekli değil | Doğrudan PDF oluşturma |
| Dışa aktarma formatları | PDF yerel | Odaklı çıktı |
Kod Geçiş Örnekleri
Örnek 1: HTML'den PDF'e Dönüştürme
Önce (SSRS):
//SSRS- SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;
class SSRSHtmlToPdf
{
static void Main()
{
// Create a ReportViewer instance
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
// Load RDLC report definition
reportViewer.LocalReport.ReportPath = "Report.rdlc";
// Add HTML content as a parameter or dataset
var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
var param = new ReportParameter("HtmlContent", htmlContent);
reportViewer.LocalReport.SetParameters(param);
// Render the report to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF",
null,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings);
File.WriteAllBytes("output.pdf", bytes);
}
}
//SSRS- SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;
class SSRSHtmlToPdf
{
static void Main()
{
// Create a ReportViewer instance
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
// Load RDLC report definition
reportViewer.LocalReport.ReportPath = "Report.rdlc";
// Add HTML content as a parameter or dataset
var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
var param = new ReportParameter("HtmlContent", htmlContent);
reportViewer.LocalReport.SetParameters(param);
// Render the report to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF",
null,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings);
File.WriteAllBytes("output.pdf", bytes);
}
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.Reporting.WebForms
Imports System.IO
Class SSRSHtmlToPdf
Shared Sub Main()
' Create a ReportViewer instance
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
' Load RDLC report definition
reportViewer.LocalReport.ReportPath = "Report.rdlc"
' Add HTML content as a parameter or dataset
Dim htmlContent As String = "<h1>Hello World</h1><p>This is HTML content.</p>"
Dim param As New ReportParameter("HtmlContent", htmlContent)
reportViewer.LocalReport.SetParameters(param)
' Render the report to PDF
Dim mimeType As String, encoding As String, fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render( _
"PDF", _
Nothing, _
mimeType, _
encoding, _
fileNameExtension, _
streams, _
warnings)
File.WriteAllBytes("output.pdf", bytes)
End Sub
End Class
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfHtmlToPdf
{
static void Main()
{
// Create a ChromePdfRenderer instance
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF file
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfHtmlToPdf
{
static void Main()
{
// Create a ChromePdfRenderer instance
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
var htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF file
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class IronPdfHtmlToPdf
Shared Sub Main()
' Create a ChromePdfRenderer instance
Dim renderer = New ChromePdfRenderer()
' Convert HTML string to PDF
Dim htmlContent = "<h1>Hello World</h1><p>This is HTML content.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' Save the PDF file
pdf.SaveAs("output.pdf")
End Sub
End Class
Bu örnek temel mimari farkı göstermektedir. SSRS, bir ReportViewer örneği oluşturmayı, bir .rdlc rapor tanım dosyasını yüklemeyi, parametreleri ayarlamayı ve ardından LocalReport.Render("PDF") çağırmayı ve meta veriler için birden çok out parametresi ile çağırmayı gerektirir.
IronPDF, sadece üç satır kod ile ChromePdfRenderer ve RenderHtmlAsPdf() kullanır. Hiçbir rapor tanımı dosyası, parametre nesneleri veya meta veri yönetimi gerekmez. Kapsamlı örnekler için HTML'den PDF'e döndürme belgesine bakın.
Örnek 2: Başlıklar ve Altbilgilerle URL'den PDF'e
Önce (SSRS):
//SSRS- SQL Server Reporting Services
using System;
using System.IO;
using System.Net;
using Microsoft.Reporting.WebForms;
class SSRSUrlToPdf
{
static void Main()
{
// Download HTML content from URL
string url = "https://example.com";
string htmlContent;
using (var client = new WebClient())
{
htmlContent = client.DownloadString(url);
}
// Create RDLC report with header/footer configuration
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "WebReport.rdlc";
// Set parameters for header and footer
var parameters = new ReportParameter[]
{
new ReportParameter("HeaderText", "Company Report"),
new ReportParameter("FooterText", "Page " + DateTime.Now.ToString()),
new ReportParameter("HtmlContent", htmlContent)
};
reportViewer.LocalReport.SetParameters(parameters);
// Render to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
File.WriteAllBytes("webpage.pdf", bytes);
}
}
//SSRS- SQL Server Reporting Services
using System;
using System.IO;
using System.Net;
using Microsoft.Reporting.WebForms;
class SSRSUrlToPdf
{
static void Main()
{
// Download HTML content from URL
string url = "https://example.com";
string htmlContent;
using (var client = new WebClient())
{
htmlContent = client.DownloadString(url);
}
// Create RDLC report with header/footer configuration
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "WebReport.rdlc";
// Set parameters for header and footer
var parameters = new ReportParameter[]
{
new ReportParameter("HeaderText", "Company Report"),
new ReportParameter("FooterText", "Page " + DateTime.Now.ToString()),
new ReportParameter("HtmlContent", htmlContent)
};
reportViewer.LocalReport.SetParameters(parameters);
// Render to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
File.WriteAllBytes("webpage.pdf", bytes);
}
}
Imports System
Imports System.IO
Imports System.Net
Imports Microsoft.Reporting.WebForms
Class SSRSUrlToPdf
Shared Sub Main()
' Download HTML content from URL
Dim url As String = "https://example.com"
Dim htmlContent As String
Using client As New WebClient()
htmlContent = client.DownloadString(url)
End Using
' Create RDLC report with header/footer configuration
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
reportViewer.LocalReport.ReportPath = "WebReport.rdlc"
' Set parameters for header and footer
Dim parameters As ReportParameter() = {
New ReportParameter("HeaderText", "Company Report"),
New ReportParameter("FooterText", "Page " & DateTime.Now.ToString()),
New ReportParameter("HtmlContent", htmlContent)
}
reportViewer.LocalReport.SetParameters(parameters)
' Render to PDF
Dim mimeType As String, encoding As String, fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render(
"PDF", Nothing, mimeType, encoding,
fileNameExtension, streams, warnings)
File.WriteAllBytes("webpage.pdf", bytes)
End Sub
End Class
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class IronPdfUrlToPdf
{
static void Main()
{
// Create a ChromePdfRenderer instance
var renderer = new ChromePdfRenderer();
// Configure rendering options with header and footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Company Report</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " + DateTime.Now.ToString("MM/dd/yyyy") + "</div>"
};
// Convert URL to PDF
string url = "https://example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save the PDF file
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class IronPdfUrlToPdf
{
static void Main()
{
// Create a ChromePdfRenderer instance
var renderer = new ChromePdfRenderer();
// Configure rendering options with header and footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Company Report</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " + DateTime.Now.ToString("MM/dd/yyyy") + "</div>"
};
// Convert URL to PDF
string url = "https://example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save the PDF file
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Class IronPdfUrlToPdf
Shared Sub Main()
' Create a ChromePdfRenderer instance
Dim renderer As New ChromePdfRenderer()
' Configure rendering options with header and footer
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Company Report</div>"
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages} - " & DateTime.Now.ToString("MM/dd/yyyy") & "</div>"
}
' Convert URL to PDF
Dim url As String = "https://example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
' Save the PDF file
pdf.SaveAs("webpage.pdf")
End Sub
End Class
SSRS URL'leri doğrudan PDF'e dönüştüremez. HTML içeriğini WebClient.DownloadString() ile manuel olarak indirmeniz, ayrı bir .rdlc rapor dosyası oluşturmanız, HTML ve başlık/altbilgi metnini ReportParameter dizileri olarak geçmeniz ve ardından karmaşık Render() yöntem imzası ile render etmeniz gerekir.
IronPDF'nın RenderUrlAsPdf(), tüm işlemi tek bir çağrıda halleder. Başlıklar ve altbilgiler, tam HTML/CSS ve {page} ile {total-pages} gibi yer tutucuları destekleyen HtmlHeaderFooter nesneleri ile yapılandırılır. Detayli bilgi icin eğitimlerimize bakin.
Örnek 3: Veritabanı Tabanlı Rapor
Önce (SSRS):
//SSRS- SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;
class SSRSDatabaseReport
{
static void Main()
{
// Create a ReportViewer instance
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "SalesReport.rdlc";
// Create database connection and fetch data
string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
using (var connection = new SqlConnection(connString))
{
var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
var dataSet = new DataSet();
adapter.Fill(dataSet, "Sales");
// Bind data to report
var dataSource = new ReportDataSource("SalesDataSet", dataSet.Tables[0]);
reportViewer.LocalReport.DataSources.Clear();
reportViewer.LocalReport.DataSources.Add(dataSource);
}
// Render to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
File.WriteAllBytes("sales-report.pdf", bytes);
}
}
//SSRS- SQL Server Reporting Services
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.IO;
class SSRSDatabaseReport
{
static void Main()
{
// Create a ReportViewer instance
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "SalesReport.rdlc";
// Create database connection and fetch data
string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
using (var connection = new SqlConnection(connString))
{
var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
var dataSet = new DataSet();
adapter.Fill(dataSet, "Sales");
// Bind data to report
var dataSource = new ReportDataSource("SalesDataSet", dataSet.Tables[0]);
reportViewer.LocalReport.DataSources.Clear();
reportViewer.LocalReport.DataSources.Add(dataSource);
}
// Render to PDF
string mimeType, encoding, fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = reportViewer.LocalReport.Render(
"PDF", null, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
File.WriteAllBytes("sales-report.pdf", bytes);
}
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.Reporting.WebForms
Imports System.IO
Class SSRSDatabaseReport
Shared Sub Main()
' Create a ReportViewer instance
Dim reportViewer As New ReportViewer()
reportViewer.ProcessingMode = ProcessingMode.Local
reportViewer.LocalReport.ReportPath = "SalesReport.rdlc"
' Create database connection and fetch data
Dim connString As String = "Server=localhost;Database=SalesDB;Integrated Security=true;"
Using connection As New SqlConnection(connString)
Dim adapter As New SqlDataAdapter("SELECT * FROM Sales", connection)
Dim dataSet As New DataSet()
adapter.Fill(dataSet, "Sales")
' Bind data to report
Dim dataSource As New ReportDataSource("SalesDataSet", dataSet.Tables(0))
reportViewer.LocalReport.DataSources.Clear()
reportViewer.LocalReport.DataSources.Add(dataSource)
End Using
' Render to PDF
Dim mimeType As String
Dim encoding As String
Dim fileNameExtension As String
Dim streams As String()
Dim warnings As Warning()
Dim bytes As Byte() = reportViewer.LocalReport.Render("PDF", Nothing, mimeType, encoding, fileNameExtension, streams, warnings)
File.WriteAllBytes("sales-report.pdf", bytes)
End Sub
End Class
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
class IronPdfDatabaseReport
{
static void Main()
{
// Create database connection and fetch data
string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
var dataTable = new DataTable();
using (var connection = new SqlConnection(connString))
{
var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
adapter.Fill(dataTable);
}
// Build HTML table from data
var htmlBuilder = new StringBuilder();
htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>");
foreach (DataColumn column in dataTable.Columns)
htmlBuilder.Append($"<th>{column.ColumnName}</th>");
htmlBuilder.Append("</tr>");
foreach (DataRow row in dataTable.Rows)
{
htmlBuilder.Append("<tr>");
foreach (var item in row.ItemArray)
htmlBuilder.Append($"<td>{item}</td>");
htmlBuilder.Append("</tr>");
}
htmlBuilder.Append("</table>");
// Convert to PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
pdf.SaveAs("sales-report.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
class IronPdfDatabaseReport
{
static void Main()
{
// Create database connection and fetch data
string connString = "Server=localhost;Database=SalesDB;Integrated Security=true;";
var dataTable = new DataTable();
using (var connection = new SqlConnection(connString))
{
var adapter = new SqlDataAdapter("SELECT * FROM Sales", connection);
adapter.Fill(dataTable);
}
// Build HTML table from data
var htmlBuilder = new StringBuilder();
htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>");
foreach (DataColumn column in dataTable.Columns)
htmlBuilder.Append($"<th>{column.ColumnName}</th>");
htmlBuilder.Append("</tr>");
foreach (DataRow row in dataTable.Rows)
{
htmlBuilder.Append("<tr>");
foreach (var item in row.ItemArray)
htmlBuilder.Append($"<td>{item}</td>");
htmlBuilder.Append("</tr>");
}
htmlBuilder.Append("</table>");
// Convert to PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString());
pdf.SaveAs("sales-report.pdf");
}
}
Imports IronPdf
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Text
Class IronPdfDatabaseReport
Shared Sub Main()
' Create database connection and fetch data
Dim connString As String = "Server=localhost;Database=SalesDB;Integrated Security=true;"
Dim dataTable As New DataTable()
Using connection As New SqlConnection(connString)
Dim adapter As New SqlDataAdapter("SELECT * FROM Sales", connection)
adapter.Fill(dataTable)
End Using
' Build HTML table from data
Dim htmlBuilder As New StringBuilder()
htmlBuilder.Append("<h1>Sales Report</h1><table border='1'><tr>")
For Each column As DataColumn In dataTable.Columns
htmlBuilder.Append($"<th>{column.ColumnName}</th>")
Next
htmlBuilder.Append("</tr>")
For Each row As DataRow In dataTable.Rows
htmlBuilder.Append("<tr>")
For Each item In row.ItemArray
htmlBuilder.Append($"<td>{item}</td>")
Next
htmlBuilder.Append("</tr>")
Next
htmlBuilder.Append("</table>")
' Convert to PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlBuilder.ToString())
pdf.SaveAs("sales-report.pdf")
End Sub
End Class
SSRS, önceden tasarlanmış bir .rdlc rapor dosyası ('SalesReport.rdlc'), bir DataSet doldurmayı, rapor tanımıyla eşleşmesi gereken belirli bir adla ('SalesDataSet') bir ReportDataSource oluşturmayı, mevcut veri kaynaklarını temizlemeyi, yeni veri kaynağını eklemeyi ve ardından render etmeyi gerektirir.
IronPDF, mevcut veri erişim kodunuzu (aynı SqlDataAdapter deseni) kullanır, ardından StringBuilder ile dinamik olarak HTML oluşturur. Yerleşim üzerinde tam kontrolünüz vardır; standart HTML/CSS kullanılır - özel rapor tanımı dosyaları gerekmez.
Özellik Karşılaştırması
| Özellik | SSRS | IronPDF | |||
|---|---|---|---|---|---|
| :Altyapı: | Sunucu Gerekli | Evet (Rapor Sunucusu) | Hayır | ||
| SQL Server Lisansı | Gerekli | Gerekli değil | |||
| Windows Server | Gerekli | Herhangi bir platform | |||
| Veritabanı Gerekli | Evet (ReportServer DB) | Hayır | |||
| :Geliştirme: | Görsel Tasarımcı | Evet (.rdlc) | HTML editörleri | ||
| Şablon Formatı | RDLC/RDL | HTML/CSS/Razor | |||
| Veri Kaynakları | Yerleşik DSN | Herhangi bir C# verisi | |||
| :Render İşleme: | HTML'den PDF'ye | Hayır | Tam Chromium | ||
| URL'den PDF'ye | Hayır | Evet | |||
| CSS Desteği | Sınırlı | Tam CSS3 | |||
| JavaScript | Hayır | Tam ES2024 | |||
| Çizelgeler | Yerleşik | JS kütüphaneleri üzerinden | |||
| :Dağıtım: | Rapor Dağıtımı | Sunucuya | Uygulama ile | ||
| Yapılandırma | Karmaşık | Basit | |||
| Bakım | High | Low |
Yaygin Goc Sorunlari
Sorun 1: RDLC Rapor Tanımları
SSRS: Özel .rdlc XML formatını kullanır.
Çözüm: HTML şablonlarına dönüştürün:
- Visual Studio'da .rdlc'yi açın
- Yerleşim yapısını belgeleyin
- HTML/CSS ile yeniden oluşturun
- Veri bağlama için Razor kullanın
Sorun 2: Paylaşılan Veri Kaynakları
SSRS: Bağlantı dizeleri Rapor Sunucusunda.
Çözüm: Uygulamanızın veri erişim katmanını kullanın:
var data = await _dbContext.Sales.ToListAsync();
// Then bind to HTML template
var data = await _dbContext.Sales.ToListAsync();
// Then bind to HTML template
Dim data = Await _dbContext.Sales.ToListAsync()
' Then bind to HTML template
Sorun 3: Rapor Parametreleri UI
SSRS: Yerleşik parametre istemleri.
Çözüm: Uygulamanızda parametre UI'si inşa edin:
// Your own parameter form, then:
var pdf = GenerateReport(startDate, endDate, region);
// Your own parameter form, then:
var pdf = GenerateReport(startDate, endDate, region);
' Your own parameter form, then:
Dim pdf = GenerateReport(startDate, endDate, region)
Sorun 4: Abonelikler/Programlanmış Raporlar
SSRS: Yerleşik abonelik motoru.
Çözüm: Arka plan iş çerçevesi kullanın:
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
// Using Hangfire or similar
RecurringJob.AddOrUpdate("weekly-report",
() => GenerateAndEmailReport(), Cron.Weekly);
Goc Kontrol Listesi
Geçiş Öncesi
- TümSSRSraporlarının envanterini çıkarın (
.rdlcdosyaları) - Veri kaynaklarını ve bağlantıları belgeleyin
- Görsel referans için rapor yerleşimlerini ekran görüntüsü alın
- Her rapor için rapor parametrelerini listeleyin
- Abonelik programlarını not alın
- ironpdf.com adresindenIronPDFlisans anahtarını alın
Kod Güncellemeleri
- ReportViewer paketlerini kaldırın
IronPdfNuGet paketini yükleyin.rdlcdosyalarını HTML şablonlarına dönüştürünLocalReportöğesiniChromePdfRendererile değiştirinReportDataSourceöğesini C# verileri + HTML şablonları ile değiştirinReportParameteröğesini string interpolasyonu ile değiştirinLocalReport.Render("PDF")öğesiniRenderHtmlAsPdf()ile değiştirinHtmlHeaderFooterile başlıklar/altbilgiler uygulayın- Uygulama başlatıldığında lisans başlatma ekleyin
Altyapı
- Rapor Sunucusu'nun hizmet dışı bırakılmasını planlayın
- Abonelikleri iş zamanlayıcısına taşıyın (Hangfire, vb.)
- Dağıtım betiklerini güncelleyin
Test Etme
- PDF çıktısını görsel olarak karşılaştırın
- Veri doğruluğunu doğrulayın
- Sayfalandırmayı test edin
- Tüm parametreleri kontrol edin
- Performans testi

