Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de Rotativa à IronPDF en C#

Migrer de RotativaàIronPDF: Guide de migration complet en C

La migration de RotativaversIronPDFpermet de remédier aux failles de sécurité critiques tout en modernisant votre flux de production de PDF. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine la dépendance wkhtmltopdf abandonnée, permet la prise en charge de CSS et JavaScript modernes et offre une compatibilité multiplateforme au-delà d'ASP.NET MVC.

Pourquoi migrer de Rotativaà IronPDF

Comprendre Rotativa

Rotativa est depuis longtemps un choix populaire parmi les développeurs pour générer des PDF en C#. Elle s'appuie sur l'outil wkhtmltopdf pour convertir le contenu HTML au format PDF. Rotativaest une bibliothèque open-source spécialement conçue pour les applications ASP.NET MVC. Cependant, bien qu'elle ait attiré un public important, la dépendance de Rotativaà l'égard d'une pile technologique dépassée présente des défis qui ne sont pas forcément évidents pour tous les développeurs.

À la base, Rotativafournit un moyen simple d'intégrer la génération de PDF dans les projets ASP.NET MVC, en tirant parti de wkhtmltopdf pour ses fonctionnalités dorsales.

Avis de sécurité critique

Rotativa intègre wkhtmltopdf, qui présente des VULNÉRABILITÉS DE SÉCURITÉ CRITIQUES NON PRÉVUES.

Attribut Valeur
CVE ID CVE-2022-35583
Sévérité CRITIQUE (9,8/10)
Vecteur d'attaque Réseau
Statut NE SERA JAMAIS CORRIGÉ
Affectés TOUTES les versions de Rotativa

wkhtmltopdf a été officiellement abandonné en décembre 2022. Les mainteneurs ont explicitement déclaré qu'ils ne corrigeraient PAS les vulnérabilités de sécurité. Chaque application utilisant Rotativaest exposée en permanence.

Comment fonctionne l'attaque

<!-- Attacker submits this content via your MVC model -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin" />
<!-- Attacker submits this content via your MVC model -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin" />
HTML

Impact:

  • Accéder aux points d'extrémité des métadonnées du nuage AWS/Azure/GCP
  • Voler des données et des identifiants d'API internes
  • Balayage des ports des réseaux internes
  • Exfiltrer une configuration sensible

La crise technologique

Rotativa intègre wkhtmltopdf, qui utilise :

  • Qt WebKit 4.8 (depuis 2012)
  • Pas de prise en charge de Flexbox
  • Pas de prise en charge de la grille CSS
  • Exécution JavaScript interrompue
  • Pas de prise en charge d'ES6

Comparaison Rotativavs IronPDF

Fonction Rotativa IronPDF
Compatibilité des projets ASP.NET MVC uniquement Tout type de projet .NET (MVC, Razor Pages, Blazor, etc.)
Maintenance Abandonné Maintenu activement
Sécurité Vulnérabilité due aux dépendances wkhtmltopdf (CVE-2022-35583) Mises à jour régulières et correctifs de sécurité
Rendu HTML WebKit dépassé Chrome moderne
CSS3 Partiel Prise en charge complète
Flexbox/Grid Non pris en charge Prise en charge complète
JavaScript Peu fiable ES6+ complet
Pages Razor Non pris en charge Prise en charge complète
Blazor Non pris en charge Prise en charge complète
Manipulation de PDF Non disponible Complet
Signatures numériques Non disponible Complet
Conformité PDF/A Non disponible Complet
Async/Await Synchrone uniquement Complet async
Open Source Oui, licence MIT Non, licence commerciale

Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 d'ici 2025 et 2026,IronPDFoffre un rendu moderne de Chromium et une prise en charge multiplateforme que Rotativane peut pas proposer.


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 Rotativa
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore

# Install IronPDF
dotnet add package IronPdf
# Remove Rotativa
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore

# Install IronPDF
dotnet add package IronPdf
SHELL

Supprimer les binaires de wkhtmltopdf

Supprimez ces fichiers de votre projet :

  • wkhtmltopdf.exe
  • wkhtmltox.dll
  • Tous les dossiers Rotativa/

Ces outils sont à l'origine de la CVE-2022-35583.IronPDFne nécessite pas de binaires natifs.

Configuration de la licence

// Add in Program.cs or Startup.cs
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add in Program.cs or Startup.cs
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Référence API complète

Modifications de l'espace de nommage

// Before: Rotativa
using Rotativa;
using Rotativa.Options;
using Rotativa.AspNetCore;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Rotativa
using Rotativa;
using Rotativa.Options;
using Rotativa.AspNetCore;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mappages de classes de base

Classe Rotativa Équivalent d'IronPDF Notes
ViewAsPdf ChromePdfRenderer Rendu HTML
ActionAsPdf ChromePdfRenderer.RenderUrlAsPdf() URL de rendu
UrlAsPdf ChromePdfRenderer.RenderUrlAsPdf() URL de rendu
Orientation enum PdfPaperOrientation enum Orientation
Taille enum PdfPaperSize enum Taille du papier

Conversion de l'espace réservé de la page

Placeholder Rotativa IronPDFPlaceholder
[page] {page}
[topage] {total-pages}
[date] {date}
[time] {heure}
[titre] {html-title}
[sitepage] {url}

Exemples de migration de code

Exemple 1 : Conversion HTML vers PDF

Avant (Rotativa):

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class PdfController : Controller
    {
        public async Task<IActionResult> GeneratePdf()
        {
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            // Rotativarequires returning a ViewAsPdf result from MVC controller
            return new ViewAsPdf()
            {
                ViewName = "PdfView",
                PageSize = Rotativa.AspNetCore.Options.Size.A4
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class PdfController : Controller
    {
        public async Task<IActionResult> GeneratePdf()
        {
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            // Rotativarequires returning a ViewAsPdf result from MVC controller
            return new ViewAsPdf()
            {
                ViewName = "PdfView",
                PageSize = Rotativa.AspNetCore.Options.Size.A4
            };
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("output.pdf");

            Console.WriteLine("PDF generated successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("output.pdf");

            Console.WriteLine("PDF generated successfully!");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Cet exemple illustre la différence architecturale fondamentale. Rotativanécessite de renvoyer un résultat ViewAsPdfà partir d'une action de contrôleur MVC, ce qui vous lie au cadre ASP.NET MVC. Le modèle ne fonctionne que dans le pipeline de requêtes MVC et nécessite une vue Razor pour le rendu.

IronPDF fonctionne partout : applications de console, API web, Blazor, Razor Pages, ou tout type de projet .NET. Vous appelez RenderHtmlAsPdf() avec une chaîne HTML et vous enregistrez le résultat. Aucun contrôleur MVC n'est requis, aucune dépendance à l'égard de la vue. Consultez la documentation HTML vers PDF pour des exemples complets.

Exemple 2 : Conversion d'une URL en PDF

Avant (Rotativa):

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class UrlPdfController : Controller
    {
        public async Task<IActionResult> ConvertUrlToPdf()
        {
            // Rotativaworks within MVC framework and returns ActionResult
            return new UrlAsPdf("https://www.example.com")
            {
                FileName = "webpage.pdf",
                PageSize = Rotativa.AspNetCore.Options.Size.A4,
                PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class UrlPdfController : Controller
    {
        public async Task<IActionResult> ConvertUrlToPdf()
        {
            // Rotativaworks within MVC framework and returns ActionResult
            return new UrlAsPdf("https://www.example.com")
            {
                FileName = "webpage.pdf",
                PageSize = Rotativa.AspNetCore.Options.Size.A4,
                PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait
            };
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
            pdf.SaveAs("webpage.pdf");

            Console.WriteLine("URL converted to PDF successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
            pdf.SaveAs("webpage.pdf");

            Console.WriteLine("URL converted to PDF successfully!");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La classe UrlAsPdfde Rotativadoit renvoyer un ActionResult à partir d'un contrôleur MVC. La méthode RenderUrlAsPdf() d'IronPDF peut être appelée à partir de n'importe quel contexte et renvoie directement un objet PdfDocument. Le rendu de l'URL utilise le moteur moderne Chromium au lieu du moteur WebKit vulnérable et obsolète de wkhtmltopdf. Pour en savoir plus, consultez nos tutoriels.

Exemple 3 : En-têtes et pieds de page avec numéros de page

Avant (Rotativa):

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using Rotativa.AspNetCore.Options;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class HeaderFooterController : Controller
    {
        public async Task<IActionResult> GeneratePdfWithHeaderFooter()
        {
            return new ViewAsPdf("Report")
            {
                PageSize = Size.A4,
                PageMargins = new Margins(20, 10, 20, 10),
                CustomSwitches = "--header-center \"Page Header\" --footer-center \"Page [page] of [toPage]\""
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using Rotativa.AspNetCore.Options;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class HeaderFooterController : Controller
    {
        public async Task<IActionResult> GeneratePdfWithHeaderFooter()
        {
            return new ViewAsPdf("Report")
            {
                PageSize = Size.A4,
                PageMargins = new Margins(20, 10, 20, 10),
                CustomSwitches = "--header-center \"Page Header\" --footer-center \"Page [page] of [toPage]\""
            };
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
            {
                CenterText = "Page Header",
                DrawDividerLine = true
            };

            renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
            {
                CenterText = "Page {page} of {total-pages}",
                DrawDividerLine = true
            };

            var htmlContent = "<h1>Report Title</h1><p>Report content goes here.</p>";
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("report.pdf");

            Console.WriteLine("PDF with headers and footers created successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
            {
                CenterText = "Page Header",
                DrawDividerLine = true
            };

            renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
            {
                CenterText = "Page {page} of {total-pages}",
                DrawDividerLine = true
            };

            var htmlContent = "<h1>Report Title</h1><p>Report content goes here.</p>";
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("report.pdf");

            Console.WriteLine("PDF with headers and footers created successfully!");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Rotativa utilise des CustomSwitches pour transmettre des arguments de ligne de commande à wkhtmltopdf, y compris la configuration de l'en-tête et du pied de page avec des caractères génériques tels que [page]et [toPage]. Cette approche basée sur les chaînes de caractères est sujette aux erreurs et difficile à valider au moment de la compilation.

IronPDF utilise des objets TextHeaderFooter fortement typés avec des propriétés telles que CenterText et DrawDividerLine. La syntaxe des espaces réservés passe de [page]à {page}et de [toPage] à {total-pages}. Les propriétés typées offrent un système IntelliSense, une vérification au moment de la compilation et aucun risque de fautes de frappe.


Le problème de l'architecture MVC uniquement

Rotativa a été conçu pour ASP.NET MVC 5 et les versions antérieures :

// ❌ Rotativa- Only works with classic MVC pattern
public class InvoiceController : Controller
{
    public ActionResult InvoicePdf(int id)
    {
        var model = GetInvoice(id);
        return new ViewAsPdf("Invoice", model);  // Tied to MVC Views
    }
}

// Problems:
// - No Razor Pages support
// - No Blazor support
// - No minimal APIs support
// - No ASP.NET Core native integration
// ❌ Rotativa- Only works with classic MVC pattern
public class InvoiceController : Controller
{
    public ActionResult InvoicePdf(int id)
    {
        var model = GetInvoice(id);
        return new ViewAsPdf("Invoice", model);  // Tied to MVC Views
    }
}

// Problems:
// - No Razor Pages support
// - No Blazor support
// - No minimal APIs support
// - No ASP.NET Core native integration
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF sépare le rendu des vues de la génération de PDF, qui est en fait plus flexible - vous pouvez rendre n'importe quel HTML, pas seulement les vues MVC.


Migration de modèles asynchrones

Rotativa bloque le fil ;IronPDFprend en charge l'intégralité des fonctions async/await :

// ❌ Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}

// ✅IronPDF- Complet asyncsupport
public async Task<IActionResult> GeneratePdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
    // Non-blocking, better scalability
}
// ❌ Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}

// ✅IronPDF- Complet asyncsupport
public async Task<IActionResult> GeneratePdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
    // Non-blocking, better scalability
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nouvelles capacités après la migration

Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités que Rotativane peut pas vous offrir :

Fusion de fichiers PDF

var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Signatures numériques

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Protection par mot de passe

pdf.SecuritySettings.UserPassword = "secret";
pdf.SecuritySettings.UserPassword = "secret";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Marques de fond

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Conformité de l'archivage du PDF/A

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Support CSS moderne

// This now works (broke in Rotativa)
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>
    <div style='display: grid; grid-template-columns: 1fr 1fr 1fr;'>
        <div>Col 1</div><div>Col 2</div><div>Col 3</div>
    </div>";
var pdf = renderer.RenderHtmlAsPdf(html);  // Works!
// This now works (broke in Rotativa)
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>
    <div style='display: grid; grid-template-columns: 1fr 1fr 1fr;'>
        <div>Col 1</div><div>Col 2</div><div>Col 3</div>
    </div>";
var pdf = renderer.RenderHtmlAsPdf(html);  // Works!
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Liste de contrôle de la migration

Pré-migration

  • [Identifier toutes les utilisations de Rotativadans la base de code
  • [Document CustomSwitches utilisé pour la conversion en RenderingOptions
  • [Notez la syntaxe de l'en-tête et du pied de page pour la conversion ([page]{page})
  • [ ] Obtenir la clé de licenceIronPDFà partir de ironpdf.com

Modifications du paquet

  • [Supprimer les paquets NuGet Rotativa et Rotativa.AspNetCore
  • [Supprimer les binaires de wkhtmltopdf (wkhtmltopdf.exe, wkhtmltox.dll)
  • [Installer le paquet IronPdf NuGet

Modifications du code

  • [Mise à jour des importations d'espaces de noms (utilisant Rotativa;utilisant IronPdf;)
  • [Remplacer ViewAsPdfpar ChromePdfRenderer+ RenderHtmlAsPdf()
  • [Remplacer UrlAsPdfpar RenderUrlAsPdf()
  • [Convertir les propriétés CustomSwitches en RenderingOptions
  • [Mise à jour de la syntaxe des espaces réservés ([page]{page}, [topage]{total-pages})
  • [Remplacer PageMargins par des MarginTop/MarginBottom/MarginLeft/MarginRight individuels
  • [Modifier le modèle asynchrone le cas échéant
  • [Ajouter l'initialisation de la licence au démarrage de l'application

Post-Migration

  • [Vérifier que la génération de PDF fonctionne correctement
  • [Comparer la qualité de sortie des PDF (Chromium rend plus précisément)
  • [Vérifier les améliorations du rendu CSS (Flexbox/Grid fonctionnent maintenant)
  • [Test d'exécution JavaScript (désormais fiable avec Chromium)
  • [Vérifier que l'analyse de sécurité est réussie (plus de drapeaux CVE-2022-35583)
  • [Mise à jour des configurations Docker pour supprimer l'installation de wkhtmltopdf

Conclusion

Bien que Rotativaait historiquement fourni une solution simple pour la génération de PDF dans les applications ASP.NET MVC, sa dépendance à l'égard d'une pile technologique obsolète et son abandon en termes de maintenance posent des défis importants. La faille de sécurité critique CVE-2022-35583ne sera jamais corrigée, exposant de manière permanente toutes les applications Rotativa.

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

  1. Sécurité : Vulnérabilité SSRF critique (CVE-2022-35583) → Protégé
  2. Architecture : MVC uniquement → Tout type de projet .NET
  3. Moteur de rendu : WebKit dépassé (2012) → Chromium moderne
  4. Support CSS : Partielle (pas de Flexbox/Grid) → Prise en charge CSS3 complète
  5. JavaScript: Peu fiable → Prise en charge complète de ES6
  6. Modèle : ViewAsPdftype de retour → ChromePdfRenderer+ RenderHtmlAsPdf()
  7. Rendu d'URL : UrlAsPdfRenderUrlAsPdf()
  8. Headers/Footers : chaînes CustomSwitches → Objets TextHeaderFooter typés
  9. Placeholders : [page], [topage]{page}, {total-pages}
  10. Support asynchrone : synchrone uniquement → asynchrone complet/await
  11. Maintenance: Abandonné → Mises à jour hebdomadaires

Les développeurs intéressés par la génération de PDF polyvalents et sécurisés dans diverses applications .NET trouveront enIronPDFun choix plus convaincant.IronPDFgarantit non seulement la compatibilité avec un large éventail d'applications, mais fournit également une assistance et des mises à jour continues, ce qui est crucial dans le paysage technologique actuel qui évolue rapidement.

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

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