Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de Spire.PDF vers IronPDF en C#

Migrer de Spire.PDF àIronPDF: Guide de migration complet en C

La migration de Spire.PDF versIronPDFtransforme votre flux de travail de génération de PDF d'une bibliothèque qui rend le texte sous forme d'images à une bibliothèque qui produit du texte véritable, sélectionnable et consultable à l'aide d'un moteur de rendu moderne Chromium. Ce guide fournit un chemin de migration complet, étape par étape, qui résout les limitations critiques de Spire.PDF en matière de rendu HTML et les problèmes d'intégration des polices.

Pourquoi migrer de Spire.PDF à IronPDF

Comprendre Spire.PDF

Spire.PDF est une bibliothèque PDF commerciale robuste conçue pour les développeurs .NET afin de traiter efficacement les documents PDF. Spire.PDF s'est imposé dans la communauté des programmeurs pour ses capacités spécifiques, en particulier dans les applications patrimoniales, et ses capacités d'intégration s'alignent parfaitement sur les autres composants de la gamme d'outils E-iceblue.

Cependant, Spire.PDF présente plusieurs problèmes fondamentaux qui affectent son utilisation dans le monde réel, en particulier en ce qui concerne la conversion HTML vers PDF et la prise en charge des normes web modernes.

Questions techniques essentielles

Problème Impact Solution IronPDF
Texte rendu en images PDF non consultables, non accessibles, impossibilité de copier le texte Rendu de texte réel
Dépendance d'Internet Explorer Rendu obsolète, risques de sécurité Moteur moderne Chromium
Echecs d'intégration des polices Les documents ne semblent pas corrects sur d'autres systèmes Gestion fiable des polices
Grande empreinte de déploiement Utilisation élevée de la mémoire, démarrage lent Déploiement efficace
Support CSS limité Les mises en page modernes ne s'affichent pas correctement Prise en charge complète de CSS3

Le problème principal : les PDF basés sur des images

L'un des inconvénients majeurs de Spire.PDF est sa tendance à rendre le texte des documents HTML sous forme d'images. Il en résulte des PDF dont le texte n'est ni sélectionnable ni consultable, ce qui peut constituer une sérieuse limitation pour les applications nécessitant une fonctionnalité de recherche ou une interaction avec le texte du document.

Lorsque vous utilisez la méthode LoadFromHTML() de Spire.PDF, elle rend souvent le texte sous forme d'images bitmap plutôt que sous forme de texte réel, ce qui crée ces problèmes :

  • Le texte NE PEUT PAS être sélectionné
  • Le texte NE PEUT PAS faire l'objet d'une recherche
  • Le texte NE PEUT PAS être copié
  • Les lecteurs d'écran NE PEUVENT PAS la lire (violation de l'accessibilité)
  • La taille du fichier est BEAUCOUP plus importante
  • Le zoom provoque une pixellisation

Comparaison entre Spire.PDF et IronPDF

Fonction Spire.PDF IronPDF
Rendu HTML vers PDF Texte rendu sous forme d'images Rendu en texte intégral (sélectionnable et consultable)
Moteur de rendu Internet Explorer dépend de certains systèmes Basé sur Chromium, conforme aux normes web modernes
Traitement des polices Problèmes connus avec l'intégration des polices Gestion fiable et robuste des polices
Support CSS3 Limité Complet
Flexbox/Grid Non pris en charge Prise en charge complète
JavaScript Limité ES6+ complet
Accessibilité des PDF Médiocre (basé sur l'image) Excellente
Conception d'API Complexe Simple et intuitif
Empreinte de déploiement Grandes Modéré
Licence Freemium/Commercial Commercial

Pour les équipes qui prévoient d'adopter .NET 10 et C# 14 d'ici 2025 et 2026,IronPDFrésout les problèmes critiques liés à la conversion HTML-PDF de Spire.PDF en rendant le texte sous forme de texte sélectionnable réel plutôt que d'images, ce qui garantit que les PDF sont consultables et accessibles.


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 Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF  # If using free version

# Install IronPDF
dotnet add package IronPdf
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF  # If using free version

# Install IronPDF
dotnet add package IronPdf
SHELL

Configuration de la licence

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
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: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;

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

Mappages de l'API de base

Spire.PDF IronPDF Notes
new PdfDocument() new ChromePdfRenderer() Pour le rendu HTML
pdf.LoadFromHTML() renderer.RenderHtmlAsPdf() Conversion HTML
pdf.LoadFromFile() PdfDocument.FromFile() Charger le PDF existant
pdf.SaveToFile() pdf.SaveAs() Enregistrer dans un fichier
pdf.Close() Pas nécessaire Utilise le modèle dispose
pdf.Pages.Add() renderer.RenderHtmlAsPdf() Créer une page à partir de HTML
pdf.InsertPageRange() PdfDocument.Merge() Fusionner des PDF
page.Canvas.DrawString() TextStamper + ApplyStamp() Ajouter du texte
PdfFont Style CSS en HTML Configuration des polices
PdfBrush Style CSS en HTML Configuration couleur/remplissage

Exemples de migration de code

Exemple 1 : Conversion HTML vers PDF

Avant (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        pdf.LoadFromHTML(htmlString, false, true, true);
        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
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()
    {
        var renderer = new ChromePdfRenderer();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlString);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Cet exemple illustre la différence fondamentale dans le rendu HTML. Spire.PDF utilise LoadFromHTML() avec un objet PdfHtmlLayoutFormat, qui rend souvent le texte sous forme d'images bitmap. Le résultat est un PDF dans lequel les utilisateurs ne peuvent pas sélectionner, copier ou rechercher du texte.

IronPDF utilise un ChromePdfRenderer avec RenderHtmlAsPdf(), produisant un véritable texte entièrement sélectionnable, consultable et accessible. Aucun appel à Close() n'est requis :IronPDFutilise le motif dispose pour un nettoyage automatique. Voir la documentation HTML vers PDF pour des exemples complets.

Exemple 2 : Fusionner plusieurs PDF

Avant (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf1 = new PdfDocument();
        pdf1.LoadFromFile("document1.pdf");

        PdfDocument pdf2 = new PdfDocument();
        pdf2.LoadFromFile("document2.pdf");

        pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);

        pdf1.SaveToFile("merged.pdf");
        pdf1.Close();
        pdf2.Close();
    }
}
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()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2);

        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Spire.PDF nécessite le chargement manuel de chaque document avec new PdfDocument()+ LoadFromFile(), puis l'utilisation de InsertPageRange() pour spécifier les pages à insérer, et enfin l'appel de Close() sur chaque document.

IronPDF utilise le modèle plus simple PdfDocument.FromFile()et une méthode statique PdfDocument.Merge()qui accepte plusieurs documents. Aucun appel à Close() n'est nécessaire. Pour en savoir plus, consultez nos tutoriels.

Exemple 3 : Ajouter du texte à un PDF

Avant (Spire.PDF):

// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

class Program
{
    static void Main()
    {
        PdfDocument pdf = new PdfDocument();
        PdfPageBase page = pdf.Pages.Add();

        PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
        PdfBrush brush = new PdfSolidBrush(Color.Black);

        page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));

        pdf.SaveToFile("output.pdf");
        pdf.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");

        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalOffset = 50,
            HorizontalOffset = 50
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Spire.PDF utilise un modèle de dessin basé sur le canevas avec PdfFont, PdfBrush, et page.Canvas.DrawString()pour positionner le texte à des coordonnées spécifiques en utilisant PointF.

IronPDF utilise un objet TextStamper doté de propriétés intuitives telles que Text, FontSize, VerticalOffset et HorizontalOffset, puis l'applique avec ApplyStamp(). Cette approche est plus déclarative et plus facile à maintenir.


Le problème du texte en tant qu'image

Pourquoi c'est essentiel

Lorsque Spire.PDF convertit du HTML au PDF en utilisant un rendu basé sur l'image, vos documents perdent des fonctionnalités essentielles :

1. Pas de recherche de texte : Les utilisateurs ne peuvent pas utiliser Ctrl+F pour trouver du texte. Les systèmes de gestion documentaire ne peuvent pas indexer le contenu.

2. pas de sélection/copie de texte : Les utilisateurs qui tentent de copier une citation, une référence ou des données ne peuvent pas sélectionner de texte : il s'agit d'une image.

3. violations de l'accessibilité : les PDF basés sur des images ne sont pas conformes aux WCAG 2.1, à la section 508 (gouvernement américain), aux exigences de l'ADA et à la compatibilité avec les lecteurs d'écran.

4. grande taille de fichier : la comparaison du même contenu montre que Spire.PDF (basé sur l'image) produit des fichiers jusqu'à 16 fois plus grands qu'IronPDF (basé sur le texte).

Détection : Votre PDF est-il basé sur des images ?

Ouvrez votre document généré par Spire.PDF et effectuez les tests suivants :

  1. Sélection de texte : Cliquez sur le texte et faites-le glisser. Si rien n'est souligné → IMAGE-BASED
  2. Ctrl+F Recherche : Recherchez n'importe quel mot sur la page. Si "Aucune correspondance trouvée" → IMAGE-BASED
  3. Copier/coller : Sélectionnez et copiez du texte dans le bloc-notes. Si rien ne colle → IMAGE-BASED

Le problème d'Internet Explorer

Le moteur de rendu de Spire.PDF

Spire.PDF s'appuie sur Internet Explorer/Edge Legacy pour le rendu HTML dans certains environnements. IE a été supprimé en 2022, les feuilles de style CSS modernes ne fonctionnent pas, la prise en charge de JavaScript est limitée et le rendu n'est pas cohérent d'un système à l'autre.

Le CSS moderne qui échoue dans Spire.PDF

<!-- This HTML renders incorrectly in Spire.PDF -->
<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
<!-- This HTML renders incorrectly in Spire.PDF -->
<div style="display: flex; justify-content: space-between; gap: 20px;">
    <div style="flex: 1;">Column 1</div>
    <div style="flex: 1;">Column 2</div>
</div>

<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>

<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
HTML

IronPDF utilise le rendu moderne de Chromium, de sorte que toutes ces fonctionnalités CSS fonctionnent correctement.


Nouvelles capacités après la migration

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

Texte sélectionnable et consultable

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");

// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Support CSS moderne

var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
var renderer = new ChromePdfRenderer();

var html = @"
<style>
    :root { --primary: #007bff; }
    .container { display: flex; gap: 20px; }
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
    <div style='flex: 1; color: var(--primary)'>Column 1</div>
    <div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Filigranes basés sur le HTML

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.5);
        transform: rotate(-45deg);
    '>DRAFT</div>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Liste de contrôle de la migration

Pré-migration

  • [Inventaire de toutes les utilisations de Spire.PDF dans la base de code
  • [Tester les PDF existants pour la sélection du texte (détection des problèmes critiques)
  • [Appels au document LoadFromHTML() (ce sont les appels à corriger en priorité)
  • [ ] Obtenir la clé de licenceIronPDFà partir de ironpdf.com

Mises à jour du code

  • [Supprimer le paquet NuGet Spire.PDF (et FreeSpire.PDF si vous utilisez la version gratuite)
  • [Installer le paquet IronPdf NuGet
  • [Mise à jour des importations de l'espace de noms (utilisant Spire.Pdf;utilisant IronPdf;)
  • [Remplacer LoadFromHTML() par RenderHtmlAsPdf() (CORRECTIF CRITIQUE)
  • [Remplacer new PdfDocument()+ LoadFromFile() par PdfDocument.FromFile()
  • [Remplacer InsertPageRange() par PdfDocument.Merge()
  • [Remplacer Canvas.DrawString() par TextStamper + ApplyStamp()
  • [Remplacer SaveToFile() par SaveAs()
  • [Supprimer tous les appels à Close() (non nécessaire dans IronPDF)
  • [Ajouter l'initialisation de la licence au démarrage de l'application

Testing

  • [Vérifier que le texte est sélectionnable dans les PDF générés (TEST CRITIQUE)
  • [Vérifier les améliorations du rendu CSS (Flexbox/Grid fonctionnent maintenant)
  • [Vérifier que la taille des fichiers est réduite
  • [Test d'accessibilité avec les lecteurs d'écran
  • [Comparaison des performances

Conclusion

Bien que Spire.PDF offre une série de fonctionnalités pertinentes pour les développeurs qui travaillent sur des applications héritées et des opérations basées sur des suites, ses limites en matière de rendu de texte, sa dépendance à l'égard de moteurs de rendu obsolètes et ses problèmes de gestion des polices de caractères sont des éléments importants à prendre en compte.IronPDFse distingue comme une alternative compétitive, démontrant des capacités de conversion HTML vers PDF supérieures grâce à ses techniques de rendu modernes et à sa gestion robuste du texte.

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

  1. Rendu du texte : Image (non sélectionnable) → Texte véritable (sélectionnable, consultable)
  2. Moteur de rendu : dépendant d'Internet Explorer → Modern Chromium
  3. Support CSS : Limité → CSS3 complet (Flexbox, Grid, CSS Variables)
  4. Conversion HTML : pdf.LoadFromHTML()renderer.RenderHtmlAsPdf()
  5. Chargez un PDF existant : new PdfDocument()+ LoadFromFile()PdfDocument.FromFile()
  6. Fusionner des PDF : InsertPageRange()PdfDocument.Merge()
  7. Ajouter du texte : Canvas.DrawString() avec PdfFont/PdfBrushTextStamper + ApplyStamp()
  8. Save : SaveToFile()SaveAs()
  9. Cleanup : Close() nécessaire → Pas nécessaire (motif dispose)
  10. Taille du fichier : Grand (basé sur l'image) → Compact (vrai PDF)
  11. Accessibilité : Médiocre → Excellente

Lors de la sélection d'une bibliothèque PDF, il est essentiel d'aligner le choix sur les exigences spécifiques du projet en cours, en tenant compte de facteurs tels que la fidélité du document, la facilité de recherche et la compatibilité avec le web moderne. En comprenant cette dynamique, les développeurs peuvent prendre des décisions éclairées qui optimisent le traitement des documents et l'expérience des utilisateurs.

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

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