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

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

jsreport'tan IronPDF'a geçiş, Node.js'e bağımlı bir sistemle dışsal ikili yönetim ve ayrı sunucu süreçlerine sahip bir .NET PDF iş akışınızı, tamamen süreç içi çalışacak saf bir .NET kütüphanesine dönüştürür. Bu rehber, yapı gereksizliği ve profesyonel .NET geliştiricileri için JavaScript şablonlama gerekliliklerini ortadan kaldıran kapsayıcı, adım adım bir geçiş yolu sağlar.

jsreport'tan IronPDF'a Neden Göç Edilmeli

jsreportZorlukları

jsreport, saf bir .Net ortamında olmaması gereken karmaşıklıkları tanıtır:

  1. Node.js Bağımlılığı: Node.js çalışma zamanı ve ikilileri gerektirir, bu da basit bir .NET uygulaması olması gereken bir yere altyapı karmaşıklığı ekler.

  2. Harici İkili Dosya Yönetimi: Platforma özgü ikili dosyaların Windows, Linux ve OSX için ayrı NuGet paketleri (jsreport.Binary, jsreport.Binary.Linux, jsreport.Binary.OSX) aracılığıyla indirilmesi ve yönetilmesi gereklidir.

  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: Yerli C# yeteneklerini kullanmak yerine Handlebars, JsRender veya diğer JavaScript şablon sistemlerini öğrenmeyi zorunlu kılar.

  5. Karmaşık İstek Yapısı: Basit PDF oluşturma için bile iç içe geçmiş Template yapılandırmalarına sahip detaylı RenderRequest nesneleri gerektirir.

  6. Lisanslama Kısıtlamaları: Ücretsiz katman şablon sayısını sınırlar; ölçeklendirme, ticari lisans gerektirir.

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

jsreport vsIronPDFKarşılaştırması

Özellik jsreport IronPDF
Çalışma Zamanı Node.js + .NET Saf .NET
Ikili Yonetim Manuel (jsreport.Binary paketleri) Otomatik
Sunucu Süreci Gerekli (yardımcı program veya web sunucusu) Süreç içi
Şablonlama JavaScript (Handlebars, vb.) C# (Razor, string interpolation)
API Stili Ayrıntılı istek nesneleri Temiz akıcı metodlar
Çıkış Akış PdfDocument nesnesi
PDF Manipülasyonu Sınırlı Kapsamlı (Birlestirme, bölme, düzenleme)
Async Destegi Sadece Async Hem senkron hem de asenkron

.NET 10 ve C# 14'ün 2025 ve 2026 boyunca benimsenmesini planlayan ekipler için, IronPDF, dışsal çalışma zamanı bağımlılıkları olmadan yerel bir .NET kütüphanesi olarak geleceğe uygun bir temel sağlar.


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

Özelliklere Göre Tahmini Çaba

Özellik Göç Karmaşıklığı
HTML'den PDF'ye Çok Düşük
URL'den PDF'ye Çok Düşük
Üstbilgi/Altbilgi Low
Sayfa Ayarları Low
Sunucu Yaşam Döngüsü Low
Ikili Yonetim Low

Paradigma Değişikliği

Bujsreportgeçişindeki temel değişiklik, sunucu yönetimi olan ayrıntılı istek nesnelerinden basit işlem içi metod çağrılarına: geçmektir.

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

Başlamadan Önce

Önkoş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ükleme yeteneği
  3. IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin

NuGet Paket Değişiklikleri

# Removejsreportpackages
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
# Removejsreportpackages
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

jsreportKullanımını Belirleyin

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

API Referansının Tamamı

Sınıf Eslemeleri

jsreport Sınıfı IronPDF Eşdeğeri
LocalReporting ChromePdfRenderer
ReportingService ChromePdfRenderer
RenderRequest Yöntem parametreleri
Template Yöntem parametreleri
Chrome RenderingOptions
Report PdfDocument
Engine (gerekmez)

Metot Eşlemeleri

jsreport Metodu IronPDF Eşdeğeri
LocalReporting().UseBinary().AsUtility().Create() new ChromePdfRenderer()
rs.RenderAsync(request) renderer.RenderHtmlAsPdf(html)
rs.StartAsync() (gerekmez)
rs.KillAsync() (gerekmez)
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 birinci parametre
Template.Recipe = Recipe.ChromePdf (gerekmez)
Template.Engine = Engine.None (gerekmez)
Chrome.HeaderTemplate RenderingOptions.TextHeader veya HtmlHeader
Chrome.FooterTemplate RenderingOptions.TextFooter veya HtmlFooter
Chrome.DisplayHeaderFooter (otomatik)
Chrome.MarginTop RenderingOptions.MarginTop

Yer Tutucu Eşlemeleri (Başlıklar/Alt Bilgiler)

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 Geçiş Ö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

Sonra (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ı ithalatı, yalnızca asenkron yürütme, bir akıcı yapı zinciri (LocalReporting().UseBinary().AsUtility().Create()), iç içe geçmiş Template nesnesiyle RenderRequest ve Engine belirten detaylı Recipe ve Engine gerektirir, ve elle akıştan dosyaya kopyalama using bloğu ile yapılır.

IronPDF, bunu tek bir NuGet paketi, bir namespace, üç satır kod ve senkron yürütmeyle azaltır. ChromePdfRenderer.RenderHtmlAsPdf() yöntemi HTML doğrudan kabul eder ve basit bir SaveAs() yöntemi ile PdfDocument döner. Daha fazla işleme seçeneği için HTML'den PDF'ye dokümantasyonuna bakın.

Ö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

Sonra (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

Bu örnek, jsreport'taki önemli bir sınırlamayı vurgular: doğrudan URL-to-PDF metodu yoktur.jsreportkodu web sayfasını yakalamak için HTML içeriğine gömülü bir JavaScript yönlendirme geçici çözümü (window.location='https://example.com') kullanmalıdır. Bu dolaylı yaklaşım belirli web sitelerinde başarısız olabilir ve gereksiz karmaşıklık ekler.

IronPDF, tam JavaScript yürütümü ve modern CSS desteği ile herhangi bir URL'yi doğrudan işleyen özel bir RenderUrlAsPdf() yöntemi sağlar. Çözümler veya gömülü betikler yok—sadece URL'yi geçirmeniz yeterlidir. URL'den PDF'ye dönüşüm hakkında daha fazla bilgi edinin.

Örnek 3: Başlıklı ve Alt Başlıklı 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

Sonra (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ı Chrome nesnesini Template eklemeyi, DisplayHeaderFooter = true ayarlamayı ve özel CSS sınıfı yer tutucuları (<span class='pageNumber'></span>, <span class='totalPages'></span>) ile HTML şablonları kullanmayı gerektirir. Başlık ve alt başlık şablonları tam iç satır stilini içermelidir.

IronPDF gözden geçirme TextHeaderFooter yapılandırması CenterText, LeftText, RightText ve FontSize için atanmış özelliklerle sağlar. Sayfa numarası yer tutucuları daha basit {page} ve {total-pages} sözdizimi kullanır. HTML başlık seçenekleri için header ve footer dokümantasyonunu inceleyin.


Kritik Geçiş Notları

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

jsreport, açık sunucu yaşam döngüsü yönetimini 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 süreç içi çalışır—sunucu başlatma, süreç yönetimi, temizlik yoktur:

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

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 tüm platform gereksinimlerini otomatik olarak tek bir NuGet paketi aracılığıyla yönetir.

Yer Tutucu Söz Dizimini Güncelleyin

jsreport CSS sınıf tabanlı veya süslü ayraçla yer tutucuları kullanır.IronPDFfarklı bir söz dizimi kullanır:

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

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

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

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

Handlebars'ı C# Dizi Enterpolasyonu ile Değiştirin

jsreport genellikle Engine.Handlebars ile Handlebars şablonlaması kullanır:

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

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

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

' jsreportHandlebars (DELETE THIS):
Dim template As 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ış İşleme İşlemini Basitleştirin

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

//jsreportstream 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();
}

//IronPDFdirect access:
pdf.SaveAs("output.pdf");
// Or:
byte[] bytes = pdf.BinaryData;
//jsreportstream 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();
}

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

'jsreportstream 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

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

Ariza Giderme

Konu 1: LocalReporting Bulunamadı

Sorun: Kod,IronPDFiçinde bulunmayan LocalReporting sınıfına referans veriyor.

Çö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

Konu 2: RenderRequest Bulunamadı

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

Çözüm: HTML'yi doğrudan render yöntemlerine geçirin:

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

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

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

Çözüm:IronPDFyer tutucu sözdizimine güncelleyin:

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

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

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

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

Konu 4: JsReportBinary Bulunamadı

Sorun: Kod JsReportBinary.GetBinary() referans veriyor.

Çözüm: Tamamen silin—IronPDF harici ikili dosyalar gerektirmez:

// DELETE thisjsreportpattern:
.UseBinary(JsReportBinary.GetBinary())

//IronPDFneeds nothing—just create the renderer:
var renderer = new ChromePdfRenderer();
// DELETE thisjsreportpattern:
.UseBinary(JsReportBinary.GetBinary())

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

Goc Kontrol Listesi

Geçiş Öncesi

  • Tümjsreportusing ifadelerini tespit edin
  • Handlebars/JsRender kullanan şablonları listeleyin (C# dizi enterpolasyonuna dönüştürün)
  • Kullanılan mevcut Chrome seçeneklerini belgeleyin (marjlar, kağıt boyutu)
  • Web sunucusu ve yardımcı program modu için kontrol edin (her ikisi de süreç içi olur)
  • Platforma özgü ikili paketleri not edin (hepsini silin) -IronPDFlisans 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ı 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})
  • Handlebars'ı C# dizi 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/alt bilgi görüntülemeyi doğrulayın
  • Sayfa numaralandırmayı kontrol edin
  • Marj boşluklarını doğrulayın
  • Karmaşık CSS/JavaScript sayfalarıyla test edin
  • Performansı benchmark yapin

Geçişten Sonra

-jsreportikili dosyalarını silin

  • Node.js bağımlılıklarını artık gerekliyse kaldırın
  • Dağıtım betiklerini güncelleyin
  • Belgeleri güncelleyin

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

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