Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von jsreport zu IronPDF in C#

Migrieren Sie von jsreportzu IronPDF: Vollständiger C#-Migrationsleitfaden

Die Migration von jsreportzuIronPDFverwandelt Ihren .NET-PDF-Workflow von einem Node.js-abhängigen System mit externer Binärverwaltung und separaten Serverprozessen in eine reine .NET-Bibliothek, die vollständig prozessintern läuft. Dieses Handbuch bietet einen umfassenden, schrittweisen Migrationspfad, der die Komplexität der Infrastruktur und die Anforderungen an JavaScript-Templates für professionelle .NET-Entwickler eliminiert.

Warum von jsreportzuIronPDFmigrieren

Die jsreport-Herausforderungen

jsreport führt eine Komplexität ein, die nicht in eine reine .NET-Umgebung gehört:

  1. Node.js-Abhängigkeit: Erfordert Node.js-Laufzeit und -Binärdateien, was die Komplexität der Infrastruktur für eine eigentlich einfache .NET-Anwendung erhöht.

  2. Externe Binärverwaltung: Muss plattformspezifische Binärdateien für Windows, Linux und OSX über separate NuGet-Pakete herunterladen und verwalten (jsreport.Binary, jsreport.Binary.Linux, jsreport.Binary.OSX).

  3. Separater Server-Prozess: Läuft entweder als Dienstprogramm oder Webserver - zusätzliches Prozessmanagement ist mit den Lebenszyklusmethoden StartAsync() und KillAsync() erforderlich.

  4. JavaScript Templating: Erzwingt das Erlernen von Handlebars, JsRender oder anderen JavaScript-Templating-Systemen anstelle der Verwendung nativer C#-Funktionen.

  5. Komplexe Anfragestruktur: Erfordert ausführliche RenderRequest-Objekte mit verschachtelten Template-Konfigurationen, selbst für einfache PDF-Generierung.

  6. Lizenzierungsbeschränkungen: Die kostenlose Version begrenzt die Anzahl der Vorlagen; die Skalierung erfordert eine kommerzielle Lizenz.

  7. Stream-basierte Ausgabe: Gibt Streams zurück, die manuelle Dateioperationen und Speicher-Stream-Management erfordern.

jsreportvsIronPDFVergleich

Feature jsreport IronPDF
Laufzeit Node.js + .NET Reines .NET
Binäres Management Handbuch (jsreport.Binary-Pakete) Automatisch
Server-Prozess Erforderlich (Dienstprogramm oder Webserver) In Bearbeitung
Vorlagenerstellung JavaScript (Handlebars, etc.) C# (Razor, String-Interpolation)
API-Stil Ausführliche Anfrageobjekte Saubere, fließende Methoden
Ausgabe Stream PdfDocument-Objekt
PDF-Bearbeitung Beschränkt Umfassend (zusammenführen, aufteilen, bearbeiten)
Async-Unterstützung Async-only Sowohl sync als auch async

Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, bietetIronPDFeine zukunftssichere Grundlage als native .NET-Bibliothek ohne externe Laufzeitabhängigkeiten.


Migrationskomplexitätsbewertung

Geschätzter Aufwand nach Merkmalen

Feature Komplexität der Migration Notizen
HTML zu PDF Sehr niedrig Direkte Methodenersetzung
URL zu PDF Sehr niedrig Direkte Methode, keine Umgehungsmöglichkeiten
Kopf-/Fußzeilen Niedrig Änderung der Platzhalter-Syntax
Seite Einstellungen Niedrig Eigenschaften-Zuordnung
Server-Lebenszyklus Niedrig Vollständig löschen
Binäres Management Niedrig Vollständig löschen

Paradigmen-Verschiebung

Die grundlegende Veränderung bei dieser jsreport-Migration ist der Wechsel von verbundenen Anfrageobjekten mit Serververwaltung zu einfachen prozessinternen Methodenaufrufen:

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

Bevor Sie beginnen

Voraussetzungen

  1. .NET-Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Access: Fähigkeit, NuGet-Pakete zu installieren
  3. IronPDF Lizenz: Beziehen Sie Ihren Lizenzschlüssel von ironPdf.com

NuGet-Paketänderungen

# Remove jsreportpackages
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 jsreportpackages
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

Lizenz-Konfiguration

// 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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Identifizieren Sie die Verwendung von jsreport

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

Komplette API-Referenz

Klassen-Zuordnungen

jsreport-Klasse IronPDF-Äquivalent Notizen
LocalReporting ChromePdfRenderer Haupt-Renderer
Berichtsdienst ChromePdfRenderer Gleiche Klasse
RenderRequest Parameter der Methode Kein Wrapper erforderlich
Vorlage Parameter der Methode Kein Wrapper erforderlich
Chrome RenderingOptions Chrome-Optionen
Bericht PdfDocument Ergebnisobjekt
Engine (nicht erforderlich) C# für Templating

Methoden-Zuordnungen

jsreport-Methode IronPDF-Äquivalent Notizen
LocalReporting().UseBinary().AsUtility().Create() new ChromePdfRenderer() Einzeiler
rs.RenderAsync(request) renderer.RenderHtmlAsPdf(html) Direkt anrufen
rs.StartAsync() (nicht erforderlich) In Bearbeitung
rs.KillAsync() (nicht erforderlich) Auto-Cleanup
report.Content.CopyTo(stream) pdf.SaveAs(Pfad) oder pdf.BinaryData Direkter Zugang

RenderRequest Property Mappings

jsreportVorlage Eigenschaft IronPDF-Äquivalent Notizen
Vorlage.Inhalt Erster Parameter von RenderHtmlAsPdf() Direkter HTML-String
Template.Recipe = Recipe.ChromePdf (nicht erforderlich) Immer ChromePdf
Template.Engine = Engine.None (nicht erforderlich) C#-Templating verwenden
Chrome.HeaderTemplate RenderingOptions.TextHeader oder HtmlHeader HTML-Kopfzeilen
Chrome.FooterTemplate RenderingOptions.TextFooter oder HtmlFooter HTML-Fußzeilen
Chrome.DisplayHeaderFooter (automatisch) Automatisch aktivierte Kopfzeilen
Chrome.MarginTop RenderingOptions.MarginTop In Millimetern

Platzhalter-Zuordnungen (Kopf-/Fußzeilen)

jsreportPlatzhalter IronPDFPlatzhalter Notizen
<span> class="pageNumber"></span> {Seite} Aktuelle Seite
<span> class="totalPages"></span> {Gesamtseiten} Seiten insgesamt
{#pageNum} {Seite} Aktuelle Seite
{#AnzahlSeiten} {Gesamtseiten} Seiten insgesamt
{#Zeitstempel} {Datum} Aktuelles Datum

Beispiele für die Code-Migration

Beispiel 1: Grundlegendes HTML zu PDF

Vor (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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Der jsreport-Ansatz erfordert drei NuGet-Pakete (jsreport.Binary, jsreport.Local, jsreport.Types), drei Namespace-Importe, asynchrone Ausführung, eine fließende Builder-Kette (LocalReporting().UseBinary().AsUtility().Create()), eine ausführliche RenderRequestmit verschachteltem Template-Objekt, das Recipe und Engineangibt, und manuelles Kopieren von Streams in Dateien mit einem using-Block.

IronPDF reduziert dies auf ein NuGet-Paket, einen Namespace, drei Codezeilen und synchrone Ausführung. Die Methode ChromePdfRenderer.RenderHtmlAsPdf() akzeptiert HTML direkt und gibt ein PdfDocumentmit einer einfachen SaveAs()-Methode zurück. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: URL zu PDF

Vor (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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dieses Beispiel zeigt eine wesentliche Einschränkung von jsreport: Es gibt keine direkte URL-zu-PDF-Methode. Der jsreport-Code muss eine JavaScript-Umleitung (window.location='https://example.com') verwenden, die in HTML-Inhalte eingebettet ist, um eine Webseite zu erfassen. Dieser indirekte Ansatz kann bei bestimmten Websites scheitern und führt zu unnötiger Komplexität.

IronPDF bietet eine spezielle RenderUrlAsPdf()-Methode, die jede URL direkt mit vollständiger JavaScript-Ausführung und moderner CSS-Unterstützung rendert. Keine Workarounds, keine eingebetteten Skripte - einfach die URL weitergeben. Erfahren Sie mehr über die URL in PDF Konvertierung.

Beispiel 3: PDF mit Kopf- und Fußzeilen

Vor (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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Der jsreport-Ansatz erfordert das Hinzufügen eines Chrome-Objekts zum Template, das Setzen von DisplayHeaderFooter = true und die Verwendung von HTML-Vorlagen mit speziellen CSS-Klassenplatzhaltern (<span> class="pageNumber"></span>, <span> class="totalPages"></span>). Die Kopf- und Fußzeilenvorlagen müssen ein vollständiges Inline-Styling enthalten.

IronPDF bietet eine übersichtlichere TextHeaderFooter-Konfiguration mit speziellen Eigenschaften für CenterText, LeftText, RightText und FontSize. Platzhalter für Seitenzahlen verwenden die einfachere Syntax {Seite}und {total-pages}. Siehe die Kopf- und Fußzeilen-Dokumentation für HTML-Kopfzeilenoptionen.


Kritische Hinweise zur Migration

Eliminieren Sie das Server-LebenszyklusManagement

jsreport erfordert ein explizites Server-Lifecycle-Management:

// 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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF wird vollständig prozessintern ausgeführt - kein Serverstart, keine Prozessverwaltung, keine Aufräumarbeiten:

// IronPDF:
var renderer = new ChromePdfRenderer();
// Just use it—no lifecycle management needed
// IronPDF:
var renderer = new ChromePdfRenderer();
// Just use it—no lifecycle management needed
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Plattformspezifische Binärpakete entfernen

jsreport erfordert separate NuGet-Pakete für jede Zielplattform:

# 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 behandelt alle Plattformanforderungen automatisch über ein einziges NuGet-Paket.

Platzhalter-Syntax aktualisieren

jsreport verwendet klassenbasierte CSS-Platzhalter oder geschweifte Klammern.IronPDFverwendet eine andere Syntax:

// 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}"
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Handlebars durch C# String-Interpolation ersetzen

jsreport verwendet häufig Handlebars-Vorlagen mit Engine.Handlebars:

// 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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Vereinfachung der Stream-Verarbeitung

jsreport gibt einen Streamzurück, der manuell kopiert werden muss:

// 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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Fehlerbehebung

Ausgabe 1: LocalReporting nicht gefunden

Problem: Der Code verweist auf die Klasse LocalReporting, die es inIronPDFnicht gibt.

Lösung: Ersetzen Sie durch ChromePdfRenderer:

// 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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe 2: RenderRequest nicht gefunden

Problem: Der Code verwendet RenderRequestund VorlageWrapper-Objekte.

Lösung: Übergeben Sie HTML direkt an Render-Methoden:

// 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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem 3: Nicht angezeigte Seitenzahlen

Problem: Verwendung der jsreport-Platzhalter-Syntax <span> class="pageNumber"></span>.

Lösung: Aktualisierung der IronPDF-Platzhaltersyntax:

// 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}"
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe 4: JsReportBinary nicht gefunden

Problem: Der Code verweist auf JsReportBinary.GetBinary().

Lösung: Vollständig löschen -IronPDFbenötigt keine externen Binärdateien:

// DELETE this jsreportpattern:
.UseBinary(JsReportBinary.GetBinary())

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

//IronPDFneeds nothing—just create the renderer:
var renderer = new ChromePdfRenderer();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • [Identifizieren Sie alle jsreportbenutzen Anweisungen
  • [Listenvorlagen mit Handlebars/JsRender (Konvertierung in C# String-Interpolation)
  • [Dokumentieren Sie die aktuell verwendeten Chrome-Optionen (Ränder, Papiergröße)
  • [Prüfen Sie, ob es sich um einen Webserver oder ein Dienstprogramm handelt (beide werden in den Prozess integriert)
  • [Plattformspezifische Binärpakete beachten (alle löschen)
  • [IronPDF-Lizenzschlüssel erhalten

Paketänderungen

  • [Paket jsreport.Binary entfernen
  • [Paket jsreport.Binary.Linux entfernen
  • [Paket jsreport.Binary.OSX entfernen
  • [Paket jsreport.Local entfernen
  • [Paket jsreport.Types entfernen
  • [Paket jsreport.Client entfernen
  • [Installieren Sie das IronPdf-Paket

Code-Änderungen

  • [Lizenzschlüsselkonfiguration beim Starten hinzufügen
  • [Ersetzen Sie LocalReportingdurch ChromePdfRenderer
  • [RenderRequest Wrapper entfernen
  • [Template Wrapper entfernen
  • [Syntax der Platzhalter aktualisieren (<span> class="pageNumber">{page})
  • [Ersetzen Sie Handlebars durch C# String-Interpolation
  • [Entfernen Sie StartAsync() / KillAsync() Aufrufe
  • [Ersetzen Sie das Kopieren von Datenströmen durch BinaryData oder SaveAs()

Testing

  • [Alle PDF-Erzeugungspfade testen
  • [Überprüfen Sie die Darstellung von Kopf- und Fußzeilen
  • [Seitennummerierung prüfen
  • [Randabstände validieren
  • [Test mit komplexen CSS/JavaScript-Seiten
  • [Benchmark-Leistung

Post-Migration

  • [jsreport Binärdateien löschen
  • [Entfernen Sie Node.js-Abhängigkeiten, wenn sie nicht mehr benötigt werden
  • [Aktualisieren von Deployment-Skripten
  • [Dokumentation aktualisieren

Abschluss

Die Migration von jsreportzuIronPDFbeseitigt die Komplexität der Node.js-Abhängigkeiten, der Verwaltung externer Binärdateien und der Handhabung des Server-Lebenszyklus. Der Paradigmenwechsel von langatmigen RenderRequest-Objekten zu einfachen Methodenaufrufen reduziert das Codevolumen erheblich, wobei die volle Funktionalität der PDF-Erzeugung erhalten bleibt.

Die wichtigsten Änderungen bei dieser Migration sind:

  1. Laufzeit: Node.js + .NET→ Reines .NET
  2. Server-Prozess: Erforderlich → In Bearbeitung (eliminiert)
  3. Binärverwaltung: Manuelle Plattformpakete → Automatisch
  4. Templating: JavaScript (Handlebars) → C# (String-Interpolation)
  5. API-Stil: Ausführliche Request-Objekte → Saubere, fließende Methoden
  6. Platzhalter: <span> class="pageNumber">{page}

Entdecken Sie die vollständige IronPDF-Dokumentation, Tutorials und API-Referenz, um Ihre jsreport-Migration zu beschleunigen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen