Altbilgi içeriğine atla
GEçIş KıLAVUZLARı

jsreport'tan IronPDF'e C# ile Nasıl Geçilir

jsreport'den IronPDF'ye geçiş yapmak, .NET PDF iş akışınızı dışa bağımlı ikili yönetimi ve ayrı sunucu süreçleri olan Node.js bağımlı bir sistemden, tamamen işlem içinde çalışan saf bir .NET kütüphanesine dönüştürür. Bu kılavuz, profesyonel .NET geliştiricileri için altyapı karmaşıklığını ve JavaScript şablonlama gerekliliklerini ortadan kaldıran kapsamlı, adım adım bir geçiş yolu sağlar.

jsreport'den IronPDF'ye Neden Geçiş Yapmalısınız

jsreport Zorlukları

jsreport, saf bir .NET ortamında yeri olmayan karmaşıklıklar ekler:

  1. Node.js Bağımlılığı: Basit bir .NET uygulamasının gerektirmemesi gereken altyapı karmaşıklığını artıran Node.js çalışma zamanı ve ikilileri gerektirir.

  2. Dış İkili Yönetimi: Windows, Linux ve OSX için platforma özgü ikili dosyaları ayrı NuGet paketleri (jsreport.Binary, jsreport.Binary.Linux, jsreport.Binary.OSX) aracılığıyla indirilmeli ve yönetilmelidir.

  3. Ayrı Sunucu Süreci: Bir yardımcı program veya web sunucusu olarak çalışır—StartAsync() ve KillAsync() yaşam döngüsü yöntemleri ile ek süreç yönetimi gereklidir.

  4. JavaScript Şablonlama: Yerel C# yeteneklerini kullanmak yerine Handlebars, JsRender veya diğer JavaScript şablonlama sistemlerini öğrenmeye zorlar.

  5. Karmaşık İstek Yapısı: Basit bir PDF oluşturma için bile iç içe geçmiş Template yapılandırmaları içeren ayrıntılı RenderRequest nesneleri gerektirir.

  6. Lisanslama Sınırlamaları: Ücretsiz katman, örnek başına 5 şablonla sınırlıdır; bundan öte ticari kullanım bir Enterprise lisansı ($395/yıl örnek başına) veya Enterprise Ölçek ($1,295/yıl, örnekler arasında telif ücretsiz) gerektirir. jsreport.net/buy adresine bakın.

  7. Akış Tabanlı Çıktı: Elle dosya işlemleri ve bellek akışı yönetimi gerektiren akışlar döndürür.

jsreport vs IronPDF Karşılaştırması

Özellik jsreport IronPDF
Çalışma Zamanı Node.js + .NET Saf .NET
İkili Yönetim Manuel (jsreport.Binary paketleri) Otomatik
Sunucu Süreci Gerekli (yardımcı program veya web sunucusu) İşlem içi
Şablonlama JavaScript (Handlebars, vb.) C# (Razor, dize interpolasyonu)
API Tarzı Ayrıntılı istek nesneleri Temiz akıcı yöntemler
Çıktı Akış PdfDocument nesnesi
PDF Manipülasyonu Sınırlı Kapsamlı (birleştir, ayır, düzenle)
Asenkron Destek Sadece Async Hem senkron hem asenkron

.NET 10 ve C# 14'e geçmeyi planlayan ekipler için IronPDF, harici çalışma zamanı bağımlılıkları olmadan yerel bir .NET temeli sağlar.


Göç Karmaşıklığı Değerlendirmesi

Özelliklere Göre Tahmini Çaba

Özellik Göç Karmaşıklığı
HTML'den PDF'ye Çok Düşük
URL'yi PDF'ye çevir Çok Düşük
Başlıklar/Altbilgiler Düşük
Sayfa Ayarları Düşük
Sunucu Yaşam Döngüsü Düşük
İkili Yönetim Düşük

Paradigma Değişimi

Bu jsreport geçişindeki temel değişim, sunucu yönetimi ile ayrıntılı istek nesnelerinden basit işlem içi yöntem çağrılarına geçiştir:

jsreport:  LocalReporting().UseBinary().AsUtility().Create() → RenderAsync(RenderRequest) → Akış→ File
IronPDF:   ChromePdfRenderer → RenderHtmlAsPdf(html) → SaveAs()

Başlamadan Önce

Ön Koşullar

  1. .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Erişimi: NuGet paketlerini yükleyebilme
  3. IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin

NuGet Paket Değişiklikleri

# Remove jsreport packages
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSX
dotnet remove package jsreport.Local
dotnet remove package jsreport.Types
dotnet remove package jsreport.Client

# Install IronPDF
dotnet add package IronPdf
# Remove jsreport packages
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSX
dotnet remove package jsreport.Local
dotnet remove package jsreport.Types
dotnet remove package jsreport.Client

# Install IronPDF
dotnet add package IronPdf
SHELL

Lisans Yapılandırması

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

jsreport Kullanımını Belirleme

# Find all jsreport references
grep -r "using jsreport\|LocalReporting\|RenderRequest\|RenderAsync" --include="*.cs" .
grep -r "JsReportBinary\|Template\|Recipe\|Engine\." --include="*.cs" .
# Find all jsreport references
grep -r "using jsreport\|LocalReporting\|RenderRequest\|RenderAsync" --include="*.cs" .
grep -r "JsReportBinary\|Template\|Recipe\|Engine\." --include="*.cs" .
SHELL

Tam API Referansı

Sınıf Eşlemeleri

jsreport Sınıfı IronPDF Eşdeğeri
LocalReporting ChromePdfRenderer
ReportingService ChromePdfRenderer
RenderRequest Metot parametreleri
Template Metot parametreleri
Chrome RenderingOptions
Report PdfDocument
Engine (gerekli değil)

Yöntem Eşlemeleri

jsreport Yöntemi IronPDF Eşdeğeri
LocalReporting().UseBinary().AsUtility().Create() new ChromePdfRenderer()
rs.RenderAsync(request) renderer.RenderHtmlAsPdf(html)
rs.StartAsync() (gerekli değil)
rs.KillAsync() (gerekli değil)
report.Content.CopyTo(stream) pdf.SaveAs(path) veya pdf.BinaryData

RenderRequest Özellik Eşlemeleri

jsreport Şablon Özelliği IronPDF Eşdeğeri
Template.Content RenderHtmlAsPdf() için ilk parametre
Template.Recipe = Recipe.ChromePdf (gerekli değil)
Template.Engine = Engine.None (gerekli değil)
Chrome.HeaderTemplate RenderingOptions.TextHeader veya HtmlHeader
Chrome.FooterTemplate RenderingOptions.TextFooter veya HtmlFooter
Chrome.DisplayHeaderFooter (otomatik)
Chrome.MarginTop RenderingOptions.MarginTop

Yer Tutucu Eşlemeleri (Üstbilgi/Altbilgi)

jsreport Yer Tutucu IronPDF Yer Tutucu
<span class='pageNumber'></span> {page}
<span class='totalPages'></span> {total-pages}
{#pageNum} {page}
{#numPages} {total-pages}
{#timestamp} {date}

Kod Göç Örnekleri

Örnek 1: Temel HTML'den PDF'ye

Önce (jsreport):

// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var rs = new LocalReporting()
            .UseBinary(JsReportBinary.GetBinary())
            .AsUtility()
            .Create();

        var report = await rs.RenderAsync(new RenderRequest()
        {
            Template = new Template()
            {
                Recipe = Recipe.ChromePdf,
                Engine = Engine.None,
                Content = "<h1>Hello from jsreport</h1><p>This is a PDF document.</p>"
            }
        });

        using (var fileStream = File.Create("output.pdf"))
        {
            report.Content.CopyTo(fileStream);
        }

        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var rs = new LocalReporting()
            .UseBinary(JsReportBinary.GetBinary())
            .AsUtility()
            .Create();

        var report = await rs.RenderAsync(new RenderRequest()
        {
            Template = new Template()
            {
                Recipe = Recipe.ChromePdf,
                Engine = Engine.None,
                Content = "<h1>Hello from jsreport</h1><p>This is a PDF document.</p>"
            }
        });

        using (var fileStream = File.Create("output.pdf"))
        {
            report.Content.CopyTo(fileStream);
        }

        Console.WriteLine("PDF created successfully!");
    }
}
Imports jsreport.Binary
Imports jsreport.Local
Imports jsreport.Types
Imports System
Imports System.IO
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim rs = (New LocalReporting()) _
            .UseBinary(JsReportBinary.GetBinary()) _
            .AsUtility() _
            .Create()

        Dim report = Await rs.RenderAsync(New RenderRequest() With {
            .Template = New Template() With {
                .Recipe = Recipe.ChromePdf,
                .Engine = Engine.None,
                .Content = "<h1>Hello from jsreport</h1><p>This is a PDF document.</p>"
            }
        })

        Using fileStream = File.Create("output.pdf")
            report.Content.CopyTo(fileStream)
        End Using

        Console.WriteLine("PDF created successfully!")
    End Function
End Module
$vbLabelText   $csharpLabel

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is a PDF document.</p>");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is a PDF document.</p>");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main(args As String())
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF</h1><p>This is a PDF document.</p>")
        pdf.SaveAs("output.pdf")
        Console.WriteLine("PDF created successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

jsreport yaklaşımı üç NuGet paketi (jsreport.Binary, jsreport.Local, jsreport.Types), üç ad alanı içe aktarması, yalnızca eşzamanlı yürütme, akıcı bir oluşturucu zinciri (LocalReporting().UseBinary().AsUtility().Create()), ayrıca iç içe geçmiş Template nesneleri ile sabitlenmiş ayrıntılı RenderRequest ve bir using bloğu ile manuel akıştan dosyaya kopyalamayı gerektirir.

IronPDF bunu bir NuGet paketi, bir namespace, üç satır kod ve senkron çalışma olarak indirir. ChromePdfRenderer.RenderHtmlAsPdf() yöntemi HTML'yi doğrudan kabul eder ve basit bir SaveAs() yöntemiyle bir PdfDocument döndürür. HTML'den PDF'ye belgelemeyi ek işleme seçenekleri için inceleyin.

Örnek 2: URL'den PDF'e

Önce (jsreport):

// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var rs = new LocalReporting()
            .UseBinary(JsReportBinary.GetBinary())
            .AsUtility()
            .Create();

        var report = await rs.RenderAsync(new RenderRequest()
        {
            Template = new Template()
            {
                Recipe = Recipe.ChromePdf,
                Engine = Engine.None,
                Content = "<html><body><script>window.location='https://example.com';</script></body></html>"
            }
        });

        using (var fileStream = File.Create("webpage.pdf"))
        {
            report.Content.CopyTo(fileStream);
        }

        Console.WriteLine("Webpage PDF created successfully!");
    }
}
// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var rs = new LocalReporting()
            .UseBinary(JsReportBinary.GetBinary())
            .AsUtility()
            .Create();

        var report = await rs.RenderAsync(new RenderRequest()
        {
            Template = new Template()
            {
                Recipe = Recipe.ChromePdf,
                Engine = Engine.None,
                Content = "<html><body><script>window.location='https://example.com';</script></body></html>"
            }
        });

        using (var fileStream = File.Create("webpage.pdf"))
        {
            report.Content.CopyTo(fileStream);
        }

        Console.WriteLine("Webpage PDF created successfully!");
    }
}
Imports jsreport.Binary
Imports jsreport.Local
Imports jsreport.Types
Imports System
Imports System.IO
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim rs = (New LocalReporting()) _
            .UseBinary(JsReportBinary.GetBinary()) _
            .AsUtility() _
            .Create()

        Dim report = Await rs.RenderAsync(New RenderRequest() With {
            .Template = New Template() With {
                .Recipe = Recipe.ChromePdf,
                .Engine = Engine.None,
                .Content = "<html><body><script>window.location='https://example.com';</script></body></html>"
            }
        })

        Using fileStream = File.Create("webpage.pdf")
            report.Content.CopyTo(fileStream)
        End Using

        Console.WriteLine("Webpage PDF created successfully!")
    End Function
End Module
$vbLabelText   $csharpLabel

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("Webpage PDF created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("Webpage PDF created successfully!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main(ByVal args As String())
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("webpage.pdf")
        Console.WriteLine("Webpage PDF created successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

jsreport, istekte Chrome.Url ayarlayarak URL'yi oluşturabilir, ancak üst düzey bir kolaylık yöntemi yoktur — ve mevcut koddaki yaygın bir kalıp, yukarıda gösterildiği gibi JavaScript yönlendirme çözümüdür (window.location='https://example.com') ve komut dosyasıyla gezinmeyi engelleyen sitelerde başarısız olabilir.

IronPDF, URL'yi doğrudan argüman olarak alan, tam JavaScript yürütme ve modern CSS desteği sunan özel bir RenderUrlAsPdf() yöntemi sağlar. URL'den PDF'e dönüştürme hakkında daha fazla bilgi edinin.

Örnek 3: Üstbilgi ve Altbilgili PDF

Önce (jsreport):

// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var rs = new LocalReporting()
            .UseBinary(JsReportBinary.GetBinary())
            .AsUtility()
            .Create();

        var report = await rs.RenderAsync(new RenderRequest()
        {
            Template = new Template()
            {
                Recipe = Recipe.ChromePdf,
                Engine = Engine.None,
                Content = "<h1>Document with Header and Footer</h1><p>Main content goes here.</p>",
                Chrome = new Chrome()
                {
                    DisplayHeaderFooter = true,
                    HeaderTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Custom Header</div>",
                    FooterTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></div>"
                }
            }
        });

        using (var fileStream = File.Create("document_with_headers.pdf"))
        {
            report.Content.CopyTo(fileStream);
        }

        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}
// NuGet: Install-Package jsreport.Binary
// NuGet: Install-Package jsreport.Local
// NuGet: Install-Package jsreport.Types
using jsreport.Binary;
using jsreport.Local;
using jsreport.Types;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var rs = new LocalReporting()
            .UseBinary(JsReportBinary.GetBinary())
            .AsUtility()
            .Create();

        var report = await rs.RenderAsync(new RenderRequest()
        {
            Template = new Template()
            {
                Recipe = Recipe.ChromePdf,
                Engine = Engine.None,
                Content = "<h1>Document with Header and Footer</h1><p>Main content goes here.</p>",
                Chrome = new Chrome()
                {
                    DisplayHeaderFooter = true,
                    HeaderTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Custom Header</div>",
                    FooterTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></div>"
                }
            }
        });

        using (var fileStream = File.Create("document_with_headers.pdf"))
        {
            report.Content.CopyTo(fileStream);
        }

        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}
Imports jsreport.Binary
Imports jsreport.Local
Imports jsreport.Types
Imports System
Imports System.IO
Imports System.Threading.Tasks

Module Program
    Async Function Main(args As String()) As Task
        Dim rs = New LocalReporting() _
            .UseBinary(JsReportBinary.GetBinary()) _
            .AsUtility() _
            .Create()

        Dim report = Await rs.RenderAsync(New RenderRequest() With {
            .Template = New Template() With {
                .Recipe = Recipe.ChromePdf,
                .Engine = Engine.None,
                .Content = "<h1>Document with Header and Footer</h1><p>Main content goes here.</p>",
                .Chrome = New Chrome() With {
                    .DisplayHeaderFooter = True,
                    .HeaderTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Custom Header</div>",
                    .FooterTemplate = "<div style='font-size:10px; text-align:center; width:100%;'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></div>"
                }
            }
        })

        Using fileStream = File.Create("document_with_headers.pdf")
            report.Content.CopyTo(fileStream)
        End Using

        Console.WriteLine("PDF with headers and footers created successfully!")
    End Function
End Module
$vbLabelText   $csharpLabel

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Custom Header",
            FontSize = 10
        };
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}",
            FontSize = 10
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Header and Footer</h1><p>Main content goes here.</p>");
        pdf.SaveAs("document_with_headers.pdf");
        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Custom Header",
            FontSize = 10
        };
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}",
            FontSize = 10
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Header and Footer</h1><p>Main content goes here.</p>");
        pdf.SaveAs("document_with_headers.pdf");
        Console.WriteLine("PDF with headers and footers created successfully!");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

Module Program
    Sub Main(args As String())
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
            .CenterText = "Custom Header",
            .FontSize = 10
        }
        renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
            .CenterText = "Page {page} of {total-pages}",
            .FontSize = 10
        }

        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document with Header and Footer</h1><p>Main content goes here.</p>")
        pdf.SaveAs("document_with_headers.pdf")
        Console.WriteLine("PDF with headers and footers created successfully!")
    End Sub
End Module
$vbLabelText   $csharpLabel

jsreport yaklaşımı, Template üzerine bir Chrome nesnesi eklenmesini, DisplayHeaderFooter = true ayarlanmasını ve özel CSS sınıf yer tutucuları (<span class='pageNumber'></span>, <span class='totalPages'></span>) ile HTML şablonlarının kullanılmasını gerektirir. Üstbilgi ve altbilgi şablonları tam satır içi stil içerir.

IronPDF, CenterText, LeftText, RightText ve FontSize için özel özellikler içeren daha temiz bir TextHeaderFooter yapılandırması sağlar. Sayfa numarası yer tutucuları daha basit {page} ve {total-pages} söz dizimini kullanır. Üstbilgi ve altbilgi dokümantasyonunda HTML üstbilgi seçeneklerini görün.


Kritik Taşıma Notları

Sunucu Yaşam Döngüsü Yönetimi Ortadan Kaldır

Jsreport, açık sunucu yaşam döngüsü yönetimi gerektirir:

// jsreport (DELETE THIS):
var rs = new LocalReporting()
    .UseBinary(JsReportBinary.GetBinary())
    .AsUtility()
    .Create();

// Or for web server mode:
var rs = new LocalReporting()
    .UseBinary(JsReportBinary.GetBinary())
    .AsWebServer()
    .Create();

await rs.StartAsync();
// ... use rs ...
await rs.KillAsync();
// jsreport (DELETE THIS):
var rs = new LocalReporting()
    .UseBinary(JsReportBinary.GetBinary())
    .AsUtility()
    .Create();

// Or for web server mode:
var rs = new LocalReporting()
    .UseBinary(JsReportBinary.GetBinary())
    .AsWebServer()
    .Create();

await rs.StartAsync();
// ... use rs ...
await rs.KillAsync();
' jsreport (DELETE THIS):
Dim rs = (New LocalReporting()) _
    .UseBinary(JsReportBinary.GetBinary()) _
    .AsUtility() _
    .Create()

' Or for web server mode:
rs = (New LocalReporting()) _
    .UseBinary(JsReportBinary.GetBinary()) _
    .AsWebServer() _
    .Create()

Await rs.StartAsync()
' ... use rs ...
Await rs.KillAsync()
$vbLabelText   $csharpLabel

IronPDF tamamen işlem içi çalışır—sunucu başlatma yok, süreç yönetimi yok, temizlik yok:

// IronPDF:
var renderer = new ChromePdfRenderer();
// Just use it—no lifecycle management needed
// IronPDF:
var renderer = new ChromePdfRenderer();
// Just use it—no lifecycle management needed
$vbLabelText   $csharpLabel

Platforma Özgü İkili Paketleri Kaldır

Jsreport, her hedef platform için ayrı NuGet paketleri gerektirir:

# DELETE these platform-specific packages:
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSX
# DELETE these platform-specific packages:
dotnet remove package jsreport.Binary
dotnet remove package jsreport.Binary.Linux
dotnet remove package jsreport.Binary.OSX
SHELL

IronPDF, tek bir NuGet paketi aracılığıyla tüm platform gereksinimlerini otomatik olarak halleder.

Yer Tutucu Sözdizimini Güncelleyin

Jsreport, CSS sınıf tabanlı veya süslü ayraç yer tutucuları kullanır.IronPDF farklı bir sözdizimi kullanır:

// jsreport placeholders:
"<span class='pageNumber'></span>"  // or {#pageNum}
"<span class='totalPages'></span>"  // or {#numPages}

//IronPDF placeholders:
"{page}"
"{total-pages}"
"{date}"
"{html-title}"
// jsreport placeholders:
"<span class='pageNumber'></span>"  // or {#pageNum}
"<span class='totalPages'></span>"  // or {#numPages}

//IronPDF placeholders:
"{page}"
"{total-pages}"
"{date}"
"{html-title}"
' jsreport placeholders:
"<span class='pageNumber'></span>"  ' or {#pageNum}
"<span class='totalPages'></span>"  ' or {#numPages}

' IronPDF placeholders:
"{page}"
"{total-pages}"
"{date}"
"{html-title}"
$vbLabelText   $csharpLabel

Handlebars'ı C# Dize Interpolasyonu ile Değiştirin

jsreport sıkça Engine.Handlebars ile Handlebars şablonlamayı kullanır:

// jsreport Handlebars (DELETE THIS):
Template = new Template
{
    Content = "<h1>Hello, {{name}}</h1>",
    Engine = Engine.Handlebars
},
Data = new { name = "World" }

//IronPDF with C# string interpolation:
string name = "World";
string html = $"<h1>Hello, {name}</h1>";
var pdf = renderer.RenderHtmlAsPdf(html);
// jsreport Handlebars (DELETE THIS):
Template = new Template
{
    Content = "<h1>Hello, {{name}}</h1>",
    Engine = Engine.Handlebars
},
Data = new { name = "World" }

//IronPDF with C# string interpolation:
string name = "World";
string html = $"<h1>Hello, {name}</h1>";
var pdf = renderer.RenderHtmlAsPdf(html);
Imports IronPdf

' jsreport Handlebars (DELETE THIS):
Dim Template = New Template With {
    .Content = "<h1>Hello, {{name}}</h1>",
    .Engine = Engine.Handlebars
}
Dim Data = New With {.name = "World"}

' IronPDF with VB.NET string interpolation:
Dim name As String = "World"
Dim html As String = $"<h1>Hello, {name}</h1>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Akış Yönetimini Basitleştirin

Jsreport, manuel kopyalama gerektiren bir akış döndürür:

// jsreport stream handling (DELETE THIS):
using (var fileStream = File.Create("output.pdf"))
{
    report.Content.CopyTo(fileStream);
}

// Or for byte array:
using (var memoryStream = new MemoryStream())
{
    await report.Content.CopyToAsync(memoryStream);
    return memoryStream.ToArray();
}

//IronPDF direct access:
pdf.SaveAs("output.pdf");
// Or:
byte[] bytes = pdf.BinaryData;
// jsreport stream handling (DELETE THIS):
using (var fileStream = File.Create("output.pdf"))
{
    report.Content.CopyTo(fileStream);
}

// Or for byte array:
using (var memoryStream = new MemoryStream())
{
    await report.Content.CopyToAsync(memoryStream);
    return memoryStream.ToArray();
}

//IronPDF direct access:
pdf.SaveAs("output.pdf");
// Or:
byte[] bytes = pdf.BinaryData;
Imports System.IO

' jsreport stream handling (DELETE THIS):
Using fileStream As FileStream = File.Create("output.pdf")
    report.Content.CopyTo(fileStream)
End Using

' Or for byte array:
Using memoryStream As New MemoryStream()
    Await report.Content.CopyToAsync(memoryStream)
    Return memoryStream.ToArray()
End Using

'IronPDF direct access:
pdf.SaveAs("output.pdf")
' Or:
Dim bytes As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

Hata Ayıklama

Sorun 1: LocalReporting Bulunamadı

Sorun: Kod, IronPDF'de mevcut olmayan LocalReporting sınıfını referans alıyor.

Çözüm: ChromePdfRenderer ile değiştirin:

// jsreport
var rs = new LocalReporting().UseBinary().AsUtility().Create();

// IronPDF
var renderer = new ChromePdfRenderer();
// jsreport
var rs = new LocalReporting().UseBinary().AsUtility().Create();

// IronPDF
var renderer = new ChromePdfRenderer();
' jsreport
Dim rs = New LocalReporting().UseBinary().AsUtility().Create()

' IronPDF
Dim renderer = New ChromePdfRenderer()
$vbLabelText   $csharpLabel

Sorun 2: RenderRequest Bulunamadı

Sorun: Kod, RenderRequest ve Template sarmalayıcı nesnelerini kullanıyor.

Çözüm: HTML'i doğrudan render yöntemlerine gönderin:

// jsreport
await rs.RenderAsync(new RenderRequest { Template = new Template { Content = html } });

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
// jsreport
await rs.RenderAsync(new RenderRequest { Template = new Template { Content = html } });

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
Imports System.Threading.Tasks

' jsreport
Await rs.RenderAsync(New RenderRequest With {.Template = New Template With {.Content = html}})

' IronPDF
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Sorun 3: Sayfa Numaraları Görünmüyor

Sorun: jsreport yer tutucu sözdizimi <span class='pageNumber'></span> kullanılıyor.

Çözüm:IronPDF yer tutucu sözdizimine güncelleyin:

// jsreport syntax (won't work)
"Page <span class='pageNumber'></span> of <span class='totalPages'></span>"

//IronPDF syntax
"Page {page} of {total-pages}"
// jsreport syntax (won't work)
"Page <span class='pageNumber'></span> of <span class='totalPages'></span>"

//IronPDF syntax
"Page {page} of {total-pages}"
' jsreport syntax (won't work)
"Page <span class='pageNumber'></span> of <span class='totalPages'></span>"

' IronPDF syntax
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Sorun 4: JsReportBinary Bulunamadı

Sorun: Kod, JsReportBinary.GetBinary() referans alıyor.

Çözüm: Tamamen silin—IronPDF dışsal ikililere ihtiyaç duymaz:

// DELETE this jsreport pattern:
.UseBinary(JsReportBinary.GetBinary())

//IronPDF needs nothing—just create the renderer:
var renderer = new ChromePdfRenderer();
// DELETE this jsreport pattern:
.UseBinary(JsReportBinary.GetBinary())

//IronPDF needs nothing—just create the renderer:
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Geçiş Kontrol Listesi

Öncesi-Geçiş

  • Tüm jsreport using ifadelerini belirleyin Handlebars/JsRender kullanan şablonları listeleyin (C# dize eklemeye dönüştürün) Kullanılan mevcut Chrome seçeneklerini belgeleyin (kenar boşlukları, kağıt boyutu) Web sunucusu ve yardımcı program modu için kontrol edin (her ikisi de işlem içi olur) Platforma özgü ikili paketleri not alın (hepsini silin) -IronPDF lisans anahtarını edinin

Paket Değişiklikleri

  • jsreport.Binary paketini kaldırın
  • jsreport.Binary.Linux paketini kaldırın
  • jsreport.Binary.OSX paketini kaldırın
  • jsreport.Local paketini kaldırın
  • jsreport.Types paketini kaldırın
  • jsreport.Client paketini kaldırın
  • IronPdf paketini yükleyin

Kod Değişiklikleri

Başlangıçta lisans anahtarı yapılandırmasını ekleyin

  • LocalReporting ile ChromePdfRenderer değiştirin
  • RenderRequest sarmalayıcısını kaldırın
  • Template sarmalayıcısını kaldırın
  • Yer tutucu sözdizimini güncelleyin (<span class='pageNumber'>{page})
  • Handlebar'ları C# dize enterpolasyonu ile değiştirin
  • StartAsync() / KillAsync() çağrılarını kaldırın
  • Akış kopyalamayı BinaryData veya SaveAs() ile değiştirin

Test Etme

Tüm PDF oluşturma yollarını test edin

  • Başlık/altbilgi render'ını doğrulayın.
  • Sayfa numaralandırmayı kontrol edin
  • Kenar boşluğu aralıklarını doğrulayın
  • Karmaşık CSS/JavaScript sayfalarıyla test edin Performansı karşılaştırın

Geçiş Sonrası

  • jsreport ikili dosyalarını silin
  • Node.js bağımlılıklarını artık gerekli değilse kaldırın
  • Dağıtım betiklerini güncelleyin
  • Belgeleri güncelleyin

Lütfen dikkate alınjsreport, ilgili sahibinin tescilli markasıdır. Bu site, jsreport ile ilişkili değildir, onaylı değildir veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. 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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara