Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de jsreport à IronPDF en C#

Migrer de jsreportàIronPDF: Guide complet de migration vers C

La migration de jsreportversIronPDFtransforme votre flux de travail PDF .NET d'un système dépendant de Node.js avec une gestion binaire externe et des processus serveur distincts à une bibliothèque .NET pure qui s'exécute entièrement dans le processus. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine la complexité de l'infrastructure et les exigences de templating JavaScript pour les développeurs .NET professionnels.

Pourquoi migrer de jsreportà IronPDF

Les défis de jsreport

jsreport introduit une complexité qui n'a pas sa place dans un environnement .NET pur :

  1. Dépendance Node.js : Nécessite le runtime et les binaires Node.js, ce qui ajoute une complexité d'infrastructure à ce qui devrait être une application .NET simple.

  2. Gestion des binaires externes : Doit télécharger et gérer les binaires spécifiques à la plateforme pour Windows, Linux et OSX par le biais de paquets NuGet distincts (jsreport.Binary, jsreport.Binary.Linux, jsreport.Binary.OSX).

  3. Processus de serveur séparé : Fonctionne comme un utilitaire ou un serveur web - une gestion supplémentaire du processus est nécessaire avec les méthodes de cycle de vie StartAsync() et KillAsync().

  4. JavaScript Templating : Force l'apprentissage de Handlebars, JsRender, ou d'autres systèmes de templating JavaScript au lieu d'utiliser les capacités natives de C#.

  5. Structure de requête complexe : Requiert des objets RenderRequestverbeux avec des configurations Modèleimbriquées pour la génération de PDF, même simple.

  6. Limitations de licence : La version gratuite limite le nombre de modèles ; la mise à l'échelle nécessite une licence commerciale.

  7. Sortie par flux : Renvoie des flux nécessitant des opérations manuelles sur les fichiers et la gestion des flux de mémoire.

jsreportvsIronPDFComparaison

Fonction jsreport IronPDF
Temps d'exécution Node.js + .NET Pure .NET
Gestion binaire Manuel (paquets binaires jsreport) Automatique
Processus de serveur Nécessaire (utilitaire ou serveur web) En cours
Création de modèles JavaScript (guidon, etc.) C# (Razor, interpolation de chaînes)
Style API Objets de requête verbeux Méthodes fluides et propres
Production Flux Objet PdfDocument
Manipulation de PDF Limité Extensif (fusionner, diviser, éditer)
Prise en charge de l'asynchronisme Async uniquement Sync et async

Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 jusqu'en 2025 et 2026,IronPDFconstitue une base à l'épreuve du temps en tant que bibliothèque native .NET sans dépendances d'exécution externes.


Évaluation de la complexité de la migration

Estimation de l'effort par fonctionnalité

Fonction Complexité de la migration Notes
HTML vers PDF Très faible Remplacement direct de la méthode
URL vers PDF Très faible Méthode directe, sans contournement
En-têtes/Pieds de page Faible Modification de la syntaxe des espaces réservés
Paramètres de la page Faible Cartographie des propriétés
Cycle de vie du serveur Faible Supprimer entièrement
Gestion binaire Faible Supprimer entièrement

Changement de paradigme

Le changement fondamental dans cette migration jsreportest de passer des objets de requête verbeux avec gestion de serveur à des appels de méthode simples dans le processus :

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

Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès NuGet : Capacité à installer des paquets NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur ironpdf.com

Modifications du paquet NuGet

# 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

Configuration de la licence

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

Identifier l'utilisation de 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

Référence API complète

Mappages de classes

classe jsreport Équivalent d'IronPDF Notes
LocalReporting ChromePdfRenderer Rendu principal
ReportingService ChromePdfRenderer Même classe
RenderRequest Paramètres de la méthode Pas besoin de wrapper
Modèle Paramètres de la méthode Pas besoin de wrapper
Chrome Options de rendu Options Chrome
Rapport Document PDF Objet du résultat
Moteur (pas nécessaire)* C# pour la création de modèles

Mise en correspondance des méthodes

méthode jsreport Équivalent d'IronPDF Notes
LocalReporting().UseBinary().AsUtility().Create() new ChromePdfRenderer() Un seul mot
rs.RenderAsync(request) renderer.RenderHtmlAsPdf(html) Appel direct
rs.StartAsync() (pas nécessaire)* En cours
rs.KillAsync() (pas nécessaire)* Nettoyage automatique
report.Content.CopyTo(stream) pdf.SaveAs(path) ou pdf.BinaryData Accès direct

Mappages des propriétés de RenderRequest

propriété du modèle jsreport Équivalent d'IronPDF Notes
Template.Content Premier paramètre de RenderHtmlAsPdf() Chaîne HTML directe
Template.Recipe = Recipe.ChromePdf (pas nécessaire)* Toujours ChromePdf
Template.Engine = Engine.None (pas nécessaire)* Utiliser le modèle C#
Chrome.HeaderTemplate RenderingOptions.TextHeader ou HtmlHeader En-têtes HTML
Chrome.FooterTemplate RenderingOptions.TextFooter ou HtmlFooter Pieds de page HTML
Chrome.DisplayHeaderFooter le travail de traduction doit rester professionnel, en préservant la précision technique tout en expliquant les caractéristiques et les avantages de ces outils de développement En-têtes activés automatiquement
Chrome.MarginTop RenderingOptions.MarginTop En millimètres

Mappages de caractères de remplacement (en-têtes/pieds de page)

jsreportPlaceholder IronPDFPlaceholder Notes
<span> class="pageNumber"></span> {page} Page actuelle
<span> class="totalPages"></span> {total-pages} Nombre total de pages
{#pageNum} {page} Page actuelle
{#numPages} {total-pages} Nombre total de pages
{#timestamp} {date} Date actuelle

Exemples de migration de code

Exemple 1 : HTML de base vers PDF

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

Après (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

L'approche jsreportnécessite trois packages NuGet (jsreport.Binary, jsreport.Local, jsreport.Types), trois importations d'espace de noms, une exécution asynchrone uniquement, une chaîne de construction fluide (LocalReporting().UseBinary().AsUtility().Create()), un RenderRequestverbeux avec un objet Modèleimbriqué spécifiant Recipe et Engine, et une copie manuelle du flux vers le fichier avec un bloc using.

IronPDF réduit cette tâche à un package NuGet, un espace de noms, trois lignes de code et une exécution synchrone. La méthode ChromePdfRenderer.RenderHtmlAsPdf() accepte directement le HTML et renvoie un Document PDFavec une simple méthode SaveAs(). Voir la documentation HTML vers PDF pour des options de rendu supplémentaires.

Exemple 2 : URL vers PDF

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

Après (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

Cet exemple met en évidence une limitation importante de jsreport: il n'y a pas de méthode directe d'URL vers PDF. Le code jsreportdoit utiliser une solution de contournement de redirection JavaScript (window.location='https://example.com') intégrée au contenu HTML pour capturer une page web. Cette approche indirecte peut échouer avec certains sites web et ajoute une complexité inutile.

IronPDF fournit une méthode RenderUrlAsPdf() dédiée qui rend directement n'importe quelle URL avec une exécution JavaScript complète et un support CSS moderne. Pas de solutions de contournement, pas de scripts intégrés - il suffit de transmettre l'URL. En savoir plus sur la conversion d'URL en PDF.

Exemple 3 : PDF avec en-têtes et pieds de page

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

Après (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

L'approche jsreportnécessite l'ajout d'un objet Chromeau Template, la définition de DisplayHeaderFooter = true, et l'utilisation de modèles HTML avec des espaces réservés de classe CSS spéciaux (<span> class="pageNumber"></span>, <span> class="totalPages"></span>). Les modèles d'en-tête et de pied de page doivent inclure une mise en forme en ligne complète.

IronPDF fournit une configuration TextHeaderFooter plus propre avec des propriétés dédiées pour CenterText, LeftText, RightText, et FontSize. Les espaces réservés aux numéros de page utilisent la syntaxe plus simple de {page}et {total-pages}. Voir la documentation sur les en-têtes et les pieds de page pour les options d'en-tête HTML.


Notesde migration essentielles

Éliminer la gestion du cycle de vie du serveur

jsreport nécessite une gestion explicite du cycle de vie du serveur :

// 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 s'exécute entièrement dans le processus - pas de démarrage du serveur, pas de gestion des processus, pas de nettoyage :

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

Supprimer les paquets binaires spécifiques à la plateforme

jsreport nécessite des packages NuGet distincts pour chaque plateforme cible :

# 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 gère automatiquement toutes les exigences relatives à la plateforme par le biais d'un seul package NuGet.

Mettre à jour la syntaxe des espaces réservés

jsreport utilise des caractères de remplacement CSS basés sur des classes ou des accolades.IronPDFutilise une syntaxe différente :

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

Remplacer le guidon avec l'interpolation de chaînes de caractères en C

jsreport utilise souvent le templating Handlebars avec 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

Simplifier le traitement des flux

jsreport renvoie un flux qui nécessite une copie manuelle :

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

Dépannage

Édition 1 : LocalReporting introuvable

Problème : Le code fait référence à la classe LocalReportingqui n'existe pas dans IronPDF.

Solution : Remplacer par 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

Edition 2 : RenderRequest Not Found

Problème : Le code utilise les objets enveloppants RenderRequestet Template.

Solution : Transmettre le code HTML directement aux méthodes de rendu :

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

Sujet 3 : Les numéros de page n'apparaissent pas

Problème : Utilisation de la syntaxe de l'espace réservé de jsreport<span> class="pageNumber"></span>.

Solution : Mise à jour de la syntaxe des espaces réservés d'IronPDF :

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

Edition 4 : JsReportBinary introuvable

Problème : Le code fait référence à JsReportBinary.GetBinary().

Solution : Supprimer entièrement -IronPDFne nécessite pas de binaires externes :

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

Liste de contrôle de la migration

Pré-migration

  • [Identifier toutes les déclarations utilisant de jsreport
  • [ ] Modèles de liste utilisant Handlebars/JsRender (convertir en interpolation de chaîne C#)
  • [Documenter les options actuelles de Chrome utilisées (marges, taille du papier)
  • [La traduction doit rester professionnelle, en préservant l'exactitude technique tout en expliquant les caractéristiques et les avantages de ces outils de développement
  • [Noter les paquets binaires spécifiques à la plate-forme (supprimer tout)
  • [Obtenir la clé de licence IronPDF

Modifications du paquet

  • [Supprimer le paquet jsreport.Binary
  • [Enlever le paquet jsreport.Binary.Linux
  • [Supprimer le paquet jsreport.Binary.OSX
  • supprimer le paquet jsreport.Local [ ] Supprimer le paquet jsreport.Local [ ]
  • supprimer le paquet jsreport.Types [ ] Supprimer le paquet jsreport.Types [ ]
  • [Supprimer le paquet jsreport.Client
  • installer le paquet IronPdf [ ]

Modifications du code

  • [Ajouter la configuration de la clé de licence au démarrage
  • [Remplacer LocalReportingpar ChromePdfRenderer
  • supprimer le wrapper RenderRequest[ ]
  • supprimer le wrapper Modèle[ ] Supprimer le wrapper Modèle[ ]
  • [Mise à jour de la syntaxe des espaces réservés (<span> class="pageNumber">{page})
  • [ ] Remplacer Handlebars par une interpolation de chaînes de caractères en C#
  • [Supprimer les appels StartAsync() / KillAsync()
  • [Remplacer la copie de flux par BinaryData ou SaveAs()

Testing

  • [Test de tous les chemins de génération PDF
  • [Vérifier le rendu de l'en-tête et du pied de page
  • [Vérifier la numérotation des pages
  • [Valider l'espacement des marges
  • [Test avec des pages CSS/JavaScript complexes
  • [Performances de référence

Post-Migration

  • [Supprimer les fichiers binaires de jsreport
  • [Supprimer les dépendances Node.js si elles ne sont plus nécessaires
  • [Mise à jour des scripts de déploiement
  • [Mise à jour de la documentation

Conclusion

La migration de jsreportversIronPDFélimine la complexité des dépendances Node.js, de la gestion des binaires externes et de la gestion du cycle de vie du serveur. Le passage d'objets RenderRequestverbeux à de simples appels de méthode réduit considérablement le volume de code tout en conservant des capacités de génération de PDF complètes.

Les principaux changements apportés à cette migration sont les suivants :

  1. Runtime : Node.js + .NET→ Pure .NET
  2. Processus de serveur : Requis → En cours (éliminé)
  3. Gestion binaire : Paquets de plateforme manuels → Automatique
  4. Templating : JavaScript (Handlebars) → C# (interpolation de chaînes de caractères)
  5. Style API : Objets de requête verbeux → Méthodes fluides propres
  6. Placeholders : <span> class="pageNumber">{page}

Explorez la documentation complète IronPDF, tutoriel, et référence API pour accélérer votre migration vers jsreport.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite